簡體   English   中英

extern short i有什么問題? i = 2; ? gcc抱怨類型沖突

[英]What is wrong with extern short i; i=2; ? gcc complains type conflict

以下代碼與問題類似: 初始化變量和在聲明后立即為其賦值之間是否有區別? 兩次否決票,所以我處於危險之中;-)

short i; 
i = 2;

它不能與MinGW和-std = c99一起編譯-為什么? 第一行是標識符i的聲明,而不是對象的定義。 但是,標識符具有文件范圍,因此默認情況下具有外部鏈接。 它可以在其他地方聲明和定義。 第二行可以是對該對象的分配。 但是gcc抱怨缺少類型或存儲類,並且在猜測類型為int之后抱怨類型沖突。

你說short i;short i; 具有文件范圍,這對我來說意味着它( 編輯:和隨后的i = 2; )在函數之外。 在函數之外, i = 2; 完全是胡說八道; 作為聲明,它不能出現在函數外部。 (編輯)由於語句不能出現在函數外部,因此“賦值”必須是定義。 在舊的C代碼中,沒有存儲類的定義是一個int定義,因此您的代碼(在這些規則下,看起來就像GCC正在應用)等效於:

short i;
int i = 2;

當然,對於C編譯器而言,這完全是胡說八道。 (結束編輯)

通過定義和初始化,您可以獲得或多或少的效果:

short i = 2;

如果僅希望聲明一個外部變量,則此方法不起作用。 在這種情況下,請將初始化放在帶有定義的文件中,或者放在您的函數之一中(如下所示)。

extern short i;
int main(int argc, char **argv) { i = 2; /* more code */ }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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