- [Reference](#reference) # #和##在宏定义中的作用 ## # 构串操作符 将右边的参数做整体的字符串替换。 ```cpp #define STRING(x) #x#x #define TEXT(x) "Name"#x"__" int test() { int name = 102; printf("%s\n", STRING(name)); // namename printf("%s\n", TEXT(name)); /...
宏展开后else前面多了一个;语法错误 if(bIsOk){f(42);g(42);};elseNSLog(@"xxx"); 合法化代码,作用域保护 看下面的宏定义 #defineMY_MACRO(x) int i = x + 1 ; f(i) ; 在以下函数调用中出问题 voiddoSomething(){inti=25;MY_MACRO(32);} 上面的代码展开后, 编译出错 voiddoSomething(){int...
do...while(0)在C中是唯一的构造程序,让你定义的宏总是以相同的方式工作,这样不管怎么使用宏(尤其在没有用大括号包围调用宏的语句),宏后面的分号也是相同的效果。 这句话听起来可能有些拗口,其实用一句话概括就是:使用do...while(0)构造后的宏定义不会受到大括号、分号等的影响,总是会按你期望的方式调用...
do{...}while(0)在C中是唯一的构造程序,让你定义的宏总是以相同的方式工作,这样不管怎么使用宏(尤其在没有使用大括号包围调用宏的语句),宏后面的分号也是相同的效果。 这句话听起来可能有些拗口,其实用一句话概括就是:使用do{...}while(0)构造后的宏不会受到大括号、分号等的影响,总是会按你期望的方式...
有篇文章解释很清楚: "do {...} while (0) in macros" 然后,一位女程序媛把它翻译了一遍,排版清晰,想省力的看这边。 "do {...} while (0) 在宏定义中的作用"
百度试题 题目在C语言中宏定义的作用是用标示符代表一个___。相关知识点: 试题来源: 解析 字符串
百度试题 题目在X86汇编语言中,伪指令PURGE 的作用是局部化宏定义中的标号。() A.正确B.错误相关知识点: 试题来源: 解析 B
对宏定义的不正确描述( ) A. 宏定义是用宏名代替一个字符串。 B. #define 的作用范围,是整个源文件有效。 C. 宏名可以在其它宏定义中引用,可以层层替换。 D. 用双引号扩起来的字符串,即使与宏名相同,也不进行置换。 相关知识点: 试题来源: 解析 B ...
关于Verilog HDL中的宏定义指令`define语句,下列说法正确的是( ) A. 在宏定义语句`define的行末需要加上分号 B. 宏定义语句`define的作用范围仅限于当前模块 C. 宏定义语句用于将一个简单的标志符代替一个复杂的字符串或表达式 D. 宏定义语句`define的功能与参数类型的数据完全一模一样 ...