【发布时间】:2018-03-03 20:23:44
【问题描述】:
我刚刚在遗留代码中发现了这一点。我知道使用宏时,每当使用名称时,都会将其替换为宏的内容。它们最常用于为数字常量提供符号名称。我所知道的是预处理没有类型安全、范围的概念。
这样做的真正好处是什么?
#define STATIC static
STATIC function1() { /*Do something*/ }
我知道静态函数仅在该模块或翻译单元中可见。在它们定义的 C 文件之外不可见。
为什么不直接这样声明,而不是宏替换?
static function1() { /*Do something*/ }
我以为我会在 SO 中找到答案,但我没有找到任何合适的答案。
【问题讨论】:
-
这通常使用宏来完成,根据您在编译时使用的选项,宏具有不同的替换,因此它可能并不总是扩展成相同的东西。
-
也许这个问题是相关的:stackoverflow.com/questions/32398612/…
-
@Barmas,在那种情况下,它只是覆盖了编译时静态函数的范围?
-
您可以通过更改为
#define STATIC(空替换)来更改所有功能,突然它们不再是静态的了。这是否有好处是值得怀疑的。 -
@qwn PCHAR 的定义很糟糕,应该是 typedef。例如,
PCHAR a, b;非常具有误导性,因为a将是char *,但b将是char。