根据其他常量定义常量

时间:2013-01-10 11:03:32

标签: c

抱歉,如果这个问题看起来很幼稚,但我无法在任何地方找到明确答案。我必须根据先前定义的常量定义一个常量,比如

#define CONST_A 2
#define CONST_B 3
#define CONST_C CONST_A*CONST_B

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

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

提前致谢!

2 个答案:

答案 0 :(得分:9)

不要担心C中2 * 3等常量表达式的性能.C编译器能够通过在编译时评估它们至少20年来消除这些表达式。

static const可能因其他原因而首选,例如类型安全或不必担心优先级(想想如果CONST_A被定义为2+2会发生什么),但不是表现原因。

答案 1 :(得分:0)

C说可以在编译时评估常量表达式,今天任何体面的编译器都会在编译时计算常量表达式。此编译器操作称为常量折叠

  

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