2011-01-26 51 views
2

C中的所有標識符在使用之前都需要聲明,但我不能在C99標準中找到它所表示的位置。使用前的C聲明

我認爲它也是指宏定義,但只定義了宏擴展順序。

回答

5

C99:TC3 6.5.1§2,腳註79明確說明:

因此,未聲明的標識符是違反語法。

結合6.2.1§5:

除非另有明確規定,[...]它[即標識符]指的是在該實體 相關名稱空間,其聲明在標識符 出現的位置可見

和§7:

[...]的任何其它標識符具有範圍,只是其聲明符完成後開始。

+0

那麼,什麼是「未申報」呢?我的意思是,如果標識符在使用後聲明,爲什麼稱爲「未聲明」?謝謝。 – 2011-01-26 13:15:44

2

有一個至少幾個例外,所有的標識需要在使用前delcared規則:

  • 而C99去除隱函數聲明,你仍然可以看到C程序是可能在不知不覺中依靠它們。例如,甚至有關於SO的偶然問題,問爲什麼返回double的函數不起作用(當包含函數聲明的頭部被省略時)。看起來,在使用C99之前的語義進行編譯時,未聲明函數的警告通常不會被配置爲使用或被忽略。

  • goto標籤的標識符可能在'聲明'之前使用 - 它的語法外觀(後面跟着一個:和一個語句)隱式聲明。

的例外爲goto標籤規則是幾乎無用的雞蛋裏挑骨頭,但功能標識符可以不用聲明中使用的事實(預C99)的東西,可以知道,因爲你可能有用偶爾會遇到問題,並將其視爲根本原因。

另外,標識符可以在預處理之前(嚴格地說,在被定義之前)被使用,在那裏它們可以被測試以被定義或不被定義,或者在預處理器表達式中被使用,否則它們將評估爲0否則定義。