回答
編號如6.2.1/2所述,C語言只有文件範圍,功能範圍,塊範圍和原型範圍。 C中沒有其他範圍。
結構類型不會創建範圍。例如,在{}
之間聲明的任何新類型都將屬於封閉範圍。例如。如果聲明此文件範圍
struct foo
{
struct bar
{
int x;
} b;
} a;
那麼「嵌套」 struct bar
類型定義將屬於文件範圍爲好。即您可以立即使用
struct bar b;
在文件範圍內。 struct bar
將引用上面的「嵌套的」struct bar
類型定義(這意味着它基本上不是「嵌套」的)。
還要注意,C語言具有名稱空間的概念,在其中放置不同種類的標識符並在其中查找它們。每個結構類型都有其自己的名稱空間,其中放置了結構成員的名稱。然而,名稱空間的概念與範圍的概念不同,儘管它們協同工作。
目前尚不清楚你的意思是「b
知道a
存在」。 C語言不提供任何方法來編寫代碼,這取決於b
「知道」什麼以及它「不知道」什麼。這使你的問題沒有意義。
您的意思是,「我可以在struct foo的聲明中引用struct foo」嗎?
例子:
struct foo
{
...
struct foo next;
...
}
如果上面是你想要的,那麼,它是有效的。
這是無效的,它試圖創建一個無限大小的結構體。 'struct foo * next;'是有效的。 – 2014-09-23 04:16:17
除了無效之外,不,這不是OP的意思。請不要在答案中提出問題,將它們作爲評論發佈......一旦有足夠的代表這樣做。 – 2014-09-23 04:48:43
- 1. C++ /範圍結構
- 2. 定位範圍內的一個範圍
- 3. 使結構「範圍」?
- 4. 在另一個日期範圍內總結日期範圍
- 5. 當達到最大值時總結範圍內的範圍和阻塞範圍
- 6. 結構聲明範圍
- 7. 結構範圍訪問
- 8. 矢量範圍與結構
- 9. Ç - 限制結構範圍
- 10. SWIG丟失結構範圍
- 11. 比較兩個日期範圍時一個範圍內有一個範圍開始日期
- 12. 蘭特()的範圍內返回範圍
- 13. 動態範圍內的VBA範圍值
- 14. 跨度範圍/範圍的內容
- 15. 的範圍內
- 16. 使用link_to渲染範圍內的一個範圍
- 17. 從另一個範圍遍歷範圍內的對象?
- 18. 在另一個範圍內計算範圍的出現次數
- 19. 檢查,如果一個整數範圍內的其它範圍JAVA
- 20. 範圍不與其他範圍
- 21. 如何在範圍內的結構中保存一個數組?
- 22. 總結範圍內的所有整數()
- 23. 做一個範圍的係數組合?
- 24. MySQL在任何範圍內的第一次佔用範圍內計數結果
- 25. 日期範圍 - 在一個範圍內,但不超過 - 在PHP
- 26. 在另一個範圍內查找範圍條件
- 27. 範圍驗證範圍之內
- 28. 全球範圍內VS文件範圍
- 29. 複製範圍內排除範圍
- 30. 控制器範圍內跨範圍
我相信它的確如此。 'struct.member'和'member'是不同的變量。 – 2014-09-23 03:29:42
結構體內是否有聲明?如果不是,甚至不允許聲明的範圍意味着什麼? – 2014-09-23 03:30:41
如果你在C而不是C++,那麼沒有範圍,因爲C結構沒有方法。 – 2014-09-23 03:34:22