gpt4 book ai didi

c - 在 C 中使用枚举而不是#defines 作为编译时常量是否合理?

转载 作者:太空狗 更新时间:2023-10-29 16:29:34 34 4
gpt4 key购买 nike

在 C++ 中工作了一段时间后,我又回到了一些 C 开发中。我已经意识到,在不必要的时候应该避免使用宏,以便让编译器在编译时为您做更多的工作。因此,对于常量值,在 C++ 中,我会使用静态常量变量或 C++11 枚举类来进行很好的范围界定。在 C 语言中,静态常量并不是真正的编译时常量,枚举可能(?也可能不是?)表现略有不同。

那么,更喜欢对常量使用枚举而不是#defines 是否合理?

作为引用,这里有一个 excellent list of pros and cons of enums, #defines and static consts in C++ .

最佳答案

使用 enum { FOO=34 }; 相对于 #define FOO 34 的优势在于宏是经过预处理的,因此原则上编译器不会真正看到它们(在实践中,编译器确实看到了它们;最近的 GCC 有一个复杂的基础设施,可以从宏扩展中得到一些内部抽象语法树)。

特别是,调试器更有可能从 enum { FOO=34 }; 了解 FOO 而不是从 #define FOO 34(但同样,这在实践中并不总是正确的;有时,调试器足够聪明,能够扩展宏...)。

正因为如此,我更喜欢 enum { FOO=34 }; 而不是 #define FOO 34

还有打字优势。我可以使用 enum color_en { WHITE, BLACK }; 从编译器获得更多警告。 enum color_en color; 比使用 bool isblack;

顺便说一句,static const int FOO=37; 通常为调试器所知,但编译器可能会对其进行优化(这样就不会为其使用任何内存位置;它可能只是内部的直接操作数machine code 中的一些说明)。

关于c - 在 C 中使用枚举而不是#defines 作为编译时常量是否合理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33232075/

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