程序环境和预处理(含C语言程序的编译+链接)--2

这篇具有很好参考价值的文章主要介绍了程序环境和预处理(含C语言程序的编译+链接)--2。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章前言:

上章我们把     程序的翻译环境     程序的执行环境   C语言程序的编译+链接     预定义符号介绍    预处理指令   #define    宏和函数的对比     预处理操作符    #和##的介绍  的相关知识进行了梳理讲解,接下来被把剩余知识    命令定义     预处理指令    #include   预处理指令    #undef    条件编译   的相关知识梳理讲解! 

程序环境和预处理(含C语言程序的编译+链接)--2,零基础学习C语言,c语言,开发语言,c++

 

🎉个人名片:

🐼作者简介:一名乐于分享在学习道路上收获的大二在校生
🐻‍❄个人主页🎉GOTXX
🐼个人WeChatILXOXVJE
🐼本文由GOTXX原创,首发CSDN🎉🎉🎉
🕊系列专栏:零基础学习C语言----- 数据结构的学习之路
🐓每日一句:如果没有特别幸运,那就请特别努力!🎉🎉🎉
————————————————

🎉文章简介:

本篇文章对    程序环境和预处理详解(含C语言程序的编译+链接)  的相关知识详细讲解!

如果您觉得文章不错,期待你的一键三连哦,你的鼓励是我创作动力的源泉,让我们一起加油,一起奔跑,让我们顶峰相见!!!🎉🎉🎉

续:

3.3 #undef

这条指令用于移除一个宏定义

举个栗子:

 

程序环境和预处理(含C语言程序的编译+链接)--2,零基础学习C语言,c语言,开发语言,c++

当我们加上#define MAX后再打印

程序环境和预处理(含C语言程序的编译+链接)--2,零基础学习C语言,c语言,开发语言,c++

加了#define MAX 后,MAX宏被移除

3.4 命令行定义

许多C 的编译器提供了一种能力,允许在命令行中定义符号。用于启动编译过程。
例如:当我们根据同一个源文件要编译出一个程序的不同版本的时候,这个特性有点用处。(假定某个 程序中声明了一个某个长度的数组,如果机器内存有限,我们需要一个很小的数组,但是另外一个机器 内存大些,我们需要一个数组能够大些)

举个栗子:(//linux 环境演示)

当我们写下一个这样的代码时:

程序环境和预处理(含C语言程序的编译+链接)--2,零基础学习C语言,c语言,开发语言,c++

 编译指令:

gcc test.c -D SE=10 -o test

通过-D的选项来指定SZ的值是多少,这样再编译的时候,可以改变SZ的大小,即数组大小

3.5 条件编译

在编译一个程序的时候我们如果要将一条语句(一组语句)编译或者放弃是很方便的,因为
我们有条件 编译指令
即我们可以设置一个条件,如果条件满足就编译,不满足就不编译;

常见的条件编译指令:

第一种:
程序环境和预处理(含C语言程序的编译+链接)--2,零基础学习C语言,c语言,开发语言,c++
举个栗子:

 

程序环境和预处理(含C语言程序的编译+链接)--2,零基础学习C语言,c语言,开发语言,c++

解析:

程序环境和预处理(含C语言程序的编译+链接)--2,零基础学习C语言,c语言,开发语言,c++

 运行结果:当M==1时

程序环境和预处理(含C语言程序的编译+链接)--2,零基础学习C语言,c语言,开发语言,c++

 

当M!=1时:

程序环境和预处理(含C语言程序的编译+链接)--2,零基础学习C语言,c语言,开发语言,c++

 

#if  #endif  与   if  语句的区别:

if语句时条件不满足不执行该代码,不会在预处理阶段删除,

而#if语句,条件不满足时会在预编译阶段将该语句删除;

第二种:

程序环境和预处理(含C语言程序的编译+链接)--2,零基础学习C语言,c语言,开发语言,c++

 

举个栗子:

程序环境和预处理(含C语言程序的编译+链接)--2,零基础学习C语言,c语言,开发语言,c++

 

运行结果:

程序环境和预处理(含C语言程序的编译+链接)--2,零基础学习C语言,c语言,开发语言,c++

 

第三种:

程序环境和预处理(含C语言程序的编译+链接)--2,零基础学习C语言,c语言,开发语言,c++

举个栗子:

程序环境和预处理(含C语言程序的编译+链接)--2,零基础学习C语言,c语言,开发语言,c++运行结果:

程序环境和预处理(含C语言程序的编译+链接)--2,零基础学习C语言,c语言,开发语言,c++

 

第四种:

程序环境和预处理(含C语言程序的编译+链接)--2,零基础学习C语言,c语言,开发语言,c++

 

3.6 文件包含

我们已经知道, #include 指令可以使另外一个文件被编译。就像它实际出现于 #include 指令的地方 一样
这种替换的方式很简单:
预处理器先删除这条指令,并用包含文件的内容替换
这样一个源文件被包含10次,那就实际被编译10次

3.6.1 头文件被包含的方式:

第一种:本地文件包含

程序环境和预处理(含C语言程序的编译+链接)--2,零基础学习C语言,c语言,开发语言,c++

查找策略:
先在源文件所在目录下查找,如果该头文件未找到,编译器就像查找库函数头文件一样在标
准位置查找头文件如果找不到就提示编译错误

第二种:库文件包含

程序环境和预处理(含C语言程序的编译+链接)--2,零基础学习C语言,c语言,开发语言,c++

查找头文件直接去标准路径下去查找,如果找不到就提示编译错误
库函数的包含也可以用双引号

3.6.2 嵌套文件包含

如果出现这样的场景:
程序环境和预处理(含C语言程序的编译+链接)--2,零基础学习C语言,c语言,开发语言,c++

 

comm.h和comm.c是公共模块
test1.h和test1.c使用了公共模块
test2.h和test2.c使用了公共模块
test.h和test.c使用了test1模块和test2模块
这样最终程序中就会出现两份comm.h的内容
这样就造成了文件内容的重复

 避免头文件的重复引入的方法

第一种:

条件编译:

每个头文件的开头写

#ifndef __TEST_H__
#define __TEST_H__
// 头文件的内容
#endif   //__TEST_H__
第二种:
写开头:
#pragma once

本章完~文章来源地址https://www.toymoban.com/news/detail-628436.html


到了这里,关于程序环境和预处理(含C语言程序的编译+链接)--2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言】程序环境和预处理

    本章重点 程序的编译环境 程序的执行环境 详解:C语言程序的编译加链接 预定义符号介绍 预处理指令 #define 宏和函数的对比 预处理操作符#和##的介绍 命令定义 预处理指令 #include 预处理指令 #undef 条件编译 程序的编译环境和执行环境 在ANSIC的任何一种实现中,存在两种不同

    2024年01月21日
    浏览(17)
  • 【C语言进阶】程序环境和预处理

    🔥 博客主页: 小王又困了 📚 系列专栏: C语言 🌟 人之为学,不日近则日退  ❤️ 感谢大家点赞👍收藏⭐评论✍️ 目录 一、程序的翻译环境和执行环境 二、详解编译和链接 2.1翻译环境 2.2编译的过程  2.3运行环境 三、预处理详解  3.1预定义符号  3.2#define 3.2.1 #define 定

    2024年02月15日
    浏览(15)
  • C语言--程序环境和预处理(宏)

    目录 前言 本章重点:  1. 程序的翻译环境和执行环境 2. 详解编译+链接 2.1 翻译环境​编辑 2.2 编译本身也分为几个阶段 2.3 运行环境 3. 预处理详解 3.1 预定义符号 3.2 #define 3.2.1 #define 定义标识符 3.2.2 #define 定义宏 2.2.3 #define 替换规则 3.2.4 #和##  3.2.5 带副作用的宏参数 3.2.6 宏

    2024年02月07日
    浏览(22)
  • C语言——程序环境和预处理(再也不用担心会忘记预处理的知识)

    先简单了解一下程序环境,然后详细总结翻译环境里的编译和链接,然后在总结编译预处理。 在 ANSI C 的任何一种实现中,存在两个不同的环境 翻译环境:这个环境中源代码被转换为可执行的机器指令。 执行环境:执行二进制代码。 计算机如何执行二进制指令? 我们写的C语

    2024年02月09日
    浏览(24)
  • 【C语言深入】深入理解程序的预处理过程

    我们平时所写的每一个.c文件都会经过编译和连接的过程之后才会形成一个可执行程序: 今天我们就来详细的看看编译和连接这两个过程的具体细节。 程序的翻译环境与执行环境 在ANSI C的任何一种实现中,存在两个不同的环境。 第1种是翻译环境,在这个环境中源代码被转换

    2023年04月08日
    浏览(16)
  • 015+limou+C语言深入知识——(7)编译环境和运行环境以及预处理指令

    在这个环境中,源代码被转化为可执行的机器指令(二进制指令) 单文件简易版本 多文件简易版本 编译链接详细版本 VS2022集成IDE(windows下)的编译器叫cl.exe,链接器叫link.exe gcc编译器(windows下)的几个有关编译环境的命令 (1)符号表会把全局变量和具有外部链接的函数

    2023年04月11日
    浏览(17)
  • 【C语言:编译、预处理详解】

    我们都知道,一个程序如果想运行起来要经过编译、链接然后才能生成.exe的文件。 编译⼜可以分解为三个过程: 预处理(有些书也叫预编译)、 编译 汇编 预处理阶段 主要处理那些源文件中以#开始的预编译指令。比如:#include,#define,处理的规则如下: 删除所有的注释

    2024年02月03日
    浏览(23)
  • c语言中编译过程与预处理

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 在c语言的一个项目中会有很多.c文件,这些.c文件就是源文件,组成一个程序的每个源文件通过编译过程分别转换成目标代码(object code),即每个源文件都转换为对应的目标文件,即.obj文件。 然后这些

    2024年02月11日
    浏览(16)
  • 初始C语言最后一章《编译、链接与预处理详解》

    感谢老铁们的陪伴和支持,初始C语言专栏在本章内容也是要结束了,这创作一路下来也是很不容易,如果大家对 Java 后端开发感兴趣,欢迎各位老铁来我的Java专栏!当然了,我也会更新几章C语言实现简单的数据结构!不过由于我是Java 技术栈的,所以如果以后有机会学习C

    2024年04月16日
    浏览(16)
  • 【C语言】从预处理到机器代码的C语言编译过程解析

    当我们编写一个C语言程序时,我们需要经历一个编译的过程,将源代码转换为可执行的机器代码。这个过程涉及到多个阶段和环节,每个阶段都有其特定的任务和功能。在本篇博客中,我们将详细介绍C语言的编译过程。 目录 一、预处理阶段(Preprocessing) 二、词法分析阶段

    2024年02月13日
    浏览(16)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包