嗨全部 我只是想知道我們是否可以聲明變量名稱作爲結構名稱。結構類型和變量名稱
例如
typedef struct
{
char c;
}t;
然後在一些功能我可以用
fun()
{
t t;
}
是這有效嗎?如果是這樣,那麼編譯器如何區分它們?
嗨全部 我只是想知道我們是否可以聲明變量名稱作爲結構名稱。結構類型和變量名稱
例如
typedef struct
{
char c;
}t;
然後在一些功能我可以用
fun()
{
t t;
}
是這有效嗎?如果是這樣,那麼編譯器如何區分它們?
是的,它是有效的。如果這樣做,那麼結構類型將隱藏在封閉範圍內,並且t
僅引用聲明的變量。
是的,因爲每個事物在編譯器的理解中都處於不同的位置。
t t;
編譯器在遇到第一個t時期待一個類型,並且它有一個類型叫做t。
編輯:爲了解決評論。
我不是在談論範圍。
但是由於我沒有編寫一個編譯器(只有解釋器),我不知道這個術語。編譯器期望第一個t的一個標記是一個類型,它也知道到那時爲止已經聲明瞭什麼類型。因爲它看到一個名稱,指的是一種類型,它很高興。而如果在那裏找到一個不是類型的令牌,那麼它會正確地發出錯誤信號。
-1,因爲你的理由是錯誤的。 'typedef'和變量名在相同的範圍內。 – 2010-11-11 08:43:43
術語是它們是不同類型的標記。 – Praxeolitic 2014-09-04 04:12:02
fun() { t t; }
是這有效嗎?
不,它不是。返回類型fun()
缺失且隱含int
返回類型已棄用。
但是void fun(){ t t ;}
在語法上是有效的。
是的,但你爲什麼要?如果你想在你的項目中發現錯誤和錯誤,那麼就直接提出並在類型之後命名變量。
布拉沃,只是因爲某些東西是有效的,這並不是一個好主意。 – paxdiablo 2010-11-11 04:54:04
解析器首先獲取數據類型,並維護一個不同的表和後面的部分作爲變量名。所以它絕對有效。
您可以隨時編譯它......我認爲編譯器將能夠區分,因爲您可以知道變量/對象何時被聲明與讀取/寫入/等等。 – 2010-11-11 04:30:15
@muntoo,你可以編譯它,但是它不會告訴你它是否有效,只是它是否在你的編譯器中起作用。 – 2010-11-11 04:33:41
當然,如果精神病患者是看着你的代碼的下一個人... ... – 2010-11-11 04:41:56