news 2026/8/11 19:46:16

朝花夕拾 · C语言 | 多文件篇

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
朝花夕拾 · C语言 | 多文件篇

全局变量使用:

1.在源文件中定义全局变量;

2.如果只是在定义该全局变量的文件中使用该全局变量,可以不声明;

3.如果要在一个外部的源文件中使用该全局变量,则该变量必须被声明;

4.在对应的头文件中加extern关键字声明,头文件中全局变量只能声明不能初始化,定义应在.c文件

在头文件的声明里,函数默认为extern,编译器会自动加上。

  1. 预处理阶段(只认#include
    预处理器看到#include "ji.h",把ji.h里的int get_ji(int num1, int num2);复制过来。看到#include "shang.h",把shang.h里的声明复制过来。
    此时,main.c里只有“声明”(知道有这两个函数),但没有“定义”(不知道这两个函数具体怎么算)。

  2. 编译 + 链接阶段(关键区别)
    如果只输入gcc main.c,编译器会报错:undefined reference to 'get_ji'undefined reference to 'get_shang'。因为编译器只编译了main.c,找不到get_jiget_shang的具体代码(定义)。头文件只是“承诺”这些函数存在,但真正的“兑现”需要靠链接器把对应的.c文件编译结果合并进来。

Makefile:管理代码工程的编译和链接,由make工具进行解释,实现一键化工程的编译和链接。

文件:Makefile/makefile(文件/脚本)

语法:

目标文件:依赖文件

编译规则

目标文件:a.out

依赖文件(生成目标文件所依赖的源文件):main.c sum.c sub.c ......

编译规则:gcc main.c sub.c sum.c ( -o a.out)

编译代码:make

Makefile中的变量:

1.自定义变量

OBJ = a.out //定义Makefile的变量OBJ,并为其赋值 SRC = main.c sum.c sub.c == SRC += main.c SRC += sum.c SRC += sub.c CC = gcc INCLUDE = ../include //include"xxx"双引号里的内容只能在当前路径下访问,所以使用-I指明头文件路径 LIBS = ../lib $(OBJ) :$(SRC) //变量的引用:$() $(CC) $(SRC) -o$@ -I$(INCLUDE) -L$(LIBS) -lm //-o $(OBJ) 给自定义变量起名 //-I头文件路径 -L指定库的位置 //-lm链接数学库 == a.out: main.c sum.c sub.c gcc main.c sub.c sum.c 自定义伪代码: clean: rm $(OBJ) //表示clean实现移除文件功能 //用 make clean调用

=:给变量赋值

+=:在原变量值的基础上再增加新增

?=: 若变量之前没有被赋值则赋值,若之前被赋过值则保留原值

2.系统变量

可直接使用:

$@:表示目标文件

$^ :表示所有依赖文件

$<:表示第一个依赖文件

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/11 19:37:58

燃气门站报警记录被静默篡改,透明加密怎么做到不停机、不改代码

一个问题&#xff1a;明文报警记录&#xff0c;谁能改、怎么防 某城燃集团 18 座门站/分输站的 SCADA 数据统一汇入集团监测数据库&#xff0c;一次内部安全检查发现&#xff1a;泄漏报警记录是明文存的——任何一个能连上数据库的人都能直接查看&#xff0c;甚至改掉一条报警记…

作者头像 李华
网站建设 2026/8/11 19:37:26

Visual Studio Dump文件生成与分析实战:从崩溃黑匣子到问题定位

1. 项目概述&#xff1a;为什么我们需要Dump文件&#xff1f;在软件开发&#xff0c;尤其是C、C#这类原生或托管代码的开发中&#xff0c;最让人头疼的问题莫过于程序在生产环境或测试环境中突然崩溃&#xff0c;留下一句“程序已停止工作”或者干脆悄无声息地退出。在开发者的…

作者头像 李华
网站建设 2026/8/11 19:36:36

大数据时代,谁来守护你的“数字隐私”?

大数据让生活更智能&#xff0c;也让个人隐私更脆弱。如何在享受便利的同时守住隐私边界&#xff0c;已成为全社会必须面对的课题。 政策加码&#xff0c;企业跟进 近日&#xff0c;中央网信办、工信部、公安部、国家标准委等四部门完成对10款网络产品的隐私条款评审。京东、支…

作者头像 李华
网站建设 2026/8/11 19:34:39

STM32CubeIDE_1.19.0_安装及STM32H745I固件包配置教程

STM32CubeIDE 1.19.0 安装及 STM32H745I 固件包配置教程 本教程详细介绍如何在 Windows 系统上下载安装 STM32CubeIDE 1.19.0&#xff0c;并配置 STM32H745I&#xff08;STM32H7 系列&#xff09;芯片固件包&#xff0c;从零搭建完整的 STM32H7 双核开发环境。 这个IDE编辑器和…

作者头像 李华
网站建设 2026/8/11 19:34:16

告别复杂HTTP操作!requests库POST请求实战指南

告别复杂HTTP操作&#xff01;requests库POST请求实战指南 【免费下载链接】requests A golang HTTP client library. Salute to python requests. 项目地址: https://gitcode.com/gh_mirrors/requests2/requests 在Go语言开发中&#xff0c;处理HTTP请求往往需要编写大…

作者头像 李华