gpt4 book ai didi

c - 为什么要将静态函数替换为类对象宏#define STATIC static?

转载 作者:太空宇宙 更新时间:2023-11-04 06:15:42 26 4
gpt4 key购买 nike

我刚刚在遗留代码中发现了这一点。我知道使用宏,每当使用名称时,它都会被宏的内容替换。它们最常用于为数字常量提供符号名称。我所知道的是预处理没有类型安全、范围的概念。

这样做的真正好处是什么?

#define STATIC static
STATIC function1() { /*Do something*/ }

我知道静态函数仅在该模块或翻译单元中可见。它们在定义的 C 文件之外不可见。


为什么不直接这样声明,而不是宏替换呢?

static function1() { /*Do something*/ }

我以为我会在 SO 中找到答案,但我没有找到任何合适的答案。

最佳答案

您没有理由这样做。通常,以这种方式将关键字隐藏在 #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 具有相同的含义。

关于c - 为什么要将静态函数替换为类对象宏#define STATIC static?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46361611/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com