2016-03-12 64 views
0

你能告訴我什麼是錯?當我嘗試編譯它時,我看到一個錯誤:初始化器元素不是常量。這是關於第二行,可能是關於x。「C初始化器元素不是常量」C

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

你需要一個'main',不是嗎? – ForceBru

+0

編譯器只告訴你,你不能用一些不常量的東西來初始化一個全局變量......也就是說不能與另一個變量一起初始化。 –

+0

但是這個變量在所有程序中都是不變的 – Editt

回答

3

在C中,全局變量只能使用常量進行初始化。因此,該行

float d = x/100; 

是不正確的。

您可以使用預處理器宏來實現您的目標。

#define CONSTANT 10.0 

float x = CONSTANT; 
float d = CONSTANT/100; 
float a = 0; 
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; 

    ... 
} 

附:我在同一時間寫了與薩胡相同的答案。無論如何,我會指出第一部分中解釋的原因。