1
A
回答
9
它不存儲在任何地方。它僅在編譯的預處理階段使用。你可以把它看作是VAR
的一個文本替換,在你的代碼中使用1
。完成此操作後,該宏本身不再存在於您的程序中。
考慮下面的例子:
#define VAR 1
int x = VAR;
這是簡單地預處理成:
int x = 1;
它是那麼這個代碼被編譯爲C++。所以宏觀VAR
根本沒有佔用任何空間。但是,由x
定義的對象可能會非常好。
2
它存儲在無論你實際使用VAR
,因爲你在這裏定義的所有是預處理器的文本替換規則。
#define VAR 1
int x = VAR;
源編譯之前,預處理器將在減少:
int x = 1;
在這種情況下,1
值存儲在x
。在編譯之前,VAR
符號被有效擦除。
3
#define
純粹是一種預處理製品。如果宏未被使用,它的值甚至不會到達編譯器。如果它使用是,那麼您的問題的答案將取決於它如何使用。
1
它只是#define VAR 1
。所以只有...定義。它不會導致任何內存分配,它只能被預處理器用來修復所有具有定義值1的VAR
的出現。只是一個文本概念。
1
編譯器將在程序中使用的所有#define變量替換值,而目標代碼正在生成。
1
如果您使用的是gcc,可以使用選項-E。有了這個選項,你可以看到執行#define語句的替代源代碼的輸出(也#包括等)
gcc -E whatever_file.c
在調試複雜的宏
相關問題
- 1. #define指令問題
- 2. #define指令說明
- 3. 平臺調用#define指令
- 4. 將涉及CPU寄存器的指令轉換爲存儲器指令
- 5. 微指令從機器指令解碼後存儲在哪裏?
- 6. 如何忽略一個define指令?
- 7. #define指令有多個替換?
- 8. 有沒有辦法'擴展'#define指令?
- 9. x86程序集MOV指令 - 寄存器到寄存器和存儲器到存儲器
- 10. 預定義指令#define特定於我的機器
- 11. 是否從頭文件繼承#define(預處理器指令)
- 12. 以奇怪的方式使用#define預處理器指令
- 13. mips存儲指令偏移量和移動指令
- 14. 創建新的存儲指令LLVM
- 15. 存儲指令中的數據對齊
- 16. 在x86指令中寫入非阻塞存儲器?
- 17. 端口映射作爲指令存儲器
- 18. 基爾視覺模擬器不執行存儲指令
- 19. RAM實際上存儲了什麼,指令或指令本身是以0和1的形式存儲的?
- 20. 存儲指針
- 21. 如何將堆棧指針寄存器中的值存儲到存儲器(8085)?
- 22. 預處理器指令define和ifdef不按我想象的那樣工作?
- 23. 在C#中的#if中使用#define預處理器指令是否有效#
- 24. '找不到方法'編譯器警告的方法在#define指令內
- 25. 使用#define創建指針
- 26. 加載到寄存器中的指令
- 27. JTAG指令寄存器長度,IR_LEN
- 28. 指令DB和AX寄存器
- 29. 機器指令和內存地址
- 30. 特權指令,添加寄存器值?
INT測試非常有用= VAR;和int test = 1;是相同的。預處理器不存儲任何內容。 – Etherealone 2013-04-10 20:04:53
它根本沒有儲存。預處理器只進行文本替換,即用文本「1」代替文本「VAR」的每一次出現。 – cnicutar 2013-04-10 20:05:02