头文件标准格式
2016-01-15 18:54
495 查看
/* 为什么标准头文件都有类似以下的结构? */ #ifndef _EXAMPLE_H_ #define _EXAMPLE_H_ #ifdef __cplusplus //__cplusplus是c++编译器内部定义的一个宏定义 extern "C" //用c语言标准编译 { #endif //{ /*...*/ #ifdef __cplusplus } #endif //} #endif //_EXAMPLE_H_ /*
标准答案讲解:
头文件中的编译宏 #ifndef _EXAMPLE_H_ #define _EXAMPLE_H_ #endif 的作用是防止被重复引用。 作为一种面向对象的语言,C++支持函数重载, 而过程式语言C则不支持。函数被C++编译后在symbol库中的名字与C语言的不同。 例如,假设某个函数的原型为: void foo(int x, int y); 该函数被C编译器编译后在symbol库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。 _foo_int_int这样的名字包含了函数名和函数参数数量及类型信息, C++就是靠这种机制来实现函数重载的。 为了实现C和C++的混合编程,C++提供了C连接交换指定符号extern "C"来解决名字匹配问题, 函数声明前加上extern "C"后,则编译器就会按照C语言的方式将该函数编译为_foo, 这样C语言中就可以调用C++的函数了。 这里写代码片
自己的见解
总结基本在标准答案中,以后自己编程按照该模版来操作 不同编译器,编译后的效果不一样,该写法兼容c/c++ 这样编写程序的由来: 在c++编译环境下,要以用c语言方式编译代码 可以使用下面的方式,extern "C" 块语句以c语言标准编译 extern "C" { //c语言代码 } 但是上面的写法放在c环境下编译可能通过,可能报错,就是c++有的语法,关键字 比如 class,new就编译不通过 于是乎得用到c/c++共同的语法---条件编译,根据不同环境替换成不同的代码 这样编译就ok 而且__cplusplus是c++编译器内部定义的一个宏定义 所以改造后 #ifdef __cplusplus //__cplusplus是c++编译器内部定义的一个宏定义 extern "C" //用c语言标准编译 { #endif //{ //c code #ifdef __cplusplus } #endif //} 既能在c++也能在c环境下编译通过 把要编写的c语言代码放入extern "C" 中 把要编写的C++代码放入 #ifdef __cplusplus //c++ code #endif 注意:这个只是头文件中 这是条件编译一个应用,也是移植代码的典型实例,自己得好好掌握
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- 局域网与广域网接口标准
- Lua和C语言的交互详解
- web标准知识——从p开始,循序渐进
- 网页打开新窗口target=_blank不符合标准
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C语言自动生成enum值和名字映射代码
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构