[英]Why can't I assign values to global variables outside a function in C?
假設我有一個全局變量,並且想為其分配另一個變量。 我發現您可以將另一個值分配給函數內的全局變量:
int i = 8;
int main(void)
{
i = 9; /* Modifies i */
return 0;
}
但是,在函數外部分配全局變量不起作用!
int i = 8;
i = 9; /* Compiler error */
int main(void)
{
return 0;
}
我收到以下錯誤消息:
warning: data definition has no type or storage class
warning: type defaults to 'int' in declaration of 'i'
error: redefinition of 'i'
note: previous definition of 'i' was here
int i = 8;
^
為什么會這樣呢?
這是對全局變量的定義,可以將其初始化為特定值:
int i = 8;
請注意,並不是代碼會被執行,該變量將被設置為最初包含8。要么將其視為“魔術”(對許多標准未真正定義的事物有用的模型),要么考慮帶有值的表在執行任何代碼之前將其復制到內存位置。
這是一段沒有執行“框架”的代碼。
(或者您打算這樣做。編譯器有其他意見,請參見下文。)
i = 9;
沒有包含它的函數。 目前尚不清楚何時執行。 那就是編譯器不喜歡的東西。
在C語言中,所有代碼都必須在函數內部,並且僅在例如從main()
調用該函數的情況下才執行。
其他語言,大多數是通過解釋來執行“腳本”的語言(而不是例如通過編譯器轉換成可執行代碼的語言)允許在任何地方使用代碼。 C是不同的。
編譯器對此有不同的看法:
i = 9;
int
,即默認值 i
的第二個定義,現在這確實是錯誤的,因此請顯示錯誤並導致編譯失敗 i
的第一個定義在哪里 這就是讀取引用的編譯器輸出的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.