C 语言中的多文件编程通常涉及将代码分散在几个不同的源文件(.c 文件)和头文件(.h 文件)中。这么做可以帮助你组织大型项目,提高代码的重用性,便于团队合作,分离接口和实现,以及加快编译时间。下面是一个多文件编程的基本步骤:

  1. 创建头文件: 头文件通常包含结构体定义、全局变量声明、常量定义以及函数声明(也称为函数原型)。头文件通常有 .h 后缀。

    /* file: myfunctions.h */
    #ifndef MYFUNCTIONS_H
    #define MYFUNCTIONS_H /* 函数声明 */
    void printHello(void); #endif /* MYFUNCTIONS_H */
  2. 创建源文件: 源文件包含头文件的具体实现——函数的定义。

    /* file: myfunctions.c */
    #include <stdio.h>
    #include "myfunctions.h" /* 函数定义 */
    void printHello(void){
    printf("Hello, world!\n");
    }

    注意,源文件应包括对应的头文件以及需要的标准库头文件。

  3. 创建主源文件: 主源文件通常是包含 main 函数的 .c 文件,它会调用其他源文件中的函数。

    /* file: main.c */
    #include "myfunctions.h" int main() {
    printHello();
    return 0;
    }
  4. 编译代码: 当你有多个源文件时,你需要分别编译每个文件,然后将它们链接起来。如何执行这些取决于你使用的编译器。如果使用命令行编译器例如 GCC,你可以按照以下步骤操作:

    cc -c main.c         # 编译主源文件
    cc -c myfunctions.c # 编译其他源文件
    cc -o myprogram main.o myfunctions.o # 链接目标文件并生成可执行文件

    注意,你不需要编译头文件,因为头文件已经被其对应的源文件包含。

    -c 标志告诉编译器仅编译源文件,不进行链接。这会为每个源文件生成 .o 后缀的目标文件。最后,不带 -c 的 gcc 命令将链接所有目标文件生成最终的可执行文件。

  5. 运行程序: 最后,你可以运行生成的可执行文件:

    ./program

    确保你的头文件中使用了预处理指令,如 #ifndef, #define#endif,以防止头文件重复包含。

对于更大的项目而言,你可能需要使用一个构建系统或者高级的编译工具如 make 或 CMake,以简化编译过程。这样可以使用更复杂的构建规则,并自动处理文件之间的依赖关系。

C 语言多文件编译的更多相关文章

  1. C语言-------多文件编译

    (1)前段时间,学长讲解宏的一些知识  也提起了那个多文件编译,同过看别人的博客,自己也懂了一些,现在来总结一下这个多文件编译,其实和java里面的那个class的调用好像有联系 其定义即可以理解成: ...

  2. C语言多文件编译

    fun.c #include <stdio.h> int fun1(){ printf("The first function!\n"); return 0; } in ...

  3. Ubuntu的多文件编译以及c语言的数组、函数

    闲言少叙,直接切入主题. 一.Linux下的多文件编译(Ubuntu系统). 对于小程序来说,往往一个.c文件就足够了,里面包含了各种主函数和功能函数,以及函数的声明等等.但是这样的弊端主要有两点,一 ...

  4. Linux下C语言多文件的编译以及makefile的应用

    1.关于编译和链接 一般来说,无论是C.C++,首先要把源文件编译成中间代码文件,在Windows下也就是.obj文件,UNIX下是.o文件,即Object File,这个动作叫做编译(compile ...

  5. C语言基础(15)-多文件编译

    一.头文件的使用 如果把main函数放在第一个文件中,而把自定义函数放在第二个文件中,那么就需要在第一个文件中声明函数原型.如果把函数原型包含在一个头文件里,那么就不必每次使用函数的时候都声明其原型了 ...

  6. C语言include预处理命令与多文件编译

    #include预处理命令几乎使我们在第一次接触C的时候就会碰到的预处理命令,可我现在还不怎么清楚,这次争取一次搞懂. 一.#include预处理指令的基本使用 预处理指令可以将别处的源代码内容插入到 ...

  7. C语言程序经过编译链接后形成二进制映像文件的组成

    C语言程序经过编译链接后形成二进制映像文件由栈,堆,数据段,代码段组成,其中数据段又分为:只读数据段,已经初始化读写数据段,未初始化数据段(BSS段).如下图所示: 1.栈区(stack):由编译器自 ...

  8. 窥探C语言程序的编译、链接与.h文件

    概述 C语言程序从源文件经过编译.链接生成可执行文件.那么编译与链接分别做了什么? 开发中为什么使用.h编写函数的声明?接下来使用案例说清楚为什么这样编写代码. C语言程序的编译和链接 C语言程序从源 ...

  9. 菜鸟攻略–C语言多文件编程初探(二):使用 gcc 手动编译多文件 C 程序

    step1:下载安装 Dev-C++ 已经安装了 Dev-C++ 或系统中的可以跳过这步.去官网下载 Dev-C++.我昨天下载,发现有点慢,所以我把安装文件放到百度网盘了,供大家下载,下载链接为:h ...

  10. C文件编译、链接指令

    通过mac终端 输入指令: cc -c 文件名.c 可以把C文件编译成.o文件(其实是2进制文件) 然后通过指令 cc 文件名.o 把.o文件链接C文件所需要的C语言的底层库,成为可以直接运行的lin ...

随机推荐

  1. 是什么导致了客户端TCP连不上服务器?

      这几年做了很多基于 GGTalk开源即时通讯系统 的定制开发项目,经常会碰到如下两个问题,分享出来,应该对大家会有所帮助: (1)定制开发完成后,在给客户部署GGTalk即时通讯服务端到正式的服务 ...

  2. 详解Web应用安全系列(7)使用具有已知漏洞的组件

    使用具有已知漏洞的组件,这种安全漏洞普遍存在,基于组件开发的模式使得多数开发团队根本不了解其应用或API中使用的组件,更谈不上及时更新这些组件了. 下面就分别以.NET和Java各分享一个案例. .N ...

  3. vulnhub - w1r3s.v1.0.1

    vulnhub - w1r3s.v1.0.1 高质量视频教程 - b站红队笔记 靶机下载 本地环境 本机ip:192.168.157.131 w1r3s虚拟机设置NAT模式 信息收集 扫描网段得到攻击 ...

  4. yb课堂实战之LoginInterceptor注册和放行路径 《十二》

    LoginInterceptor 拦截器注册和路径校验配置 继承WebMvcConfigurer 配置拦截路径和放行路径 InterceptorConfig.java package net.ybcl ...

  5. RS232转PN协议网关模块连接PLC和霍尼韦尔条码扫描器通信

    为了更快地输入信息,许多设备都配备了条码扫描器,但条码扫描器不能直接与CPU通信.最直接和方便的方法是加RS232转PN协议网关模块(BT-PNR20).本文将深入研究如何利用巴图自动化的RS232转 ...

  6. Github关于PAT(Personal Access Token)

    Github关于PAT(Personal Access Token) 创建个人访问令牌 您应该通过命令行或 API 创建个人访问令牌来代替密码. 注意: 如果您在命令行上使用 GitHub CLI 向 ...

  7. MFC的消息反射

    这边我用对话框来测试mfc的消息反射 当对话框初始化完成之后,点击按钮,首先相应CDialog::OnCommand其中wpARAM(低八位nId,高八位子控件句柄) 和LPARAM(句柄) OnCo ...

  8. 人工智能时代,前端全栈成就独立开发工程师 next.js 开发实战

    next  可以服务端渲染,可以客户端渲染,让前端同事更有性价比,让我们做得可以更多 由于next.js 是基础于react 所以在正式学习next.js 之前我们了解一下react 什么叫模块 ,就 ...

  9. python selenium元素定位

    1.ID元素定位基于元素属性中的id的值来进行定位,id是一个标签的唯一属性值可以通过id属性来唯一定位一个元素,是首选的元素定位方式,动态ID不做考虑.driver .find_element_by ...

  10. 家务机器人(人形机器人)—— Mobile ALOHA: Your Housekeeping Robot

    项目地址: https://mobile-aloha.github.io/ 演示视频地址: https://www.youtube.com/watch?v=HaaZ8ss-HP4 论文地址: http ...