标题:
请问自己写的C语言头文件里要把相应的.c文件中所有的函数和变量都包括吗?
[打印本页]
作者:
明日香
时间:
2020-12-2 09:28
标题:
请问自己写的C语言头文件里要把相应的.c文件中所有的函数和变量都包括吗?
比如说这是我写的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里的函数和变量都包括吗?
作者:
amandv
时间:
2020-12-2 11:57
你可以把定义放在H文件中所有的C调用,或在主程序定义,在其他C文件引用定义
作者:
xy07580782
时间:
2020-12-2 12:15
所有的宏定义,函数名放里面就可以了,变量数组不用.
作者:
csmyldl
时间:
2020-12-2 13:35
可以放入,也可以不放入,主要看你的程序组织结构,作为头文件,只是预处理的一种,只要符合要求,预处理都可以进行。
作者:
黄youhui
时间:
2020-12-2 16:00
需要被其他C文件调用的才放
作者:
蟹黄味瓜子仁
时间:
2020-12-2 16:25
可以把所有的函数和变量都包括进去,也可以只包括要被其他文件调用的函数和变量。
作者:
回忆不堪回首
时间:
2020-12-7 16:57
我曾经看过把程序直接写.h文件里的。。。。。没有.c文件。。。
作者:
xyfzq
时间:
2020-12-7 21:33
不需要都放在里面,主要就是放一些宏定义,以及会被其他.c文件调用的变量
作者:
老马工作室
时间:
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 的区别。
作者:
suncat0504
时间:
2020-12-8 19:53
做过其他软件吗?比如java。当某个函数需要被外部程序使用的时候,如果想暴露给外部程序,需要使用public声明。同样的,c程序中,如果外部程序使用这个程序中的某个函数,他得知道去哪里找。所以设置了头文件。相当于告诉外部程序需要的函数在哪里。不被外部程序调用的函数,可以不放在头文件中。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1