首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据其他常量定义常量

根据其他常量定义常量
EN

Stack Overflow用户
提问于 2013-01-10 19:03:32
回答 2查看 479关注 0票数 3

如果这个问题看起来很天真,我很抱歉,但我在任何地方都找不到明确的答案。我必须根据前面定义的常量来定义一个常量,比如

代码语言:javascript
复制
#define CONST_A 2
#define CONST_B 3
#define CONST_C CONST_A*CONST_B

CONST_ACONST_B的实际值是作为定义标志提供给gcc的,所以我不能只写#define CONST_C 6

如果我理解正确的话,这将告诉预处理器用2*3而不是6替换任何出现的CONST_C,对吗?我主要担心性能,所以我更喜欢后者。我猜这可以通过使用static const而不是预处理器#define来完成。这是最好的选择吗?

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-10 19:05:56

不要担心像C中的2 * 3这样的常量表达式的性能。至少20年来,C编译器已经能够通过在编译时计算它们来消除这些表达式。

出于其他原因,比如类型安全或者不必担心优先级(想想如果CONST_A被定义为2+2会发生什么),static const是首选的,但不是出于性能方面的原因。

票数 9
EN

Stack Overflow用户

发布于 2013-01-10 19:17:30

C语言说常量表达式可以在编译时求值,而当今任何像样的编译器都会在编译时求值常量表达式。这种编译器操作称为常量折叠。

(C99,6.6p2)“常量表达式可以在翻译期间而不是运行时进行计算,因此可以在常量所在的任何位置使用。”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14256420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档