簡體   English   中英

為什么我不能在C中的函數外部為全局變量賦值?

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

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