C语言的多文件编程

Porcovsky Lv3
  1. 多文件编程原理

    C++在编译多文件程序时,首先将每一个文件单独编译,然后通过链接将各个文件组合成一个可执行程序

    可以将函数的声明放到头文件中去,而在主文件中引用头文件就相当于将头文件中内容拷贝到主文件中再进行编译

    我终于把C++多文件编程理解透彻了-CSDN博客

  2. 关于头文件

    后缀为 .h 的文件,记得将其放置在条件编译预处理语句中 ,防止因为依赖关系被多次包含

​ 函数声明:显然应该放在头文件中,前面很清楚。
​ 类定义、结构定义:用函数定义的逻辑想,似乎不能放在头文件中。但它应该放在头文件。第一,每个cpp文件应该有一个定义, 在编译的时候编译器才知道怎么为对象分配空间。其次,类型定义不会在内存上分配空间。

​ 模板函数:编译器必须在编译的时候根据函数模板实例化对应的函数,所以应该放在头文件。

​ 内联函数:编译期间被插到调用位置,所以也要放在头文件。

函数定义:不要!C++规定一个程序同签名的函数只能有一个定义。如果你把函数定义放在头文件,并且同一个程序的多个cpp 文件包含了该头文件,这样,在链接的时候会发现多个定义版本,链接报错。

变量定义:不要!与上面类似,被多个文件包含的时候会出现多次定义同一个变量,链接错误。但是,static变量和extern变量 可以,以及宏定义的常量,因为这些在多个文件出现并不会出错。

  1. 使用命令行运行多文件项目

    1
    g++ main.cpp fun.cpp -o out   #列举所有要编译的文件
  2. 使用 vscode 编译多文件项目

    在安装好一众插件的 vscode 环境中,在主文件开头使用 #include “” 的方式来引入头文件和预编译文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    /*实例项目*/
    // main.c 主文件
    #include "print.h" //这个里面放所有的函数声明和库
    #include "print.c" //这里面放所有的函数定义
    int main(void)
    {
    Print(1);
    }

    //fuction.c 用来放所有函数的定义
    #include "function.h" //记得要引入头文件
    void Print(int i)
    {
    printf("%d", i+1);
    }

    //function.h 这个头文件用来声明函数,应用包
    #include <stdio.h>
    #ifndef HEAD_H //条件编译预处理语句
    #define HEAD_H

    void Print(int i);

    #endif

    最后直接在主文件中运行就可以了

  3. 使用 cmake 编译多文件项目

  4. 多文件编程中 extern 的使用

extern表示改变量是定义在其他文件中的,在多文件情况下最标准的方式是:

在 .c文件中声明变量, 在其对应的 .h 文件中使用extern声明变量,这样其他地方要用这个变量时只需要 include 一下这个 .h文件即可

注意!在.c中声明变量是可以顺便初始化值,但extern的时候就不要这么干了不然会显示重复定义!

  • 标题: C语言的多文件编程
  • 作者: Porcovsky
  • 创建于 : 2023-09-02 17:26:56
  • 更新于 : 2023-09-11 21:53:46
  • 链接: https://pocro.github.io/2023/09/02/C语言的多文件编程/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
 评论
此页目录
C语言的多文件编程