CLion没有在main.c中找到头文件以便在外部.c文件中使用

时间:2016-01-06 11:07:57

标签: c cmake clion

所以我的情况是这样的,我有三个文件:

main.c中:

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

int main() {
    hello();
}

hello.h:

void hello();

的hello.c:

void hello() {
    printf("Hello");
}

我的Cmake文件看起来像这样:

cmake_minimum_required(VERSION 3.3)
project(test)

set(SOURCE_FILES main.c hello.c)
add_executable(test ${SOURCE_FILES})

代码运行正常。但是,CLion不能识别hello.c中的printf()函数,并希望我将其添加为头文件。有没有办法让它看到main.c文件中的#include <stdio.h>,并停止给我一个艰难的时间?

所以我通过使我的.c文件中定义的函数返回值而不是在这些函数中调用printf来解决这个问题。然后打印main.c中返回的值

1 个答案:

答案 0 :(得分:2)

hello.cmain.c是独立的编译单元,因此两者都需要#include <stdio.h>。实际上,在#include <stdio.h> main.chello.h没有做任何事情的情况下,main.chello.c中都使用了int function_X(void)

在自己编译printf时,您实际上应该看到警告。

当编译器找到它不知道的函数(尚未声明)时,它假定它具有签名int printf(char const*, ...)。因此,对于您的情况,具有git merge的{​​{1}}将是错误的。但是你很幸运,由于你的平台传递参数的方式,一切都会成功。

因此,您基本上需要转发声明函数,以确保在编译编译器时知道放置参数的位置,以便被调用的函数可以找到它。

还有更多内容,但这个简短的解释应该对初学者来说已经足够了,如果您阅读我在评论中提供的链接中的一本书,您应该能够更好地理解它。