[英]Error: Initializer Element is not constant (c language)
這是一個用於存儲公式的.h文件,但它給了我您在第16行(在字符串下方)的標題上看到的錯誤。 我是一個初學者,錯誤提示不是恆定的,因此我雖然將“ const”放在“ float”之前,但是無論哪種方式都無效。
#ifndef FORMULAS_H_INCLUDED
#define FORMULAS_H_INCLUDED
float a;
float Pi=3.1415926536;
float r;
float b;
float c;
float h;
char formula_volume_cube[100] = "Formula for the Volume of a Cube: V=a*a*a";
const float volume_cube=(a*a*a);
#endif // FORMULAS_H_INCLUDED
任何幫助將不勝感激。 感謝您的時間。
C中的全局變量只能用編譯時常量表達式初始化,這是一類非常狹窄的表達式。 它實質上僅包含文字或涉及文字的表達式:
float a1 = 1.5; // OK
const float a2 = 2.5 * 10 / 300; // Also OK
標識另一個全局變量的表達式不是編譯時常量表達式:
// float a3 = a2; // Error!
C對此沒有足夠的表現力。 所有這些都是為了簡單起見。 例如,C不能區分const float b1 = 2.5;
和extern const float b2;
。 變量b1
沒有比b2
“更多的常量”,但是編譯器只知道b1
的值,而b2
的值是未知的—只能由不同的轉換單元設置,而無任何順序。 因此,沒有辦法使一個常數比另一個常數“更恆定”。 C語言中的簡單解決方案是不能將 id表達式用作編譯時常量。
(相比之下,C ++允許全局變量具有動態初始化程序。如果一個全局變量的初始化程序依賴於另一個全局變量,則這會引起一整套排序問題。C沒有這些問題。)
訊息
錯誤:初始化元素不是恆定的
幾乎說明了一切
float a;
沒有聲明為常量(可以在程序運行時更改),因此
const float volume_cube=(a*a*a);
不能為常數,因為它基於非常數a
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.