如何判断一段程序是由 C 编译程序还是由 C++ 编译程序编译的?

简介: 如何判断一段程序是由 C 编译程序还是由 C++ 编译程序编译的?

可以通过 C++ 宏 __cplusplus 判定:

#ifdef __cplusplus
#include <iostream>
    cout << "C++";
#else
#include <stdio.h>
    printf("C");
#endif

那么 __cplusplus 是什么?

__cpluspluscpp 中定义的宏,当使用 C++ 编译器时,就会定义该宏。

在程序开发中,尤其是在 C 和 C++ 混合编写的代码中,我们经常在头文件中看到这样的代码:

#ifdef __cplusplus
extern "C" {
#endif

// C 代码

#ifdef __cplusplus
}
#endif

头文件会被 #include 到 C 文件中进行编译,也可以被 #include 到 C++ 文件中进行编译。那么这里就可以使用 __cplusplus 来测试头文件是由 C 编译器还是 C++ 编译器编译的。

如果定义了 C++ 宏 __cplusplus,表示这段代码会将被 C++ 编译器编译,并加入 "extern "C" {" 和 " }" 处理其中的代码。

extern "C" 又是什么?

我们知道在 C++ 中,函数是可以发生重载的,在 C 中,是没有重载的说法的。如果头文件中函数声明用 extern “C” 修饰过后,就不可以发生重载了,代码将会按照 C 的编译方式编译.


相关文章
|
2天前
|
编译器 C++
《Effective C++ 改善程序与设计的55个具体做法》 第一章 笔记
《Effective C++ 改善程序与设计的55个具体做法》 第一章 笔记
|
2天前
|
存储 算法 程序员
【C++进阶】深入STL之vector:构建高效C++程序的基石
【C++进阶】深入STL之vector:构建高效C++程序的基石
|
2天前
|
编译器 C++
《Effective C++ 改善程序与设计的55个具体做法》 第二章 构造/析构/赋值运算 笔记
《Effective C++ 改善程序与设计的55个具体做法》 第二章 构造/析构/赋值运算 笔记
|
10天前
|
NoSQL Linux C++
Linux C/C++ gdb调试正在运行的程序
Linux C/C++ gdb调试正在运行的程序
|
10天前
|
Linux 编译器 C++
Linux centOS 编译C/C++
Linux centOS 编译C/C++
|
10天前
|
C++
C++ 获取当前程序路径
C++ 获取当前程序路径
|
11天前
|
程序员 C语言 C++
C语言学习记录——动态内存习题(经典的笔试题)、C/C++中程序内存区域划分
C语言学习记录——动态内存习题(经典的笔试题)、C/C++中程序内存区域划分
10 0
|
4天前
|
编译器 数据安全/隐私保护 C++
c++primer plus 6 读书笔记 第十三章 类继承
c++primer plus 6 读书笔记 第十三章 类继承
|
2天前
|
编译器 C++
【C++初阶】—— 类和对象 (下)
【C++初阶】—— 类和对象 (下)
|
2天前
|
存储 编译器 C++
【C++初阶】—— 类和对象 (中)
【C++初阶】—— 类和对象 (中)

热门文章

最新文章