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