C中的“初始化元素不是常数”

时间:2016-03-12 20:29:49

标签: c

你可以告诉我出了什么问题吗?当我尝试编译它时,我看到一个错误:Initializer元素不是常量。关于第二行,可能是x。

float x = 10;
float d = x/100;
float a = 0;

2 个答案:

答案 0 :(得分:4)

在C中,可以仅使用常量初始化全局变量。因此,行

float d = x/100;

不正确。

您可以使用预处理器宏来实现目标。

#define CONSTANT 10.0

float x = CONSTANT;
float d = CONSTANT/100;
float a = 0;

答案 1 :(得分:3)

函数外部的初始化函数必须是常量,不允许使用x/100,因为在单元转换(编译)的这个阶段中x可能是未定义的。
作为一种解决方法,您可以使用符号用于两个声明:

#define Value 10.0
float x = Value;
float d = Value/100;
float a = 0;

无论如何,您可以在C99-C11标准的函数中使用此代码:

void foo(void)
{
    float x = 10;      //Here works
    float d = x/100;
    float a = 0;

    ...
}

P.S。我在同一时间写了与Sahu相同的答案。无论如何,我会指出第一部分解释的原因。