#ifndef#define#endif的用法【轉載…
阿新 • • 發佈:2019-02-16
#define WINDOWS
這樣則編譯下面的命令列:
#define MYTYPE long
如果在這組條件編譯命令之前曾出現以下命令列:
#define WINDOWS 0
則預編譯後程序中的MYTYPE都用float代替。這樣,源程式可以不必作任何修改就可以用於不同型別的計算機系統。當然以上介紹的只是一種簡單的情況,可以根據此思路設瞥?a href="javascript:;" onClick="tagshow(event, '%C6%E4%CB%FC');return false;">其它的條件編譯?
例如,在除錯程式時,常常希望輸出一些所需的資訊,而在除錯完成後不再輸出這些資訊。可以在源程式中插入以下的條件編譯段:
#ifdef DEBUG
print ("device_open(%p) ", file);
#endif
如果在它的前面有以下命令列:
#define DEBUG
則在程式執行時輸出file指標的值,以便除錯分析。除錯完成後只需將這個define命令列刪除即可。有人可能覺得不用條件編譯也可達此目的,即在除錯時加一批printf語句,除錯後一一將printf語句刪除去。的確,這是可以的。但是,當除錯時加的printf語句比較多時,修改的工作量是很大的。用條件編譯,則不必一一刪改printf語句,只需刪除前面的一條“#define DEBUG”命令即可,這時所有的用DEBUG作識別符號的條件編譯段都使其中的printf語句不起作用,即起統一控制的作用,如同一個“開關”一樣。
有時也採用下面的形式:
#ifndef 識別符號
程式段1
#else
程式段2
#endif
只是第一行與第一種形式不同:將“ifdef”改為“ifndef”。它的作用是:若識別符號未被定義則編譯程式段1,否則編譯程式段2。這種形式與第一種形式的作用相反。
以上兩種形式用法差不多,根據需要任選一種,視方便而定。
還有一種形式,就是#if後面的是一個表示式,而不是一個簡單的識別符號:
#if 表示式
程式段1
#else
程式段2
#endif
它的作用是:當指定的表示式值為真(非零)時就編譯程式段1,否則編譯程式段2。可以事先給定一定條件,使程式在不同的條件下執行不同的功能。