[英]Initialising a static const variable from a function in c
我最近在嘗試執行以下邏輯時遇到了一些麻煩:
static const int size = getSize();
int getSize() {
return 50;
}
我收到的錯誤是initialiser element is not constant
在線閱讀后我明白這個問題是因為編譯器在編譯時評估static const
表達式,因此無法知道該值應該是什么。
我的問題是如何解決這個問題?
如果我有一個包含許多函數的庫但它們都需要這個邏輯,那么它們應該如何使用它而不必每次都計算它?
即使他們必須這樣做,如果邏輯本身可以在整個運行時間內改變,但我只想要從函數中獲得的第一個值呢?
也許我應該澄清一下getSize中的邏輯只是一個例子,它也可能包含從特定文件中檢索文件大小的邏輯。
與C ++不同,您不能使用C中的函數結果初始化全局變量,而只能使用編譯時已知的實常數來初始化全局變量。
你需要寫:
static const int size = 50;
如果必須通過函數計算常量,則可以執行以下操作:
不要再聲明static const int size = ...
了,但是寫下:
int getSize()
{
static int initialized;
static int size;
if (!initialized)
{
size = SomeComplexFunctionOfYours();
initialized = 1;
}
return size;
}
int main(void)
{
...
int somevar = getSize();
...
這樣, SomeComplexFunctionOfYours()
只在第一次調用getSize()
時被調用一次。 需要付出很小的代價:每次調用getSize()
,都需要執行測試。
或者你可以像這樣明確地初始化它,但是那時size
不能再為const
:
static int size;
void InitializeConstants()
{
size = SomeComplexFunctionOfYours();
}
int main(void)
{
InitializeConstants();
...
int somevar = size;
...
編譯器需要在編譯時知道常量變量的值,因為它是常量。
您也無法使用函數初始化變量。
你應該做這樣的事情:
#define SIZE 50
static const int size = SIZE;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.