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