如何将单片程序拆分为较小的单独文件?

use*_*326 10 c

在我在网上看到的所有代码中,程序总是分解成许多较小的文件.对于我在学校的所有项目,我已经得到了一个巨大的C源文件,其中包含我使用的所有结构和函数.

我想要学习的是将程序拆分成较小的文件,这似乎是专业的标准.(顺便说一下,为什么这只是为了方便阅读?)

我四处搜索,我所能找到的信息都是构建库,这不是我想做的事情,我不认为.我希望我能提供更多帮助,但我不完全确定如何实现这一点 - 我只确定我想要的最终产品.

zmo*_*zmo 9

那么,这正是你想要的:将你的代码分成几个库!

让我们举一个例子,你有一个文件:

#include <stdio.h>

int something() {
    return 42;
}

int bar() {
    return something();
}

void foo(int i) {
    printf("do something with %d\n", i);
}

int main() {
    foo(bar());
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

你可以把它拆分为:

mylib.h:

#ifndef __MYLIB_H__
#define __MYLIB_H__

#include <stdio.h>

int bar();
void foo();

#endif
Run Code Online (Sandbox Code Playgroud)

注意:上面的预处理器代码称为"guard",用于不运行此头文件两次,因此您可以在多个位置调用相同的include,并且没有编译错误

mylib.c:

#include <mylib.h>

int something() {
    return 42;
}

int bar() {
    return something();
}

void foo(int i) {
    printf("do something with %d\n", i);
}
Run Code Online (Sandbox Code Playgroud)

myprog.c中:

#include <mylib.h>
int main() {
    foo(bar());
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译它你做:

gcc -c mylib.c -I./
gcc -o myprog myprog.c -I./ mylib.o
Run Code Online (Sandbox Code Playgroud)

现在的优势?

  1. 它使您能够逻辑地拆分代码,然后更快地找到代码单元
  2. 它使您能够拆分编译,并仅重新编译修改内容时所需的内容(这是Makefile为您所做的)
  3. 它使您能够公开一些功能并隐藏其他功能(例如上面示例中的"something()"),它有助于为将要读取您的代码的人(如您的老师)记录您的API;)