头文件是扩展名为 .h 的文件,包含了 C 函数声明和宏定义,被多个源文件中引用共享。有两种类型的头文件:程序员编写的头文件和编译器自带的头文件。在程序中要使用头文件,需要使用 C 预处理指令 #include 来引用它。前面我们已经看过 stdio.h 头文件,它是编译器自带的头文件。引用头文件相当于复制头文件的...
在头文件中大家还可以看到#program once这句话,它的作用是保证我们在多次调用同一个我文件的时候不会造成多次调用,发生错误,可以说是为了弥补C语言头文件使用的弊端,也是头文件必须的。 可能也会有人在其他教材中发现头文件中还有这么一种书写格式。 其实这几个语句的效果...
为了避免一个头文件被多次重复包含进同一个源文件的问题,要么使用在头文件的顶部插入一条#pragma once指令,表示这个头文件在同一个源文件里只能包含一次,关于#pragma指令的俄详细用法,可以参见我的这篇文章:c语言预处理指令轻松学(2)pragma指令控制编译器的行为,要么使用条件编译指令,条件编译指令的用法就成为...
当然,缺点就是如果不同头文件中的宏名不小心“撞车”,可能就会导致你看到头文件明明存在,但编译器却硬说找不到声明的状况——这种情况有时非常让人郁闷。 由于编译器每次都需要打开头文件才能判定是否有重复定义,因此在编译大型项目时,ifndef会使得编译时间相对较长,因此一些编译器逐渐开始支持#pragma once的方式。
(2)#pragma once #pragma once 一般由编译器提供保证:同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。 你无法对一个头文件中的一段代码作pragma once声明,而只能针对文件。 其好处是,你不必再担心宏名冲突了,当然也就不会出现宏名冲突引发的奇怪...
(3)#pragmaonce (比较常用)只要在头文件的最开始加入这条指令就能够保证头文件被编译一次,这条指令实际上在VC6中就已经有了,但是考虑到兼容性并没有太多的使用它。 (4)#pragmahdrstop表示预编译头文件到此为止,后面的头文件不进行预编译。BCB可以预编译头文件以加快链接的速度,但如果所有头文件都进行预编译又可...
这个是比较老的一个做法了,所以很多编译器基本都是可以兼容的,但是还有另一个语句也是可以起到相同作用,但是一些太老的编译器据说用不了的(但是我好像没遇到过),VS下好像默认新建一个类的头文件就会用这个新的: #program once 这一种相对于第一种的好处是,不通过#define一个变量来起到防止重复包含,所以,不存在...
#program once program 条件编译指令 #ifdef、#ifndef、#endif #if、#elif、#else、#endif error 自我测评 开门见山 本文主要介绍c语言中条件编译相关的预编译指令,常见的预处理指令如下: #include包含一个源代码文件 #define定义宏 #undef取消已定义的宏 ...
#pragma once一般由编译器提供保证:同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。你无法对一个头文件中的一段代码作pragma once声明,而只能针对文件。 其好处是,你不必再费劲想个宏名了,当然也就不会出现宏名碰撞引发的奇怪问题。大型项目的编译...
它们的作用是防止头文件被重复包含。不同点 1). ifndef 由语言本身提供支持,但是 program once 一般由编译器提供支持,也就是说,有可能出现编译器不支持的情况(主要是比较老的编译器)。2). 通常运行速度上 ifndef 一般慢于 program once,特别是在大型项目上, 区别会比较明显,所以越来越多的编译器开始支持 ...