__cplusplus的用法(转)

摘要:
今天阅读autobook,在第53页看到了作者的解释:C/C++编译器对函数和变量名的命名方法不一样,这样当C编译器去引用C++编译器编译出来的符号时,会找不到链接。因此,当一个头文件可能既被C程序引用,又被C++程序引用时,需要使用如上代码进行区分。上面的写法太复杂了,况且两个大括号{和}分离,会造成有些编辑器的缩进错误。

经常在/usr/include目录下看到这种字句:

#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif

不太明白是怎么用的。今天阅读autobook,在第53页看到了作者的解释:C/C++编译器对函数和变量名的命名方法不一样(例如C++中重载的函数有多个名字,而C的函数只有一个名字),这样当C编译器去引用C++编译器编译出来的符号时,会找不到链接。因此,当一个头文件可能既被C程序引用,又被C++程序引用时,需要使用如上代码进行区分。
上面的写法太复杂了,况且两个大括号{和}分离,会造成有些编辑器的缩进错误。更好的手法是将如下代码定义在一个公共头文件中,然后所有其它头文件去引用它:

#ifdef __cplusplus
# define BEGIN_C_DECLS extern "C" {
# define END_C_DECLS }
#else
# define BEGIN_C_DECLS
# define END_C_DECLS
#endif

有关__cplusplus和extern "C"的更多用法,可以参考下文:
《C++中extern “C”含义深层探索》
http://hi.baidu.com/17cpp/blog/item/a46bfd13a4816e025aaf53f6.html

免责声明:文章转载自《__cplusplus的用法(转)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MPU6050Delphi安装/卸载OCX控件的方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C++反汇编与逆向分析技术揭秘

《C++反汇编与逆向分析技术揭秘》前言 为什么写这本书 “时下的IDE很多都是极其优秀的,拜其所赐,职场上的程序员多出十几倍,但是又有多少能理解程序内部的机制呢?”——侯捷 随着软件技术的发展及其在各个领域的广泛应用,对软件进行逆向工程,然后通过阅读其反汇编代码来推断其数据结构、体系结构和程序设计思路的需求越来越多。逆向工程技术能帮助我们很好地研究和...

C++ 常见崩溃问题分析

一、前言 从事自动化测试平台开发的编程实践中,遭遇了几个程序崩溃问题,解决它们颇费了不少心思,解决过程中的曲折和彻夜的辗转反侧却历历在目,一直寻思写点东西,为这段难忘的经历留点纪念,总结惨痛的教训带来的经验,以期通过自己的经历为他人和自己带来福祉:写出更高质量的程序; 由于 C 和 C++ 这两种语言血缘非常近,文本亦对 C 编程语言有借鉴作用; 二、C+...

利用C++/CLI 封装Native C++ 提升.NET web game性能

利用C++/CLI封装Native C++ 提升.NET web game性能 原帖: http://www.cnblogs.com/warensoft/archive/2010/03/07/1680290.html 这段时间在做新项目的技术论证,其基本想法就是利用Flex调用远程WCF以及发送Socket请求,来实现远程通信,WCF负责实时性要求不高的...

Java 访问 C++ 方法:JavaCPP

JavaCPP提供了在Java中高效访问本地C++的方法。采用JNI技术实现,支持所有Java实现包括Android系统,Avian 和 RoboVM。 JavaCPP提供了一系列的Annotation将java代码映射到C++代码,并使用一个可执行的jar包将C++代码转化为可以从JVM内调用的动态链接库文件。 Maven: <dependency...

为什么C++中空类和空结构体大小为1?

这篇文章是一篇译文,跟上一篇文章相呼应的,原文在这里。 对于结构体和空类大小是1这个问题,首先这是一个C++问题,在C语言下空结构体大小为0(当然这是编译器相关的)。这里的空类和空结构体是指类或结构体中没有任何成员。 在C++下,空类和空结构体的大小是1(编译器相关),这是为什么呢?为什么不是0? 这是因为,C++标准中规定,“no object s...

C++ -- VLD(Visual LeakDetector)内存泄露库的使用

https://blog.csdn.net/xp178171640/article/details/80828530https://blog.csdn.net/xiaoyafang123/article/details/83655356 VLD简介 由于C/C++语言没有所谓的垃圾收集器,内存的分配和释放都需要程序员自己来控制,这会给C/C++程序员带来一...