2017-03-09 45 views
-2

我想用C編寫和運行「Hello World」的stdio.h文件錯誤?

int main(int argc, char *argv[]) 
{ 
    #include <stdio.h> 
    puts("Hello world."); 

    return 0; 
} 

不過,我不斷收到以下錯誤在終端:

In file included from ex.c:3: 
/usr/include/stdio.h:353:54: error: function definition is not allowed here 
__header_always_inline int __sputc(int _c, FILE *_p) { 
                ^
1 error generated. 

在我看來,它撿stdio頭文件中的語法錯誤?我不明白髮生了什麼事。

+1

錯誤出現在您編寫的代碼中。標準庫標題旨在包含在**文件範圍**中。 – StoryTeller

+0

'#include '移到'main'之前。定義嵌套函數的錯誤。 – BLUEPIXY

+0

_「在我看來,它正在拾取stdio頭文件中的語法錯誤」_...現在,這是... D –

回答

1

你想要做這樣的事情:

#include <stdio.h> 

int main(void) 
{ 
    puts("Hello world."); 
    return 0; 
} 

#include指令應該幾乎永遠是第一位在您的文件。當您編寫#include <some_file>時,您告訴預處理器基本上將some_file中的所有文本複製到您的程序中。例如,<stdio.h>包含puts函數聲明。通過在文件中包含<stdio.h>作爲第一件事,您可以告訴編譯器關於puts,以便稍後使用它。

編輯:感謝@Olaf對指出的#include是C標準的指令,而不是一份聲明中

+0

注意:#include不是語句,而是預處理器指令。您不得在文件級別擁有語句。 – Olaf

+0

固定。感謝您指出! – Zexus

0

7.1.2節標準頭說,部分:

如果使用 ,則標題應包含在任何外部聲明或定義之外,並且它應首先包含在聲明的任何函數或對象的第一個引用之前,或者包含任何類型或ma cros定義。

這意味着您不允許在函數體內包含任何標準頭文件。

您的代碼違反了該規則 - 它不是必需的。不要這樣做!