编译期间无法处理多个c文件和头文件

时间:2014-11-06 18:32:50

标签: c

我读到包含函数定义的C文件应该与头文件同名。所以,我创建了两个文件:functions.h,functions.c&最后是main.c文件,它调用在functions.c文件中定义的函数。

//functions.h file

void check(); 

我在头文件中声明了check函数

//functions.c file 

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

int main(void){
void check(){
printf("\nThis is a Test\n"); 
}
return 0; 
}

此文件包含所有函数定义。但有一件事我想清楚的是,我在stackoverflow上看到了另一个基本相同类型的问题,但在函数文件中他刚刚包含头文件和函数定义,没有main()。那个.c文件不应该抛出错误吗?

//main.c file
#include "function.h"
#include <stdio.h> 

int main(void)
{
check(); 
return 0; 
} 

当我打开终端并输入编译代码的命令时:

 clang main.c 

我收到错误:

Undefined symbols for architecture x86_64:
"_check", referenced from:
     _main in heap-22db64.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

可能是我没有编译过的functions.c文件,这就是我看到这个的原因。我只是编译main.c.我不确定这个链接错误。如果我有35个.c文件。通过命令行编译所有这些任务会更难吗?什么应该是我的approch来处理这些大项目。有多个C&amp;头文件?

2 个答案:

答案 0 :(得分:0)

这是典型情景:

// functions.c
void check(void) {
    // do stuff
}

注意:只是check的定义,没有别的。然后是标题:

// functions.h
extern void check(void);

只是声明。然后是主文件:

// main.c
#include "functions.h"

int main(int argc, char *argv[]) {
    check();
}

答案 1 :(得分:0)

当在另一个文件中提供定义时,您必须使用extern关键字指定:

functions.h

extern void check();

functions.c

void check()
{
    printf("\nThis is a Test\n");
}