由列舉引起的對編譯和巨集預編譯的理解思考

2021-08-14 22:59:15 字數 484 閱讀 3799

話不多說,先上一段神奇的**!

#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語句中,最好對某個物件只有...