如果这个问题看起来很天真,我很抱歉,但我在任何地方都找不到明确的答案。我必须根据前面定义的常量来定义一个常量,比如
#define CONST_A 2
#define CONST_B 3
#define CONST_C CONST_A*CONST_BCONST_A和CONST_B的实际值是作为定义标志提供给gcc的,所以我不能只写#define CONST_C 6。
如果我理解正确的话,这将告诉预处理器用2*3而不是6替换任何出现的CONST_C,对吗?我主要担心性能,所以我更喜欢后者。我猜这可以通过使用static const而不是预处理器#define来完成。这是最好的选择吗?
提前感谢!
发布于 2013-01-10 19:05:56
不要担心像C中的2 * 3这样的常量表达式的性能。至少20年来,C编译器已经能够通过在编译时计算它们来消除这些表达式。
出于其他原因,比如类型安全或者不必担心优先级(想想如果CONST_A被定义为2+2会发生什么),static const是首选的,但不是出于性能方面的原因。
发布于 2013-01-10 19:17:30
C语言说常量表达式可以在编译时求值,而当今任何像样的编译器都会在编译时求值常量表达式。这种编译器操作称为常量折叠。
(C99,6.6p2)“常量表达式可以在翻译期间而不是运行时进行计算,因此可以在常量所在的任何位置使用。”
https://stackoverflow.com/questions/14256420
复制相似问题