关于extern "C"解释
来源:互联网 发布:ubuntu 查看内存占用 编辑:程序博客网 时间:2024/06/05 19:42
在代码中,头文件里面经常看到
#ifndef EXAMPLE_HEAD_INCLUDE
#define EXAMPLE_HEAD_INCLUDE
#ifdef __cplusplus
extern "C" {
#endif
//code body.
#ifdef __cplusplus
}
#endif
#endif
这种代码结构,也许还有人不清楚这样写代码的理由.
这里解释下:
1)首先包含extern:
表示这里面声明的变量和函数都是具有extern属性的.extern后面的仅仅是声明,而不是定义,也就是不会分配相应的内存空间,需要相应的变量和接口的,直接引用头文件就可以了.与extern对应的static变量,则不可以放在里面.
2)然后就是"C":
表示下面的变量和接口是按照C语言的方式进行编译和连接的,在c++和c的区别中有一个就是重载与否的问题,c++能重载,而c不能,原因就是在编译的时候.
比如说一个函数 void function(int,float);在c编译方式下,编译出的内容是_function,而在c++中编译出来则是function_int_float,这也是为什么c++能够根据参数的个数或者类型不一样而链接到相应的函数的原因.c++的其他变量和类也都是采取相同的方式.
所以,用extern "C"后,就指明了使用c编译器的方式.extern "C"仅仅指定的编译和链接的方式,至于语义的检查则还是要依据原语言来进行.
3)顺便说下用#ifndef/#endif来防止重复包含头文件.
在第一次调用example.h文件时,没有EXAMPLE_HEAD_INCLUDE宏变量,那么#ifndef和#endif之间的代码就会有效,执行下去,但是如果第二次进行包含的时候,监测到EXAMPLE_HEAD_INCLUDE变量已经有了,因此#ifndef和#endif之间的代码就失效了.这样就防止了头文件的重复包含,这里也间接的说明了一个问题,预处理变量是全局有效的.
所以在头文件中使用了这种声明方式的话,就表明在extern "C"下面的语句都要以c编译器的方式进行编译.这种情况只出现在c++要引用c代码的情况,而c语言中是不支持extern "C"的这种声明的.
总结起来,extern "C"让你代码里面可以混合c++和c的代码,而不会出任何问题.在c代码和c++代码相互嵌套的时候要注意,在c语言中是不支持extern "C"这种声明方式的.
把我累的...``
- 关于extern "C"解释
- 关于extern "C"解释
- extern C 解释
- extern "C"解释
- extern "c"解释
- extern "C"解释
- extern c 解释
- C\C++ extern "C"解释
- C语言extern (extern关键字基本解释)
- C语言extern (extern关键字基本解释)
- 关于extern C
- 关于 extern "C"
- 关于 extern c
- 关于extern “C”
- 关于 extern “C”
- 关于extern "C"
- 关于extern "c"
- 关于extern "C"
- Silverlight MMORPG网页游戏开发课程[一期] 第十课:面向对象的重构
- 双循环摇身一变单循环
- 关于下一代木马的设计理念的讨论
- C++ 派生类的三种继承方式
- JS的md5加密方法 和 PHP的md5加密方法,加密同一字符串,表面上得到的是一样的值,实际上不一样!!
- 关于extern "C"解释
- 程序员致富的若干方法探讨
- 随笔分页代码(小试身手)
- 斐波那契数列-专题讲解
- ThinkPhp框架研究之二 魔术函数 __call
- 使用glut定时器控制帧率
- 234234
- qt 获取windows 的消息(qt get message from win32 API )
- 办公助理工具--文件目录的读取与保存程序