C语言判断宏参数是否为已定义的宏 在宏定义中不能使用#ifdef来判断另一个宏是否被定义。那么怎么实现下面的功能呢? // 为了可读性,把末尾的转义字符省略了。#defineMY_MACRO(flag, var) do {// Many operations#ifdefflag// Do something#endif// Many operations}while(0) 这要用到C语言对宏参数的处理方式...
#if, #elif, #defined #ifdef, #ifndef #else #endif 巢状结构 空定义 标头守卫 切割特性 移植性问题 架构图 前言 由于地区翻译关係,有些书籍将macro翻译成"巨集",有些翻译成"宏",为了避免混淆(我自己),所以文章内容会以英文名macro来代替中文译名 甚麽是条件编译 条件编译就是根据已经定义的macro进行选择性...
C/C++高级特性之——预处理器中的宏(Macro)#define 详解 宏(英语:Macro)是一种批量处理的称谓。 计算机科学里的宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式。解释器或编译器在遇到宏时会自动进行这一模式替换。对于编译语言,宏展开在编译时发生,进行宏展开的工具常被称为宏展开器。 ...
例如:在文件msgdef.h中 1 #ifndef _MSGDEF_H_ 2 #define_MSGDEF_H_ 3 #undefUSEMACRO 4 #ifdefined(INCLUDE_AS_ENUM)//判断预编译宏的设置情况,判断是转换成enum还是string 5 #defineMSG_MACRO(msg) msg, 6 #elifdefined(INCLUDE_AS_STRING) 7 #defineMSG_MACRO(msg) #msg,//不能遗忘“,”号 8 ...
#if 常量 ...程序段1... #else ...程序段2... #endif 1. 2. 3. 4. 5. 这种方法可以将测试代码加进来。当需要开启测试的时候,只要将常量变1就好了。而不要测试的时候,只要将常量变0。 方式四: #if defined(Macro1) || defined(Macro2) || defined(Macro3) ...
上述代码块在编译时会打印出MACROPARAM(SOMEMACRO) = new int(123456);,也就是宏展开后的内容。 因此,当宏出现问题时,可以使用该方法打印出宏展开后的内容,然后调试展开后的内容,找到错误原因,接着同步修正宏本身的错误。 常见的使用场景 和#ifdef和#if等预处理指令配合 ...
根据MACRO_NAME是否被定义,选择不同的代码块进行编译。 二、利用__FILE__宏和字符串化操作 __FILE__宏在预处理器运行时展开成当前源文件的名称。结合字符串化操作(在宏参数前加上#),可以创建根据文件名不同而变化的代码。 使用__FILE__宏获取文件名 ...
defined 一般形式: defined macro_name// 若macro_name是当前定义的,则表达式为真,否则为假 也可以写为: #ifdefined macro_name或者#ifdefmacro_name 也可以在defined前加上“!”来反转条件。如下: #if!defined DEBUGprintf("Final VFersion\n");#endif// 只有在DEBUG未定义的情况下才编译;另外defined允许有#...
等价于:#define err(flag, msg) if(flag) printf(msg) (三) 预处理命令详述 1, #define #define命令定义一个宏: #define MACRO_NAME(args) tokens(opt) 之后出现的MACRO_NAME将被替代为所定义的标记(tokens). 宏可带参数, 而后面的标记也是可选的. ...
if(defined MACRO_NAME) message(STATUS "MACRO_NAME is defined.") else() message(STATUS "MACRO_NAME is not defined.") endif() 在上述代码中,MACRO_NAME应替换为你想要检查的宏名称。如果该宏被定义,那么将会打印出"MACRO_NAME is defined.",否则打印出"MACRO_NAME is not defined."。 你还可以在CMa...