如何判断一段程序是由 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++
C++ 根据程序运行的时间和cpu频率来计算在另外的cpu上运行所花的时间
C++ 根据程序运行的时间和cpu频率来计算在另外的cpu上运行所花的时间
34 0
|
3月前
|
消息中间件 Java C语言
消息队列 MQ使用问题之在使用C++客户端和GBase的ESQL进行编译时出现core dump,该怎么办
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
10天前
|
C++
【C++基础】程序流程结构详解
这篇文章详细介绍了C++中程序流程的三种基本结构:顺序结构、选择结构和循环结构,包括if语句、三目运算符、switch语句、while循环、do…while循环、for循环以及跳转语句break、continue和goto的使用和示例。
14 2
|
2月前
|
PHP C++ Python
右手坐标系,空间点绕轴旋转公式&程序(Python和C++程序)
右手坐标系,空间点绕轴旋转公式&程序(Python和C++程序)
26 0
|
2月前
|
C++
c++学习笔记03 程序流程结构
C++学习笔记,主要介绍了程序流程结构,包括顺序结构、选择结构和循环结构。选择结构中详细解释了if语句、三目运算符和switch语句的用法和注意事项。循环结构部分则涵盖了while循环、do-while循环和for循环的语法和使用技巧。此外,还介绍了跳转语句,包括break、continue和goto语句的用途和用法。
29 0
|
3月前
|
C++ 运维
开发与运维编译问题之在C++中在使用std::mutex后能自动释放锁如何解决
开发与运维编译问题之在C++中在使用std::mutex后能自动释放锁如何解决
53 2
|
3月前
|
编译器 C++ 运维
开发与运维编译问题之在C++中创建一个简单的自旋锁如何解决
开发与运维编译问题之在C++中创建一个简单的自旋锁如何解决
23 2
|
3月前
|
C++ 开发者
C++一分钟之-编译时计算:constexpr与模板元编程
【7月更文挑战第2天】C++的`constexpr`和模板元编程(TMP)实现了编译时计算,增强代码效率。`constexpr`用于声明编译时常量表达式,适用于数组大小等。模板元编程则利用模板进行复杂计算。常见问题包括编译时间过长、可读性差。避免方法包括限制TMP使用,保持代码清晰。结合两者可以解决复杂问题,但需明确各自适用场景。正确使用能提升代码性能,但需平衡复杂性和编译成本。
93 3
|
17天前
|
编译器 C++
C++ 类构造函数初始化列表
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。
60 30
|
6天前
|
并行计算 Unix Linux
超级好用的C++实用库之线程基类
超级好用的C++实用库之线程基类
12 4
下一篇
无影云桌面