簡體   English   中英

無法使用結構名稱聲明全局變量

[英]Cannot declare global variable with the name of a struct

結構成員可以使用與類型相同的名稱,但似乎全局變量不能。 有誰知道為什么? 我正在使用 MinGW-64,它是 GNU C 的實現。

typedef struct foo{

}foo;

foo foo;

int main()
{

}

謝謝!

這里的問題相當簡單。 您不能在定義的同一 scope 中重新定義名稱的含義。 相比之下,這將是有效的

typedef struct foo{
  char c;
}foo;

int main()
{
    foo foo;
}

main的 scope 中聲明之后, foo的含義發生了變化。 但是,當您在與類型別名相同的 scope 中執行此操作時,您基本上提供了相互沖突的定義。

結構字段不在類型定義本身的 scope 中。 所以這就是為什么它們也不沖突。

使用gcc編譯時,會產生此錯誤:

test.c:5:5: error: ‘foo’ redeclared as different kind of symbol
 foo foo;

這就是問題所在。 聲明foo foo; 當符號foo已被聲明為引用struct foo時,嘗試將其重新聲明為變量。 您可以通過將變量名稱更改為其他名稱來解決您的問題。

暫無
暫無

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

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