Q
使用前的C聲明
2
A
回答
5
C99:TC3 6.5.1§2,腳註79明確說明:
因此,未聲明的標識符是違反語法。
結合6.2.1§5:
除非另有明確規定,[...]它[即標識符]指的是在該實體 相關名稱空間,其聲明在標識符 出現的位置可見。
和§7:
[...]的任何其它標識符具有範圍,只是其聲明符完成後開始。
2
有一個至少幾個例外,所有的標識需要在使用前delcared規則:
而C99去除隱函數聲明,你仍然可以看到C程序是可能在不知不覺中依靠它們。例如,甚至有關於SO的偶然問題,問爲什麼返回
double
的函數不起作用(當包含函數聲明的頭部被省略時)。看起來,在使用C99之前的語義進行編譯時,未聲明函數的警告通常不會被配置爲使用或被忽略。goto
標籤的標識符可能在'聲明'之前使用 - 它的語法外觀(後面跟着一個:和一個語句)隱式聲明。
的例外爲goto
標籤規則是幾乎無用的雞蛋裏挑骨頭,但功能標識符可以不用聲明中使用的事實(預C99)的東西,可以知道,因爲你可能有用偶爾會遇到問題,並將其視爲根本原因。
另外,標識符可以在預處理之前(嚴格地說,在被定義之前)被使用,在那裏它們可以被測試以被定義或不被定義,或者在預處理器表達式中被使用,否則它們將評估爲0
否則定義。
相關問題
- 1. 聲明之前不能使用'Int32'C#
- 2. 聲明在使用C++之前?
- 3. C++中的前言聲明
- 4. C中的前向聲明?
- 5. C++中的前向聲明
- 6. C++使用聲明
- 7. 的typedef與向前聲明stuct用C
- 8. C++前向聲明問題
- 9. C++/CLI向前聲明
- 10. Visual C++(C++/CLI)使用派生類的前向聲明?
- 11. 錯誤:C函數的聲明與之前的聲明衝突
- 12. C++使用空間聲明
- 13. C++中的typedef的前向聲明
- 14. C++的非類向前聲明的typedef
- 15. 聲明前使用的變量
- 16. CREATE VIEW之前的使用聲明
- 17. 衝突的類型和使用C先前的隱式聲明
- 18. 前面的對象聲明::在C++中
- 19. C++問題的std ::對,前置聲明
- 20. C++虛擬函數的前向聲明
- 21. Objective-C的前置聲明與#imports
- 22. C++:與之前的聲明衝突?
- 23. C++升壓向前聲明的問題
- 24. 模板類的前向聲明C++
- 25. C++中的前向聲明錯誤
- 26. 關於提前聲明的C++類
- 27. 警告:沒有先前的聲明 - C++
- 28. 關於前向聲明的問題(C++)
- 29. C++類前向聲明的缺點?
- 30. 的Objective-C接口向前聲明
那麼,什麼是「未申報」呢?我的意思是,如果標識符在使用後聲明,爲什麼稱爲「未聲明」?謝謝。 – 2011-01-26 13:15:44