久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3016|回復: 9
收起左側

請問自己寫的C語言頭文件里要把相應的.c文件中所有的函數和變量都包括嗎?

  [復制鏈接]
ID:796670 發表于 2020-12-2 09:28 | 顯示全部樓層 |閱讀模式
比如說這是我寫的LCD.c文件:
#include<reg52.h>
#include<intrins.h>
#include "LCD.h"
#define uchar unsigned char
#define uint  unsigned int
#define IODATA  P0
sbit E=P2^2;    //1602使能引腳
sbit RW=P2^1;    //1602讀寫引腳   
sbit RS=P2^0;    //1602數據/命令選擇引腳
uchar strwind[];
void delay(uint ms)  
{
uint i,j;
        for(i=ms;i>0;i--);
        
         for(j=120;j>0;j--);
}

void wcmd(uchar del)//寫命令函數
{
  RS=0;//命令選擇端
        delay(10);
        RW=0;//寫命令
        delay(10);
        IODATA=del;  //把命令字寫入
        delay(10);
        E=1;//使能
        delay(10);
        E=0;
}

void lcd1602_writedata(uchar dat)//寫數據函數
{
  delay(10);
        RS=1;//數據選擇端
        delay(10);
        RW=0;//寫命令
        delay(10);
        IODATA=dat;  //把要顯示的數據寫入
        delay(10);
        E=1;
        delay(10);
        E=0;
}

void lcd1602_init()//LCD初始化
{
wcmd(0x38);
wcmd(0x0C);
wcmd(0x06);
wcmd(0x01);
}

void lcd1602_show(uchar a)
{
        uchar m=0;
        lcd1602_init();
        delay(1000);
        wcmd(a);
        delay(1000);
        for(m=0;m<4;m++)
        {
        lcd1602_writedata(strwind[m]);
  }
}

由于我要在其他的.c文件里用到LCD.c里的函數和變量,所以寫了一個相應的頭文件:LCD.h
如下:
#ifndef _LCD_H
#define _LCD_H
#define uchar unsigned char
#define uint  unsigned int
void delay(uint ms);
void lcd1602_init();
void wcmd(uchar del);
void lcd1602_writedata(uchar dat);
void lcd1602_show(uchar a);
extern uchar strwind[];
#endif


請問這樣寫對嗎?是需要把LCD.C里的函數和變量都包括嗎?
回復

使用道具 舉報

ID:414556 發表于 2020-12-2 11:57 | 顯示全部樓層
你可以把定義放在H文件中所有的C調用,或在主程序定義,在其他C文件引用定義

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:293933 發表于 2020-12-2 12:15 | 顯示全部樓層
所有的宏定義,函數名放里面就可以了,變量數組不用.

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:235200 發表于 2020-12-2 13:35 | 顯示全部樓層
可以放入,也可以不放入,主要看你的程序組織結構,作為頭文件,只是預處理的一種,只要符合要求,預處理都可以進行。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:592807 發表于 2020-12-2 16:00 | 顯示全部樓層
需要被其他C文件調用的才放

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:813329 發表于 2020-12-2 16:25 | 顯示全部樓層
可以把所有的函數和變量都包括進去,也可以只包括要被其他文件調用的函數和變量。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:406879 發表于 2020-12-7 16:57 | 顯示全部樓層
我曾經看過把程序直接寫.h文件里的。。。。。沒有.c文件。。。
回復

使用道具 舉報

ID:856365 發表于 2020-12-7 21:33 | 顯示全部樓層
不需要都放在里面,主要就是放一些宏定義,以及會被其他.c文件調用的變量
回復

使用道具 舉報

ID:170498 發表于 2020-12-8 13:05 | 顯示全部樓層
以在下拙見:

1.函數和全局變量:
如果函數僅僅在本文件使用,像void wcmd(uchar del)這個函數,一般來說不會被在其它文件(如:main.c)調用,可以不用在頭文件聲明,寫在調用他的函數前面就行了。
不過按照規范,本文件的函數前面定義和聲明的時候應該加上 static 這個關鍵字,static void wcmd(uchar del),表明這個是本文件的函數,不允許其它文件調用,并在lcd.c的前面聲明,不在頭文件聲明。
變量跟函數是同一個道理,就看是本文件使用還是整個工程使用,如果是僅僅在本文件調用,那么定義的時候:static char name; 如果其它也要調用,就把static去掉,在其它文件上要調用的話,在調用的文件上聲明 extern char name; 。

2.宏定義:
如果宏需要被其它文件使用,就在源文件(.c文件)定義,否則就在頭文件定義。

3. "#define uchar unsigned char" 這一段建議改成 "typedef char uchar;",建議查一下 #define 和typedef def 的區別。
回復

使用道具 舉報

ID:517466 發表于 2020-12-8 19:53 | 顯示全部樓層
做過其他軟件嗎?比如java。當某個函數需要被外部程序使用的時候,如果想暴露給外部程序,需要使用public聲明。同樣的,c程序中,如果外部程序使用這個程序中的某個函數,他得知道去哪里找。所以設置了頭文件。相當于告訴外部程序需要的函數在哪里。不被外部程序調用的函數,可以不放在頭文件中。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩成人av在线 | 欧美一区二区三区,视频 | 中文字幕 在线观看 | 91精品久久久 | 香蕉视频一区二区 | 久久综合九九 | 国产成人亚洲精品自产在线 | 午夜免费影视 | 日韩三片 | 亚洲免费人成在线视频观看 | 视频一区二区在线观看 | 理伦毛片 | 中文字幕亚洲精品 | 最新中文字幕在线 | 在线国产一区二区 | 精品国产一区二区三区日日嗨 | 91一区二区三区 | 亚洲精品 在线播放 | 成人综合在线视频 | 伦理午夜电影免费观看 | 欧美日韩一区在线 | av免费成人 | 日韩视频精品在线 | 日韩成人影院在线观看 | 亚洲精品一二三区 | 瑟瑟视频在线看 | 日韩精品一区二区三区 | 天堂中文字幕av | 91高清视频在线观看 | 日韩中文字幕 | 欧美日本韩国一区二区 | 色综合久久久久 | 免费看淫片| 91新视频 | 国产成人精品午夜 | 一级做a爰片性色毛片16美国 | 色婷婷国产精品综合在线观看 | 四虎永久在线精品免费一区二 | 久久久久久久国产精品影院 | 99免费在线| 中文字幕不卡一区 |