[例4 - 1 5 ] #define TED 10 main () { #ifdef TED printf("Hi Ted/n"); #else printf("Hi anyone/n"); #endif #ifndef RALPH printf ("RALPH not defined/n") ; #endif } 上述代码打印“ Hi Ted ”及“ RALPH not defined”。假如TED没有定义,则显示“ Hianyone”,后面是“ RALPH not defined”。 可以像嵌套#if 那样将#ifdef 与#ifndef 嵌套至任意深度。
4.7.6 #undef 命令#undef 取消其后那个前面已定义过有宏名定义。一般形式为: #undef macroname 例如: #define LEN 100 #difine WIDTH 100 char array[LEN][WIDTH]; # undef LEN # undef WIDTH / *at this point both LEN and WIDTH are undefined * / 直到碰到#undef 语句之前, LEN与WIDTH均有定义。 #undef 的主要目的是将宏名局限在仅需要它们的代码段中。
4.7.9 预定义的宏名 ANSI标准说明了五个预定义的宏名。它们是: _LINE_ _FILE_ _DATE_ _TIME_ _STDC_ 假如编译不是标准的,则可能仅支持以上宏名中的几个,或根本不支持。记住编译程序也许还提供其它预定义的宏名。 _LINE_及_FILE_宏指令在有关#line的部分中已讨论,这里讨论其余的宏名。 _DATE_宏指令含有形式为月/日/年的串,表示源文件被翻译到代码时的日期。 源代码翻译到目标代码的时间作为串包含在_ T I M E _中。串形式为时:分:秒。 假如实现是标准的,则宏_ S T D C _含有十进制常量1。假如它含有任何其它数,则实现是非标准的。 注重:宏名的书写由标识符与两边各二条下划线构成。