2017-07-27 28 views
2

我是編程的noob。 我的老師編譯了一個沒有任何預處理指令的程序,它執行並顯示輸出。 這只是一個你好世界計劃。 我很困惑,沒有指令如何能夠執行「printf」功能。程序編譯並執行無頭文件turbo C++

+0

爲什麼不呢?你需要什麼預處理器?實際的編譯階段編譯文件時沒有任何預處理器東西 –

+0

'printf'?所以老師實際上使用了'printf'。 – AnT

回答

3

在「經典」ANSI C(C89/90)中,只要您仔細地提供適當類型的參數,就可以在不預先聲明它們的情況下調用非可變函數。所以,如果一個人做得正確,可以編寫一個不包含任何標準頭文件的正式有效的C89/90程序。例如。

int main() 
{ 
    puts("Hello World"); 
    return 0; 
} 

在現代C這是不可能的,因爲從C99開始的所有功能都被調用之前聲明。現在

,主叫printf甚至沒有在C89/90的預聲明它(與原型)造成未定義的行爲,因爲printf是一個可變參數函數。所以,如果你的老師做了這樣的事情

int main() 
{ 
    printf("Hello World\n"); 
    return 0; 
} 

,那麼他/她仍然有很多東西需要學習有關C.這C89/90程序是無效的,即使它編譯,執行和顯示輸出「看着罰款「給你。

但是,你仍然可以預先聲明函數手動

​int printf(const char *format, ...);​ 

int main() 
{ 
    printf("Hello World\n"); 
    return 0; 
} 

,並與不使用任何預處理指令有效的C89/90的程序結束。雖然這樣做並不是一個好的編程習慣。

+0

我在TurboC++上試過了你的「puts」代碼,但是它顯示了一個錯誤,說明了puts必須有一個原型。 –

+0

@AlphaMineron首先,您必須確保您將代碼編譯爲C,而不是C++。其次,它必須是「舊」C-C89/90。 – AnT

+0

哦,我明白了............ –