#undef 是在后面取消以前定义宏定义
该指令形式为
#undef 标识符
其中标识符是个宏名称如果标识符当前没有被定义成个宏名称那么就会忽略该指令
旦定义预处理器标识符它将保持已定义状态且在作用域内直到结束或者使用#undef 指令取消定义
在此中我们将取消在先前中对预处理器定义
源代码:
# TRACE(x)
# DBG
#undef TRACE
# TRACE(x) g_TraceCallback x
#
#ndef TRACE
# TRACE(x)
#end
#end
解析:
# TRACE(x)
# DBG //成立话跑这支
#undef TRACE //释放的前定义 # TRACE ,防止重复定义
# TRACE(x) g_TraceCallback x
# // DBG 不成立 跑这支
#ndef TRACE //当TRACE 没有被定义
# TRACE(x) //宏定义
#end
#end// DBG
#def,#ndef使用
条件编译命令最常见形式为:
#def 标识符
段1
#
段2
#end
它作用是:当标识符已经被定义过(般是用#命令定义)则对段1进行编译否则编译段2
其中#部分也可以没有即:
#def
段1
#den
这里“段”可以是语句组也可以是命令行这种条件编译可以提高C源通用性如果个C源在区别计算机系统上系统上运行而区别计算机又有定差异例如当程式跑到如果TRACE没被定义则下句再定义
源代码:
# TRACE(x)
# DBG
#undef TRACE
# TRACE(x) g_TraceCallback x
#
#ndef TRACE
# TRACE(x)
#end
#end
解析:
# TRACE(x)
# DBG
#undef TRACE
# TRACE(x) g_TraceCallback x
#
#ndef TRACE //如果的前没定义则跑下边定义------该例前边有# TRACE(x) 则后边定义自动失效因此不会重复定义而出错
# TRACE(x) //定义
#end
#end
我们有时也采用下面形式:
#ndef 标识符
段1
#
段2
#end
只是第行和第种形式区别:将“def”改为“ndef”它作用是:若标识符未被定义则编译段1否则编译段2这种形式和第种形式作用相反
以上两种形式使用方法差不多根据需要任选种视方便而定
还有种形式就是#后面是个表达式而不是个简单标识符:
# 表达式
段1
#
段2
#end
当表达式成立则跑段1否则跑段2
注意:
除#undef释放的前宏定义可单独使用的外
#def,#,#ndef均要和#end配对
如:
#...#...#end
#def...#end
#ndef...#end
最新评论