stdio.h文件错误?

时间:2017-03-09 06:41:00

标签: c compiler-errors header stdio

我正在尝试在C中编写并运行“Hello World”。

    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头文件中发现语法错误?我不明白发生了什么。

2 个答案:

答案 0 :(得分: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是指令而非声明

答案 1 :(得分:0)

C标准的第7.1.2节标准标题部分地说:

  

如果   使用时,标题应包含在任何外部声明或定义之外,并且它   应首先包括在第一次提及任何功能或对象之前   声明,或声明它定义的任何类型或宏。

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

您的代码违反了该规则 - 无需工作。不要这样做!