⑴ 请教高手关于头文件条件编译#ifndef的问题 下面的程序有哪位高手给解释一下啊 各个层次关系 小弟看不懂
最外层的#ifdef是这个样子:
#ifndef __MENU_H
#define __MENU_H
...
#endif /* __MENU_H */
这是为了确保menu.h只被包含一次。第二次包含时,由于__MENU_H已经被定义,整个文件的内容就被跳过了。
__cplusplus是个特殊的宏,只在C++程序中被定义。这样,在C代码中,看到的代码是这个样子的:
...
void Show_HomeScreen(void);
而在C++代码中,看到的则是这个样子:
extern "C" {
...
void Show_HomeScreen(void);
}
最主要的用处是函数被声明为extern "C",也就是在目标文件中用C的方式进行编码和查找。C的方式只有函数名,而C++的方式则把参数也编码了进去,这样才可能允许函数重载。比如,test(int)在C代码里的符号名就是test,而在C++中则不同。在MSVC(在不同编译器中不同)中是“?test@@YAXH@Z”。一个函数要同时在C和C++中使用,一般都回在头文件声明时放到一个extern "C"块里。
⑵ 关于C语言中头文件的条件编译的问题
例如,常会将结构体类型的定义放在头文件中(例如FILE结构体,tm结构体等),如果不加条件编译,那么就可能会出现同一个程序中的不同文件由于包含了同一个头文件而导致同一个结构体类型的重复定义,而C中不允许重复定义,所以会出错。
⑶ 关于c语言头文件编译和运行的问题
1、只要在程序开头加入#include<头文件名>,在编译过程当中,头文件自动会被添加到源文件当中一起进行编译。
2、编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。
C源程序头文件-->预编译处理(cpp)-->编译程序本身-->优化程序-->汇编程序-->链接程序-->可执行文件。
⑷ c++中如何编译头文件,编译头文件的作用,
编译头文件的理解窍门,在include语句。
你可以理解为,include就是替换,在编译的时候,在include的位置完整的将头文件“嵌入”进去,在cpp文件中共同编译。如果一个头文件没有被任何文件包含(include),那么它不会编译。
头文件,你可以简单的认为就是“避免重复”,将重复的声明放在一起,方便代码阅读和管理,同时头文件具有方便接口和安全检查方面的作用。
⑸ 为什么在头文件里面用条件编译呢程序如下
防止重复编译。比如,第一次使用该头文件后,LCDHEARD被定义过,以后再使用该头文件,就不会重新编译了。
⑹ 为什么C语言头文件中要用条件编译
如果你说的是文件中避免重复包含的预处理指令,有两个原因
a)重复编译相同的内容,即使不会导致语法错误,对编译器也是极大的开销,在大工程中,绝对是不可容忍的,持续编译集成的代价是很高的,能省必须省
b) 有很多语法元素是不可重复编译的,例如类型定义。你仅仅考虑变量,是远远不够的。实际中,变量在头文件中的使用是非常少的,因为全局变量也是能避免就避免的
⑺ c语言中如何编译头文件啊
只要在程序开头加入#include<头文件名>,在编译过程当中,头文件自动会被添加到源文件当中一起进行编译。
编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。
C源程序头文件-->预编译处理(cpp)-->编译程序本身-->优化程序-->汇编程序-->链接程序-->可执行文件。