在你的代码中,调用这个新创建的宏来打印宏定义的值。例如: c int main() { PRINT_MACRO_VALUE(TEST_MACRO); return 0; } 编译并运行C语言程序: 编译你的C程序,例如使用gcc编译器: bash gcc -o print_macro print_macro.c 然后运行生成的可执行文件: bash ./print_macro 查看控制台输出,确认宏定义...
根据DEBUG宏的值来选择对应的打印宏函数。当DEBUG的值为1时启动相关的打印调试语句,DEBUG的值为0时则关闭打印调试语句。 这样我们就可以很方便的通过设置DEBUG宏的值来启动与关闭我们整个工程的DBG_PRINTF打印调试信息。 03do{}while(0) 其实,上面我们封装的打印宏DBG_PRINTF还有一点缺陷,比如我们与if、else使用的时...
当宏定义为一个一个数值的时候,代码中使用宏名称的地方都会被宏的实际数值替换。宏也可以接受类型无关的参数,宏参数将会在宏展开的时候被实际的参数替换。下面是一个简单的代码,代码中定义了一个数值宏以及接受一个参数的宏,在最后一行中取消定义一个宏。宏定义的时候在值部分加上括号是一个好习惯。 1:#define...
__STDC__ 编辑器为ISO兼容实现时位十进制整型常量 __STDC_VERSION__ 如何实现复合C89整部1,则这个宏的值为19940SL;如果实现符合C99,则这个宏的值为199901L;否则数值是未定义 __STDC_EOBTED__ (C99)实现为宿主实现时为1,实现为独立实现为0 __STDC_IEC_559__ (C99)浮点数实现复合IBC 60559标准时定义为...
1、C++11 对使用宏定义的打印,要求文本字符串与宏定义之间必须要有一个空格。 2、使用 C 语言(C11),可以直接打印出来,而不会产生警告。 小二思考了一下,这样使用的好处: 1、方便替换名字或者打印的信息。通过宏定义修改一次,即可全局修改。 2、相当于可以动态修改,如果写入固定数值,那就写死了。
这里还有一个宏定义: #define DOUBLE(x) (x) + (x) 定义中我们使用了括号,想避免之前的问题,但是这个宏可能会出现新的错误。 int a = 5; printf("%d\n" ,10 * DOUBLE(a)); 这将打印什么值呢?看上去,好像打印100,但事实上打印的是55. 我们发现替换之后: ...
在上面的例子中,__LINE__宏被用于输出当前行号到控制台。编译并运行该程序,输出结果为当前行号的值。 1.3__DATE__ 在C语言中,__DATE__是一个特殊的预处理器宏,用于获取当前编译的日期字符串。 __DATE__宏可以在程序中使用,它会在编译时被替换为一个字符串,表示编译源文件时的日期。这个宏的字符串格式是...
但是,如果一个函数被封装在了宏定义中,并且,还要在宏定义之外 获取这个函数的返回值 ,应当如何做呢? 2. 实现方法 有两种实现方法: 在宏定义中使用在宏定义之外预先定义的变量; 利用宏定义的特殊格式——登录后复制({x; y; z;})。 2.1 “全局”变量 我们可以 预先定义一个变量 ,在宏定义函数中直接使用。
这些预处理符号在预处理阶段就会被具体的值替换,如下图所示: 📖预处理指令 我们常见的下面这些符号都被叫做预处理指令: ●#define---定义宏和标识符常量 ●#include---头文件的包含 ●#pragma 对这些预处理指令都是在预处理阶段执行的。 📖#define 🔖...