我刚刚在遗留代码中发现了这一点。我知道使用宏,只要使用名称,它就会被宏的内容替换。它们最常用于为数字常量提供符号名称。我所知道的是preprocess没有类型安全,范围的概念。
这样做的真正好处是什么?
#define STATIC static
STATIC function1() { /*Do something*/ }
我知道静态函数只在该模块或翻译单元中可见。在C文件外部看不到它们。
为什么不直接声明,而不是宏替换?
static function1() { /*Do something*/ }
我以为我会在SO中找到答案,但我找不到合适的答案。
答案 0 :(得分:4)
没有理由说你为什么要这样做。通常,以这种方式将关键字隐藏在#define
后面是不好的做法,因为代码变得神秘而难以阅读。
我怀疑它与编码风格有关,通常以大写编写各种函数说明符,特别是在Windows编程中。通常会指定某个调用约定。例如Windows中的CALLBACK,或旧的“Windows圣经”(Petzold)中的这个例子:
#define EXPORT __declspec (dllexport)
(在C ++的情况下,可以将其修改为包含extern "C"
。)然后,您将拥有EXPORT void CALLBACK func (void)
等函数。同样,Windows中也有WINAPI
。
有时我们也会看到像
这样的内容#define PRIVATE static
这有点可怕,因为static
与C ++中的private
的含义并不相同。