1
C++允許您使用#define
預處理器指令定義編譯器在編譯之前將替換的符號常量。我的問題是,編譯器通常如何在內部存儲這些數據,以及它們是否具有數據類型?符號常數:它們如何存儲以及它們的類型是什麼?
C++允許您使用#define
預處理器指令定義編譯器在編譯之前將替換的符號常量。我的問題是,編譯器通常如何在內部存儲這些數據,以及它們是否具有數據類型?符號常數:它們如何存儲以及它們的類型是什麼?
嚴格來說,編譯器決不會看到使用#define
預處理器指令聲明的常量。這些處理由預處理器在文本替換的基礎上處理。他們沒有C++意義上的「類型」,因爲預處理器不知道任何有關C++語言語義的知識。
預處理器使用直接的文本替換策略來解析宏。例如,下面的代碼:
#define FIVE 5
int a = FIVE;
編譯器將只能看到:
int a = 5;
符號FIVE
從編譯器看到源不見了。您的編譯器將只能運行預處理器;在GCC中是-E
,而在MSVC中是/E
or /P
。使用這樣的選項,你可以通過預處理器運行你的源代碼,看看它是如何改變的。