【发布时间】:2016-05-13 14:46:43
【问题描述】:
我知道 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变量,可以使调试更容易;没有记录宏,因此更难调试。 -
请参阅
static constvs#definevsenum了解有关常量和宏的讨论。 -
没有“嵌入式C”语言。
标签: c embedded microcontroller