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去,使得头文件的内容不被重复包含(虽然应该是被重复粘贴了)

一些规范

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

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

你可能感兴趣的:(c,study,c语言)