【干货】??C语言在Dev-C++下的多文件编译

  1. 文件-新建-项目
    (放在一个单独的文件夹内,加下来的源文件都放在一起)

dev 多列检索 RepositoryItemGridLookUpEdit dev多文件_源文件

  1. 选择控制台文件、C项目->给项目起个名字->确定(我写的是C语言控制台文件,根据需要 灵活选择)

dev 多列检索 RepositoryItemGridLookUpEdit dev多文件_头文件_02

  1. 现在,项目管理内是包含一个main.c源文件,就是我们最主要的代码
  2. 新建源代码,在项目中添加新单元
  3. 现在写一个包含全局变量(甚至模板结构体等等)的头文件,是最主要的头文件。
    每个模块的功能都涉及这个头文件,也就是说每个.c文件都可以#include “HEAD.h”。
    将它命名为HEAD。//有必要的话请跳过这一步,我可能有一丢丢乱
    ?类似这样?

?保存为头文件格式(*.h)

dev 多列检索 RepositoryItemGridLookUpEdit dev多文件_源文件_03

  1. 再新建功能函数的原型及头文件(注意命名一致)
    ?比如这样?
  2. 此时,在main.c中只需要包含function.h即可

    编译运行,nice!

PS:

在写博文的时候还遇到一个问题,一开始我的HEAD.h是这样写的

dev 多列检索 RepositoryItemGridLookUpEdit dev多文件_源文件_04

编译器给我报错如下:

dev 多列检索 RepositoryItemGridLookUpEdit dev多文件_源文件_05


我寻思我这不是用了ifndef吗为啥还重定义?于是上网查了原因。

度娘如是说:

1>首先声明是“declaration”,定义是“definition”;

2>不同的C文件是分别进行编译的,另一个C语言里的#define与其他C文件无关。也就是说有可能两个c文件中都是not define,导致出现了多个int i;

3>在C语言中,若是遇到多个int i,则自动认为其中一个是定义,其他的是声明;

4>#ifndef无法避免变量的重复定义,使用的目的是节省编译时间和资源,提高代码效率。

因此,在头文件中“只声明,不定义”,如果实在要写全局变量的话,就写成 extern int i。

以上。