为什么编译器会在提供的代码上给出以下错误消息:“initializer element is not constant”。相应的C / C ++代码在gcc下完美编译。
#import <Foundation/Foundation.h>
const float a = 1;
const float b = a + a; // <- error here
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
// insert code here...
NSLog(@"Hello, World!");
[pool drain];
return 0;
}
答案 0 :(得分:12)
如果const float
语句出现在文件范围以外的其他地方,那么代码只能正确编译。
显然,它是标准的一部分。重要的是所有文件范围声明的变量都使用常量表达式初始化,而不是涉及常量变量的表达式。
您正在使用另一个对象的值初始化浮动'b'。任何对象的值,即使它是const限定的,也不是C中的常量表达式。
答案 1 :(得分:4)
@dreamlax 是正确的,你不能有一个const声明,其初始化依赖于另一个(const)变量。如果你需要一个依赖另一个,我建议创建一个你可以视为常量的变量并只初始化一次。有关详细信息,请参阅这些SO问题:
答案 2 :(得分:1)
我的机器上没有Xcode,所以我不能尝试我的例子,
但你可以试试吗
#define A (1)
#define B (A + A)
const float a = A;
const float b = B;