C语言中的头文件中的宏定义

常见内容

源文件的头部一般都会有#include指令来包含头文件,头文件的内容一般就是

  • #define语句
  • extern声明
  • 函数原型声明
    #include#define都是C的预处理指令,#include就是把文件中的所有内容粘贴到源文件中,仅此而已!

(一般)格式

头文件的编写一般遵循如下格式

#ifndef _MYLIB_H_
#define _MYLIB_H_
/*文件的内容放在这里,如*/
int a;
typedef struct _node{
    int value;
    struct _node *next;
}Node;
#define PI 3.14
#endif

这样写的目的是为了防止重复导入,因为预处理器在处理ifndef指令的时候,如果_MYLIB_H_被定义过了,就会直接跳转到#endif处,中间的内容在真正编译的时候不会被包括进去。_MYLIB_H_可以改成任何名字,不过最好按照规范:所有字母大写,.改成_。
刚开始我一直以为_MYLIB_H_被定义为下面的所有语句,然后就很纳闷,这个define怎么和宏定义的define不太一样,其实在这里_MYLIB_H_就是被定义成了一个空的东西,有定义但是什么值都没有。然后如果又被引入一次,预处理器就会跳到#endif去,使得头文件的内容不被重复包含(虽然应该是被重复粘贴了)

一些规范

尽管条件包含可以避免包含多个同一文件,用户就不必考虑头文件之间的依赖关系,但是不同源文件的链接是在最后一步进行的,而预处理是在第一步进行的,所以如果头文件中有变量的定义而且被多个文件包含,在链接的时候就会报重复定义的错误,所以,一个好的规范就是:

头文件中不要有函数或者变量的定义!

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值