`
sealbird
  • 浏览: 586606 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

__cplusplus的用处

    博客分类:
  • C++
阅读更多
作者: Aprilgogo   发表日期: 2007-03-10 16:26   复制链接 





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



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

[Ctrl+A Select All]



不太明白是怎么用的。今天阅读autobook,在第53页看到了作者的解释:C/C++编译器对函数和变量名的命名方法不一样(例如C++中重载的函数有多个名字,而C的函数只有一个名字),这样当C编译器去引用C++编译器编译出来的符号时,会找不到链接。因此,当一个头文件可能既被C程序引用,又被C++程序引用时,需要使用如上代码进行区分。

上面的写法太复杂了,况且两个大括号{和}分离,会造成有些编辑器的缩进错误。更好的手法是将如下代码定义在一个公共头文件中,然后所有其它头文件去引用它:



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

[Ctrl+A Select All]



有关__cplusplus和extern "C"的更多用法,可以参考下文:

《C++中extern “C”含义深层探索》
http://hi.baidu.com/17cpp/blog/item/a46bfd13a4816e025aaf53f6.html
分享到:
评论

相关推荐

    #ifdef __cplusplus深度剖析

    本文将深入探讨`#ifdef __cplusplus`语句的用途和机理,以及在C++编程中extern "C"的必要性。 首先,让我们来了解`#ifdef __cplusplus`语句的含义。在C++编程中,`__cplusplus`是一个自定义宏,用于判断当前编译器...

    www.cplusplus.com

    - **用途**: 动态分配足够的内存以存放`nmemb`个大小为`size`的元素,并初始化所有位为0。 - **示例**: ```c int *array = (int *)calloc(5, sizeof(int)); if (array != NULL) { array[0] = 10; free(array)...

    Cplusplus Specification

    - **2.2 Character sets**:定义了C++支持的字符集及其用途。 - **2.3 Trigraph sequences**:介绍了三字符序列的概念,这是一种特殊的字符输入方式。 - **2.4 Preprocessing tokens**:定义了预处理指令的基本单位...

    C语言常见笔试题(应聘常见笔试题)

    `static`关键字有三种用处: 1. 用于全局变量,例如`static int a;` 2. 用于局部变量,例如`static int x;` 3. 用于函数,例如`static int fn()` 6. const关键字 `const`关键字的意义是将变量或指针声明为常量,...

    gcc入门教程.pdf

    GCC对硬件平台的广泛支持是其重要特性之一,无论是主流的商业平台还是某些特殊用途的系统,GCC都能提供相应的编译支持。 在Linux环境下,GCC扮演着至关重要的角色,它是构建和运行各种应用程序的基础。GCC的编译器...

    cplusplus常见的面试题及答案.txt

    模板的用途 模板是C++中的一个强大特性,用于编写通用代码。 - **模板**:允许定义可以接受任意类型的函数和类。通过使用模板参数,可以创建能够处理多种数据类型的代码,提高了代码的复用性和灵活性。 #### 8. ...

    C++和C语言学习、复习及面试.pdf

    C++和C语言是两种密切相关的编程语言,但它们各自有着独特的特性和用途。C语言是一种结构化的编程语言,强调过程化编程,适用于系统级编程和嵌入式系统开发,因其高效和小巧的代码而备受青睐。而C++是C语言的超集,...

    Cplusplus.docx

    在C++中,标识符(变量、常量、函数等的名称)不能与关键字相同,关键字是保留给语言特定用途的。标识符可以包含字母、数字和下划线,但首字符不能是数字。另外,C++区分大小写,因此`myVariable`和`myvariable`是两...

    JNI设计实践之路

    ##### 主要用途: 1. **创建、检查及更新Java对象**:通过JNI,开发者可以在C/C++环境中创建Java对象,对其进行属性读写等操作。 2. **调用Java和非Java程序所编写的方法**:包括调用win32 API等。 3. **捕获和抛出...

    extern用法详解

    `extern`关键字在变量声明中的常见用途之一是在`.c`文件中声明全局变量时,如果这个变量要在其他文件中使用,通常会在`.h`文件中用`extern`来声明这个变量。例如: ```c // 在某个.c文件中 int global_var = 10; /...

    mfc基础课程

    理解静态链接和动态链接的区别、动态链接的不同方法、MFC DLL的相关文件类型及其用途,是学习MFC DLL的关键。此外,熟悉链接规范和修饰名的概念对于编写兼容性强且易于管理的MFC DLL同样至关重要。

    c++语意研究 C++高级特性研究 反汇编

    例如,通过使用`#ifndef __cplusplus #define __cplusplus ... #endif`这样的结构,可以确保即使多次包含同一头文件,也仅被编译一次,从而避免了重复定义的问题。 #### 类型与变量 - **变量**:是存储数据的基本...

    google编程风格手册

    #ifndef GOOGLE_CPLUSPLUS_STYLE_GUIDE_H_ #define GOOGLE_CPLUSPLUS_STYLE_GUIDE_H_ // Header contents... #endif // GOOGLE_CPLUSPLUS_STYLE_GUIDE_H_ ``` - **Header File Dependencies**: 避免不必要的...

    Android SDK-NDK-JNI的介绍

    NDK 主要有以下几个用途: 1. **性能优化**:使用 C/C++ 可以编写出更高效的代码,对于那些对性能要求极高的部分(如图像处理、音频处理等),可以使用 NDK 编写这部分代码,然后将其打包成 `.so` 文件供 Java 代码...

    C_C++编程嵌入式精华

    1. **extern "C"的用途:** `extern "C"`主要用于告诉C++编译器按照C语言的规则来处理符号名称。这对于混合使用C和C++代码时特别有用,尤其是在链接阶段需要确保C语言库中的函数和变量能够正确引用到C++代码中。 2....

    GCC的默认头文件路径和库文件

    - 示例:如果希望GCC在编译C++程序时能访问`/usr/local/cpp_inc`和`/opt/mylibs/cplusplus`中的头文件,可以设置: ```bash export CPLUS_INCLUDE_PATH="/usr/local/cpp_inc:/opt/mylibs/cplusplus" ``` - **`...

    CplusPlus编程

    12. **预处理器宏**:预处理器宏在编译时起作用,用于代码替换和条件编译,虽然有其用途,但过度使用可能导致代码难以理解和维护。 通过深入学习和实践这些知识点,开发者可以熟练掌握C++编程,构建高效、可靠的...

    Google C++编码规范.pdf

    - **类注释**: 对类进行简要描述,包括类的功能、用途等。 - **函数注释**: 函数上方应有详细的注释,描述函数的作用、参数含义、返回值等。 - **变量注释**: 对复杂的变量进行注释说明。 - **实现细节注释**: 在...

    c语言面试一百题

    而标签“面试,C语言”则明确指出这个文档的用途和范畴。 文档的部分内容被提及,包括有关C++和C语言的区别的问题和答案。从提供的信息可以看出,文档中不仅包含了C语言的问题,还涉及到了C++的相关知识。这可能是...

Global site tag (gtag.js) - Google Analytics