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

标签 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 文件。通过命令行编译所有这些会是更困难的任务吗?我应该如何处理这些大项目?有多个 C 和头文件?

最佳答案

这是典型的场景:

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

注意:只是检查的定义,没有其他内容。然后是标题:

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

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

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

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

关于c - 编译期间无法处理多个c文件和头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26786825/

相关文章:

c - 如何在 Alpine 上编译 time.c?

c - NEON 将 vector 比较结果打包为位图

c++ - 用 Visual Studio 2005 编译 C 程序?

c - 当转换 const 指针时,c 中的 const 限定符是否被保留?

c - 简单的指针查询,初始化一个指针

c - 如何中断 gdb 中的多个 clang/ubsan 警告?

c - scanf两个整数输入,当第一个输入是某个数字并按下回车键时中断?

c - sctp_connectx() 在 FreeBSD 上给出 EINVAL

对将字符传递给函数参数时何时使用 int 类型或 char 类型感到困惑?

c - C 中后台子进程的无效命令