请问牛人c中#ifndef包含头文件是怎么个用法?看了#ifdef的百科后,不是很明白他在头文件包含的用法??

小弟会追加分数的!!
最好能够结合实例说明!!!

这是为了避免头文件的重复包含所设计的一个用法。
假如,你自己编写的头文件为my.h,里面包含了stdio.h。主函数文件里面包含了my.h,同时也包含了stdio.h,那么stdio.h就被重复包含了,这在c语言里面是一个错误,因为涉及到重复定义的问题,当然stdio.h已经进行了处理,不会出现重复包含的错误。解决的方法就是使用#ifndef的命令。
#ifndef MY_H_H_
#define MY_H_H_
...
...
#endif
以上就是避免头文件被重复包含的格式,MY_H_H_是一个标识符,常用的做法是你的头文件名全部字母大写,并将 . 改成下划线,如果确保安全,可以在后面多加几个_H,在省略号的地方是你头文件的内容。
第一次包含的时候,MY_H_H_没有被定义,所以定义MY_H_H_,然后包含头文件的内容。第二次包含的时候,因为MY_H_H_已经在第一次被定义了,所以就不再包含头文件的内容,这样就达到防止重复包含的目的了。追问

请问头文件的内容必须写上吗??

追答

当然要写上啊,不写上怎么实现头文件的作用?如果是测试的话,你可以自己建一个头文件,在上述命令的省略号的地方简单地定义一个函数,例如
void print (void)
{
printf ("****\n");
}
然后在主函数的文件中,包含你的头文件 #include "my.h",在主函数中就可以调用print函数了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-17
防止头文件被重复包含
#include"XXX.H"会把xxx.H拷到包含它的c文件里面
该c文件包含的其他头文件也可能包含xxx.h
这样xxx.h在该c文件中就不止一份了

用了这个之后,如果前面这个宏被定义了,即文件被包含了,就不再包含这段了

另外一种:
#ifndef XXX
#include "XXX.H"
#endif

这种叫条件编译,比如你的代码可以在多种编译器下编译,但是各编译器用的头文件不一样
加这种宏来区分不同的编译条件
这个宏是可以作为编译参数传进来的
如果你用过gcc,makefile之类的东西应该会有所了解追问

百科的这种用法:#ifndef _STDIO_H_
#define _STDIO_H_
......
#endif
是怎么用的???我在vc6.0编译器上编译有问题啊!!结果是该头文件的声明的某个函数不能被被包含的cpp文件使用!!上述用法可以改为:#ifndef _STDIO_H_
#define _STDIO_H_
#endif
??即省略号的用处是什么??

百科的这种用法:#ifndef _STDIO_H_
#define _STDIO_H_
......
#endif
是怎么用的???我在vc6.0编译器上编译有问题啊!!结果是该头文件的声明的某个函数不能被被包含的cpp文件使用!!上述用法可以改为:#ifndef _STDIO_H_
#define _STDIO_H_
#endif
??即省略号的用处是什么??

第2个回答  2011-06-17
#ifndef TEST//判断有没有定义TEST,如果定义了就执行语句2 否则执行语句1
语句1
#else
语句2
#endif追问

就是说它是否测试头文件里定义的某个变量或函数是否已经被定义了,而不是某个头文件是否已经被包含了???

相似回答