找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2047|回复: 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里的函数和变量都包括吗?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
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 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:592807 发表于 2020-12-2 16:00 | 只看该作者
需要被其他C文件调用的才放

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:813329 发表于 2020-12-2 16:25 | 只看该作者
可以把所有的函数和变量都包括进去,也可以只包括要被其他文件调用的函数和变量。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

7#
ID:406879 发表于 2020-12-7 16:57 | 只看该作者
我曾经看过把程序直接写.h文件里的。。。。。没有.c文件。。。
回复

使用道具 举报

8#
ID:856365 发表于 2020-12-7 21:33 | 只看该作者
不需要都放在里面,主要就是放一些宏定义,以及会被其他.c文件调用的变量
回复

使用道具 举报

9#
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 的区别。
回复

使用道具 举报

10#
ID:517466 发表于 2020-12-8 19:53 | 只看该作者
做过其他软件吗?比如java。当某个函数需要被外部程序使用的时候,如果想暴露给外部程序,需要使用public声明。同样的,c程序中,如果外部程序使用这个程序中的某个函数,他得知道去哪里找。所以设置了头文件。相当于告诉外部程序需要的函数在哪里。不被外部程序调用的函数,可以不放在头文件中。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表