2017-03-09 44 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定义。

这意味着您不允许在函数体内包含任何标准头文件。

您的代码违反了该规则 - 它不是必需的。不要这样做!