使用放置在另一个目录中的另一个 C 文件中的函数?

Adi*_*idu 5 c linker compilation

假设我有一个带有两个子目录 B 和 C 的父目录 A。

子目录 C 有 helper.c 和 helper.h,如图:

//helper.c

 void print(){
     printf("Hello, World!\n");
 }


//helper.h

void print();
Run Code Online (Sandbox Code Playgroud)

现在,在子目录 B 中,我有一个 main.c,它只调用打印函数:

//main.c

#include<stdio.h>
#include"../C/helper.h"

void main(){
    print(); 

}
Run Code Online (Sandbox Code Playgroud)

我尝试了以下命令来编译 main.c:

Command 1: gcc main.c  //Gives undefined reference to 'print' error
Command 2: gcc main.c ../C/helper.c   //Compiles successfully
Run Code Online (Sandbox Code Playgroud)

现在我从 main .c 中删除了 #include"../C/helper.h" 并再次尝试命令 2。它仍然有效。

所以我有以下问题:

i) 是否包含 helper.h 文件或 helper.c 有什么区别?

ii) 为什么命令 1 失败?

iii) 有没有办法编译我的 C 程序而不必每次都指定 helper.c?

Ami*_*der 0

我来尝试回答一下:

i) 包含 helper.h 文件还是包含 helper.c 文件有什么区别?

当您包含文件时,您不想公开您的实现,因此最好包含h仅包含“签名”的文件 - 您的实现的 api。

ii) 为什么命令 1 失败?

编译时必须将所有资源添加到可执行文件中,否则他将无法编译。

iii) 有没有一种方法可以编译我的 C 程序而不必每次都指定 helper.c?

  • 您可以使用它Makefile来编译您的程序。也许教程可以帮助您。