第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在嘗試用const初始化變量時出錯“初始化器元素不是常量”

在嘗試用const初始化變量時出錯“初始化器元素不是常量”

C++ C
郎朗坤 2019-06-09 16:49:03
在嘗試用const初始化變量時出錯“初始化器元素不是常量”我在下面的程序的第6行(將my_foo初始化為foo_init)上有一個錯誤,我不知道為什么。typedef struct foo_t {     int a, b, c;} foo_t;const foo_t foo_init = { 1, 2, 3 };foo_t my_foo = foo_init;int main(){     return 0;}請記住,這是我正在處理的一個更大、多文件項目的簡化版本。目標是在對象文件中有一個常量,多個文件可以用來初始化狀態(tài)結(jié)構(gòu)。因為它是一個資源有限的嵌入式目標,而且結(jié)構(gòu)也不是那么小,所以我不想要源代碼的多個副本。我不想用:#define foo_init { 1, 2, 3 }我還試圖編寫可移植代碼,所以我需要一個有效的C89或C99解決方案。這與對象文件中的org有關(guān)嗎?初始化變量進入一個ORG并通過復(fù)制第二個ORG的內(nèi)容進行初始化?也許我只需要改變我的策略,讓一個初始化函數(shù)在啟動時完成所有的副本。除非有其他的想法?
查看完整描述

3 回答

?
寶慕林4294392

TA貢獻2021條經(jīng)驗 獲得超8個贊

在C語言中,具有靜態(tài)存儲持續(xù)時間的對象必須用常數(shù)表達式或者使用包含常量表達式的聚合初始化器。

“大型”對象絕不是C中的常量表達式,即使該對象聲明為const.

此外,在C語言中,“常量”一詞指的是文字常數(shù)(比如1'a'0xFF(等等)、枚舉成員和操作符的結(jié)果,例如sizeof..Const-限定對象(任何類型的)是非常數(shù)用C語言術(shù)語。它們不能用于具有靜態(tài)存儲持續(xù)時間的對象的初始化器中,而不管它們的類型如何。

例如,這是常數(shù)

const int N = 5; /* `N` is not a constant in C */

上述N在C+中是常數(shù),但在C中不是常量,所以,如果您嘗試執(zhí)行

static int j = N; /* ERROR */

您將得到相同的錯誤:嘗試用非常量初始化靜態(tài)對象。

這就是為什么在C語言中我們主要使用的原因#define聲明命名常量,并訴諸于#define若要創(chuàng)建命名聚合初始化器,請執(zhí)行以下操作。


查看完整回答
反對 回復(fù) 2019-06-09
?
小唯快跑啊

TA貢獻1863條經(jīng)驗 獲得超2個贊

這是語言的限制。第6.7.8/4節(jié):

具有靜態(tài)存儲持續(xù)時間的對象的初始化程序中的所有表達式都應(yīng)該是常量表達式或字符串文本。

在第6.6節(jié)中,規(guī)范定義了必須視為常量表達式的內(nèi)容。它不說明Const變量必須被視為常量表達式。編譯器對此進行擴展是合法的(6.6/10 - An implementation may accept other forms of constant expressions但這將限制可移植性。

如果你能改變my_foo所以它沒有靜態(tài)存儲,您可以:

int main(){
    foo_t my_foo = foo_init;
    return 0;}


查看完整回答
反對 回復(fù) 2019-06-09
  • 3 回答
  • 0 關(guān)注
  • 827 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號