簡體   English   中英

錯誤:初始化器元素不是常量(C語言)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM