[例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。假如它含有任何其它數,則實現是非標準的。 注重:宏名的書寫由標識符與兩邊各二條下劃線構成。