在C中包含源文件

Cor*_*Xii 5 c header build include

所以我得到了标题与源文件的关系.我没有得到的是编译器如何知道编译所有源文件.例:

example.h

#ifndef EXAMPLE_H
#define EXAMPLE_H

int example(int argument); // prototype

#endif
Run Code Online (Sandbox Code Playgroud)

example.c

#include "example.h"

int example(int argument)
    {
    return argument + 1; // implementation
    }
Run Code Online (Sandbox Code Playgroud)

main.c

#include "example.h"

main()
    {
    int whatever;
    whatever = example(whatever); // usage in program
    }
Run Code Online (Sandbox Code Playgroud)

编译器如何编译main.c,知道example()什么时候没有包含的实现example.c

这是某种IDE的东西,你在哪里添加文件到项目和东西?有没有办法"手动"这样做,因为我更喜欢纯文本编辑器到古怪的IDE?

Gle*_*len 9

用C或C++编译实际上分为两个独立的阶段.

  • 编译
  • 链接

编译器不知道example()的实现.它只知道有一些叫做example()的东西会在某个时候被定义.所以它只是用例如()的占位符生成代码

然后链接器出现并解析这些占位符.

要使用gcc编译代码,您需要执行以下操作

gcc -c example.c -o example.o
gcc -c main.c -o main.o
gcc example.o main.o -o myProgram
Run Code Online (Sandbox Code Playgroud)

gcc的前两次调用是编译步骤.第三个调用是链接器步骤.


Gra*_*row 5

是的,您必须告诉编译器(如果您没有使用IDE,通常通过makefile)将源文件编译成目标文件,并且编译器单独编译每个文件.然后,为链接器提供要合并到可执行文件中的目标文件列表.如果链接器正在查找函数或类定义但找不到它,则会出现链接错误.