話不多說,先上一段神奇的**!
#include
#include
enum t
;int main()
猜,答案會是多少呢?
b = 1
b=0process returned 0 (0x0) execution time : 0.034 s
press any key to continue.
為啥,第二行那個會是0呢?
這就要說到寫這篇部落格的意義了,,關於預編譯和編譯了。
列舉成員的值是在,編譯階段確定的。而所有的巨集展開巨集替換是在預編譯階段進行的。所以此處犯了乙個很大的錯誤。把列舉成員的值放在了巨集的預編譯下,因為預編譯是提前於編譯的,所以b被認為是0。
tips:
1、切記,不要把列舉的編譯時期才能確定變數的值放到巨集的預編譯。
2、列舉中變數以逗號結尾。
OC 巨集和預編譯
import define pi 3.1415926 define tow pi pi 2 define no chess define girth r pi 2 r define area r pi r r 巨集的引數一定要括號起來 define ipad define age 20 undef ...
gcc中的預編譯巨集
gcc中的預編譯巨集 預定義的巨集 nase file 原始檔的完整路徑名,和 file 不同,被引用的檔案仍然是原來檔名 char unsigned 用於指定該機器上 char 是無符號型別 cplusplus 使用 c 編譯器編譯 date 編譯時的日期 file 編譯檔名 func 同 fun...
C語言預編譯 巨集的整理
define null 0 define null null pointer 0 上面的重定義是相同的,但下面的重定義不同 如果多次定義時,再次定義的巨集內容是不同的,gcc會給出 name redefined 警告資訊.應該避免重新定義函式巨集,不管是在預處理命令中還是c語句中,最好對某個物件只有...