我知道,在C宏如:嵌入式C中的宏如何影响内存?
#define VARNULL (u8)0
不存储这个VARNULL
在RAM中,而这当然会增加对FLASH的代码大小。
但如果我有一个多行宏如:
#define CALL_FUNCS(x) \
do { \
func1(x); \
func2(x); \
func3(x); \
} while (0)
通过了解func1
,func2
和func3
来自不同.c
文件的功能。这是否意味着这些功能将被存储在RAM中?当然在FLASH(代码)中。
如果我错了,请问我是否正确?
宏不会影响运行时,它们会在编译之前影响代码。 –
请每个问题一个问题。 –
除非使用,否则VARNULL不存储在任何地方。如果使用'VARNULL',编译器就会看到代码,就好像你写了'(u8)0'一样,它会适当地使用该零。使用'CALL_FUNCS',如果你不使用它,则没有任何东西进入程序。如果你调用它,那么在代码中的那个地方会产生三个函数调用,就像你长时间写的那样。如果你有一个可调试的图像(可能你不在嵌入式系统中),那么一个'const'变量会出现在符号表中,并且可以使调试更容易;宏没有被记录,所以调试起来更困难。 –