2017-04-18 65 views
1

這工作調用函數後定義變量給了我一個編譯錯誤

main() 
{ 
    int c; 
    struct books Book1; 
    c = getchar(); 
    return 0; 
} 

這不

main() 
{ 
    int c; 
    c = getchar(); 
    struct books Book1; 
    return 0; 
} 

表達式的語法在函數main(並指向空間詞「後struct')

這並不是因爲B的定義低於c = getchar();,誤差點爲「int」和「b」

main() 
{ 
    int c; 
    struct books Book1; 
    c = getchar(); 
    int b; 
    return 0; 
} 

之間的空間是我有調用函數之前定義每個變量的問題,還是別的什麼?

這是C如何工作,還是它是一個渦輪C的東西?

編輯:發現重複意識到,我的意思是說 「定義」 不 「宣言」

+5

因爲Turbo C是一個過時的編譯器,當你調用代碼之後聲明變量是非法的。 – Havenard

+2

Turbo C不是一個C編譯器,因爲C在1989年首次標準化,在Turbo C發佈後很久。因此它包含了很多非標準的東西http://stackoverflow.com/q/3920351/995714 http://stackoverflow.com/q/1961828/995714 –

+0

好吧謝謝你,我發現了幾個重複後查找「在函數調用之前定義變量」而不是「在函數調用之後聲明變量」,[您可以在C中不能聲明新變量的位置](https://stackoverflow.com/questions/19058143/cant-define-variables函數調用後)和[函數調用後無法定義變量](https://stackoverflow.com/questions/19058143/cant-define-variables-after-a-function-call),應該我刪除了這個問題? – Jose

回答

4

在C89,變量必須經過在塊的開頭聲明。自C99以來,限制被刪除。

過時的編譯器Turbo C不支持此C99功能並不令人驚訝。

相關問題