千家信息网

C语言中预处理有什么用

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍了C语言中预处理有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。程序的翻译环境源文件被转换成可执行的机器指令时所
千家信息网最后更新 2026年11月03日C语言中预处理有什么用

这篇文章主要介绍了C语言中预处理有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

程序的翻译环境

源文件被转换成可执行的机器指令时所处的环境称为翻译环境。

由源文件(.c)转换成可执行文件(.exe)需要两步

编译通过编译器实现,链接通过链接器实现

每个源文件都会经过编译器处理后生成对应的目标文件,然后链接器将目标文件和链接库链接在一起生成可执行程序

编译和链接的具体操作

编译

编译分为预编译、编译和汇编

预编译:

1.#include<>头文件的包含,即将头文件的引用替换为函数具体的声明。

2.删除注释

3.#define,预处理操作,将define定义的替换为实际值

编译:

将C语言代码翻译为汇编代码

语法分析,词法分析,语义分析,符号汇总(函数名,全局变量)

汇编:

将汇编代码转换为二进制代码,形成符号表

链接

链接分为合并段表和符号表的合并和符号的重定位

合并段表:

目标文件都有一定的格式,分为几个段。链接器会将目标文件的相同的段里的数据合并到一起。

符号表的合并和符号的重定位:

链接器会将符号表合并为一张表,合并后当符号有冲突时,无效地址将被重新定位为有效地址,即合并后

链接操作完成后可执行程序就生成了

#define的用法

1.#define定义标识符,例如

define定义标识符时最好不要加分号";" 否则容易导致语法错误

2.#define定义宏

宏的申明方式:

#define name(parament-list) stuff 其中parament-list是由逗号隔开的符号表,可能出现在stuff中

注意:参数的左括号必须与name相邻

下面通过一些代码来看看使用宏时需要注意的问题

输出结果为11,而非36。问题出在哪呢,我们要明确函数和宏的区别,函数是传递参数的值,而宏是替换参数。#define的实质就是替换。

所以X会替换成表达式5 + 1,5+1*5+1结果显然为11。如果要改进的话在使用宏时可以多加括号,不要吝啬括号

再看另一个例子

我们发现结果依然不是我们想象那样为100,而是55。要知道不仅参数是替换,整个式子也是替换的。则DOUBLE(5)会替换成 (5) + ( 5),那么10*(5)+(5)结果为55,如果要改进的话则依然是加括号

所以记住一点,使用宏的时候要不要吝啬括号。

3.#define实现将参数插入到字符串中

实现如下 #会将X变成字符串"X"

输出结果:

hello aworld

感谢你能够认真阅读完这篇文章,希望小编分享的"C语言中预处理有什么用"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

链接 编译 符号 文件 代码 参数 括号 结果 函数 目标 篇文章 语言 预处理 源文件 环境 程序 分析 定位 吝啬 地址 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司怎么样 互联网科技有限公司经营范围 金融科技与互联网金融 宜安科技 互联网金融 友谊互联网络科技 广州善班互联网科技 互联网养老 桔豆科技 无锡溥仪互联网科技有限公司 互联网巨头投资的硬核科技 千方科技属于互联网企业吗 广州新华互联网科技学校电竞方面 恒生互联网科技业指数调整周期 半导体行业属于互联网高科技类吗 扫呗互联网科技有限公司 福建互联网展示科技馆设计 互联网科技平台产品运营 万物互联网智能科技 湖北辰鑫科技互联网 互联网大会出现的黑科技 伍佰万互联网科技是干嘛的 善班互联网科技 互联网科技热点资讯 互联网科技实习生岗位职责 国大互联网教育科技有限公司工作 华夏恒生互联网科技013171 企晟互联网信息科技有限公司 神州科技互联网有限公司 广州三三互联网科技有限公司 保山浩联互联网科技有限公司 平安好医生打造互联网科技医疗
0