C 头文件导致警告“ISO C 要求翻译单元包含至少一个声明”

Add*_*dem 6 c compiler-warnings qt-creator

使用 Qt Creator 我制作了这些纯 C 文件只是为了测试我的理解:

main.c

#include <stdio.h>
#include "linked.h"

int main()
{
    printf("Hello World!\n");
    printf("%d", linked());
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

linked.h

#ifndef LINKED_H_
#define LINKED_H_

int linked(void);

#endif // LINKED_H
Run Code Online (Sandbox Code Playgroud)

linked.c

int linked()
{
    return 5;
}
Run Code Online (Sandbox Code Playgroud)

所述IDE显示上的行的警告linked.h在其间#define LINKED_H_int linked(void);其读取

ISO C requires a translation unit to contain at least one declaration
Run Code Online (Sandbox Code Playgroud)

我对这意味着什么的最佳猜测是任何头文件或其他 C 文件,如果它在一个项目中,应该在主文件中的某个地方至少使用一次。我试过搜索警告,但如果在其他地方已经回答了这个问题,我就无法理解答案。在我看来,我已经使用了这个linked函数,所以它不应该给我这个警告。任何人都可以解释发生了什么?

该程序完全按预期编译和运行。

JL2*_*210 5

我认为问题在于你不#include "linked.h"linked.c. 当前linked.c文件没有任何声明;它只有一个函数定义。

要解决此问题,请将此行添加到linked.c

#include "linked.h"
Run Code Online (Sandbox Code Playgroud)

我不知道为什么它说这是一个问题linked.h,但是您指出的行号恰好是linked.c.

当然,这可能就是全部;巧合。因此,如果这不起作用,请尝试在此文件中放入某种外部声明。最简单的方法是包含一个标准头文件,例如stdio.h. 不过,我仍然建议您#include "linked.h"从内部进行linked.c