int a=0; if (a == 0) do{printf("hello");printf("world");}while(0); else ... return 0; } 使用do-while结构的好处: (1)在使用宏定义时可以像一个独立的语句一样使用,而不会产生语法上的问题。 (2)使用 do-while 结构也可以避免一些潜在的错误,例如在宏定义中使用 if 和 else 结构时可能...
常量表达式可以是包含宏, 算术运算, 逻辑运算等等的合法C常量表达式, 如果常量表达式为一个未定义的宏, 那么它的值被视为0. #if MACRO_NON_DEFINED== #if 0 在判断某个宏是否被定义时, 应当避免使用#if, 因为该宏的值可能就是被定义为0. 而应当使用下面介绍的#ifdef或#ifndef. 注意: #if, #elif, #el...
在判断某个宏是否被定义时, 应当避免使用#if, 因为该宏的值可能就是被定义为0. 而应当使用下面介绍的#ifdef或#ifndef. 注意: #if, #elif, #else之后的宏只能是对象宏. 如果name为名的宏未定义, 或者该宏是函数宏. 那么在gcc中使用"-Wundef"选项会显示宏未定义的警告信息. 4, #ifdef, #ifndef, define...
⑷ 同时也为程序员提供了一种屏蔽代码块的方式 #if 0….#endif。 理论上来说,条件编译是在预编译的时候生效的,但是我们不要就认为编译好了之后,条件编译就是不起作用了。其实对于第一种形式的条件编译在程序运行中也是有效的。即如果在运行中通过某些触发条件来修改条件编译判断条件的运算结果,也是可以完成实际执...
-> _IF_0_ELSE (False branch) -> False branch IF_ELSE (1) ( \ True branch \ )( \ False branch \ ) -> CAT(_IF_, 1) (True branch) (False branch) -> _IF_1 (True branch) (False branch) -> True branch _IF_1_ELSE_ (False branch) ...
条件编译(#if…#elif…#endif); 宏扩展(macro expansions); 行控制(line control)。 2. 条件编译 一般情况下,C 语言文件中的每一行代码都是要被编译的,但是有时候出于对程序代码优化的考虑,希望只对其中的一部分代码进行编译,此时就需要在程序中加上条件,让编译器只对满足条件的代码进行编译,将不满足条件的代...
do{ bar(x); baz(x); }while(0) if (!feral) do{ bar(x); baz(x); }while(0); ...
不能。#define #if #else是预处理指令,编译器不做预处理的嵌套工作。
#define isYes 1#define isNo 0 在编程的时候就可以用宏名:if(io_Led == isYes) io_Led = isNo;这样的例子非常多,除了书写内容明确,它最大的优点还在于只更改一个宏定义的字符串,就可以改变全部源程序的内容。下面再举个例子:上图中,头文件中还添加了条件编译:“#ifndef ...\ #endif”防止...
4、宏定义中使用了do{} while(0) (这种形式在代码还是经常能看的到的,下面我还是用例子来慢慢引导大家来看懂这用这个的含义): 代码语言:javascript 复制 #include<stdio.h>#defineM(n)\printf("the n is %d\n",n);\printf("the M(n) is %d\n",n);intmain(void){int n=8;int a=1;if(a)M...