在C语言中,编译宏是一种强大的特性,它允许开发者在预处理阶段(即编译之前)对代码进行条件编译。这意味着基于某些宏的定义与否,编译器可以选择性地包含或排除代码块。下面我将分点解释编译宏的作用、展示其用法,并提供一个简单的示例代码。 1. 编译宏在C语言中的作用 编译宏在C语言中的作用主要体现在以下几个方...
1)__cplusplus:区分C与C++代码 gcc编译.c文件,没定义__cplusplus,编译器按C编译代码; gcc编译.cpp文件,定义了__cplusplus,编译器按C++编译代码; g++编译.c文件,定义了 __cplusplus,编译器按C++编译代码; g++编译.cpp文件,定义了 __cplusplus,编译器按C++编译代码; 如果当前文件已定义了__cplusplus(由编译器定...
__FUNCTION__这三个宏是编译器内置宏定义,分别代表调试信息所在文件、行号、函数。
于是,我编写了一个小程序,显示常见C/C++编译器的编译器的预定义宏。 心得 最直接的办法是逐个逐个的用#ifdef判断宏是否存在,然后再printf显示其内容。可是预定义宏有些是整数、有些是字符串,还有些是关键字不能直接用printf输出,用起来挺麻烦的。 在网上发现一种不错办法,出自《关于CPP的预定义宏:unix、linux...
查看宏展开最正规的方法,是用编译器的预处理选项,如 MSVC (cl.exe) 的 /P [1b]、GCC 的 -E...
1 内置的宏定义 2 运行平台宏 3 编译器宏 4 调试类型宏 5 代码 C和C++内置宏在代码调试、跨系统平台代码中会经常使用,本文记录说明一下。内置宏不需要调用头文件,可直接使用。在使用预定义的宏之间需要了解常用的条件编译指令,具体...
例如,GCC 编译器对应的预定义宏是 __GNUC__,用 if __GNUC__即可判断是否在使用 GCC 编译器。__GNUC__ 的具体值对应GCC的主版本号。例如 对于GCC 4.9 ,__GNUC__ 等于 4,对于 GCC 5.1 ,__GNUC__ 等于 5,次版本号可以通过 __GNUC_MINOR__ 查询。对于 GCC 4.9,__GNUC_...
但即便如此,只要能够保证宏__cplusplus只在C++编译器中被预先定义 ,那么,仅仅使用#ifdef __cplusplus ⋯ #endif就足以确保意图的正确性;额外的使用#if __cplusplus 。。. #endif反而是错误的。 只有在这种情况下:即某个厂商的C语言和C++语言编译器都预先定义了__cplusplus ,但通过其值为0和非零来进行区分,...
BUILD_BUG_ON_XX 宏的应用还有很多,例如它还可以和一些C语言编译器内置函数结合使用,比如 __builtin_types_compatible_p() 函数,它接收两个数据类型,如果两个数据类型相同,则返回 1,否则返回 0。有趣的是,__builtin_types_compatible_p() 函数返回值是常量,这就为使用类似于BUILD_BUG_ON_XX 的宏提供了条...