C语言基础—程序创建过程和编译过程

news2024/9/23 11:17:04

C程序的创建过程 4️⃣

  • C 程序的创建过程有4️⃣个基本步骤:

编写、编译、链接和运行。

  • 编写:用文本编辑器或IDE编写源代码。源代码包含程序所需的所有命令和语句。
  • 编译:使用编译器对源代码进行编译,生成可执行文件。 - .o 文件\ .obj
  • 链接:使用链接器将可执行文件与其他相关文件进行链接,生成完整的可执行程序。-exe文件
  • 执行:运行程序来执行相应的任务。

流程图如下:

Alt----

C程序的编译过程 3️⃣

  • 编译是指将源代码转换为可执行文件(.obj)的过程。

在C语言中,编译过程包括3️⃣个步骤:预处理、编译和汇编

  • 预处理: 是指处理源代码中的预处理指令,如宏定义( #include) 和文件包含(头文件)。预处理器会执行这些指令,生成新的源代码文件。

  • 编译 :是指将预处理后的源代码转换为汇编代码的过程。编译器会检查源代码的语法和语义,并生成相应的汇编代码。

  • 汇编 :是指将汇编代码转换为机器代码的过程。汇编器会根据汇编代码中的指令和操作数,生成机器代码(0101),这些代码可以直接在计算机处理器上运行。

  • 最终,编译器会将机器代码和其他必要的文件打包成一个可执行文件。 这个文件就是编译后的可执行程序 (.obj)。


流程图:

Alt


预处理指令 (#)

预处理指令是C语言中特殊的命令,它们用来在程序编译前对源代码进行处理。预处理指令以 # 开头,通常位于源代码的开头或包含文件中。

常用的预处理指令包括:

#define:定义宏。
#include:包含文件。
#if:条件编译。
#error:生成错误消息。
#pragma:提供编译器特定的指令。

预处理指令的作用是提高源代码的可读性和可维护性并提供一些额外的功能。

例如,

  • 可以使用预处理指令来定义常量,方便在程序中多次使用。
  • 可以使用预处理指令来包含其他文件,方便管理和维护源代码。
  • 可以使用预处理指令来条件编译,实现不同平台或编译器之间的差异。

举例:咱们C语言程序常用的开头的#include <stdio.h>

#include 是C语言中的预处理指令,用于在程序编译时包含指定的文件。在 #include 指令中,可以使用尖括号 <> 或引号 “” 来指定要包含的文件。

#include <stdio.h> 指令会在编译时包含 stdio.h 头文件,这个文件包含了标准输入输出库的声明和定义。使用这个指令后,程序就可以使用标准输入输出库提供的函数,如 printf() 和 scanf()

❗️include <> 和 “” 区别

🤨 尖括号 <> 和引号 “” 的区别在于,前者表示要包含的文件位于编译器的默认搜索路径中,而后者表示要包含的文件位于程序文件所在的目录或指定的搜索路径中。也就是""先搜索当前目录的,如果找不到文件回到编译器的默认搜索路径重新搜索。

  • 例如,#include “myheader.h” 指令会在编译时包含名为 myheader.h 的头文件。优先搜索当前目录的,如果找不到文件回到编译器的默认搜索路径重新搜索。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/79359.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

gyp ERR find Python 解决方案

命令行报错如下 E:\vue-admin\node_modules\fibers>if not defined npm_config_node_gyp (node "D:\nodejs\node_modules\npm\node_modules\npm-lifecycle\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild --releas e ) else (node "…

Java项目:SSM物流快递管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 仓库管理员角色包含以下功能&#xff1a; 仓库管理员操作,入库操作,员工查看,揽收快件,新建员工等功能。 快递员角色包含以下功能&#xff1a; …

Nacos服务注册解析

服务注册就是在微服务启动时自动注册进nacos注册中心&#xff0c;核心逻辑就是在启动时调用nacos-server端的http接口:/nacos/v1/ns/instance&#xff0c;具体参考nacos官方文档。 我们打开nacos源码结构查看 上图为Nacos2.2的源码结构.其中比较核心的就是这几个包&#xff1…

墨者学院 PHP代码分析溯源(第4题) 详解

今天继续给大家介绍CTF通关writeup&#xff0c;本文主要内容是墨者学院 PHP代码分析溯源(第4题)。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xff1a;严…

尝试使用CubeMX做stm32开发之十四:FatFs的基础知识

一、文件系统概念 文件系统&#xff1a;在存储介质中建立一种组织架构&#xff0c;以更好地储存和管理数据 文件系统一般包含&#xff1a;操作系统引导区、目录、文件等 文件系统中数据以文件的形式存储 文件系统中数据的存取需要遵循特定的格式 与直接操作存储介质相比&a…

[附源码]计算机毕业设计基于SpringBt的演唱会购票系统论文2022Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

C++ MySQL Error 1366 incorrect string value引发的认识

C MySQL Error 1366 incorrect string value引发的认识 前言 在使用MySQL C API编写程序时&#xff0c;由于用到了中文&#xff0c;导致出现了MySQL error 1366 incorrect string value 问题&#xff0c;但令我同样不解的是我用同样的语句在cmd下可以正常执行。&#xff08;M…

【算法】动态规划 ⑤ ( LeetCode 63.不同路径 II | 问题分析 | 动态规划算法设计 | 代码示例 )

文章目录一、问题分析二、动态规划算法设计1、动态规划状态 State2、动态规划初始化 Initialize3、动态规划方程 Function4、动态规划答案 Answer三、代码示例LeetCode 63. 不同路径 II : https://leetcode.cn/problems/unique-paths-ii/ 一个机器人位于一个 m x n 网格的左上…

java初步学习 String(基于小李的课进行自学,初学者)12

初步学习 String 基本概念 String类型即为字符串类型&#xff0c;即“103”&#xff0c;“abc”,"小陈"等字符类型&#xff0c;在工作中可用于加密&#xff0c;替换&#xff0c;截取&#xff0c;查找等工作 不过这种名词显然不能联想到工作的实际样子 例&#xff1a;…

[附源码]Python计算机毕业设计SSM基于框架的旅游订票系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

IIS 之 添加MIME扩展类型及HTTP错误403

IIS 之 添加MIME扩展类型及HTTP错误403 我是艾西今天跟大家分享下IIS添加MIME及HTTP报错403 经常用IIS作为下载服务器的时候有时传上去的文件比如 example.mp4 文件名上传后&#xff0c;但是用http打开的时候确显示为 404 文件不存在。其实是IIS对文件的一种保护&#xff0c;…

基于java+springboot+mybatis+vue+mysql的校园志愿者管理系统

项目介绍 本校园志愿者管理系统以springboot作为框架&#xff0c;前端vue技术&#xff0c;b/s模式以及mysql作为后台运行的数据库&#xff0c;同时使用Tomcat用为系统的服务器。本系统主要包括首页、个人中心、志愿者管理、活动类型管理、活动信息管理、活动报名管理、活动通知…

游戏开发49课 性能优化7

4. 渲染优化 渲染优化的目的是减少Draw Calls&#xff0c;减少渲染状态切换开销&#xff0c;降低显存占用&#xff0c;降低带宽和GPU负担。在讲解渲染优化之前&#xff0c;先了解渲染性能消耗点。 Draw Call数量 Draw Call有些引擎也称为SetPass Call。一个Draw Call就是游戏调…

叫ChatGPT用html+css+js写一个圣诞节代码,看看什么样子?

最近ChatGPT这么火&#xff0c;那就让他给我写点代码吧。 如何注册一个账号&#xff0c;参考&#xff1a;注册ChatGPT详细指南 注册不了的小伙伴们&#xff0c;咱们评论区见&#xff0c;问一个最想问的问题&#xff0c;看到就给你回复&#xff01; 我已经注册好了&#xff0c;…

代码随想录算法训练营第五十九天|503.下一个更大元素II、42. 接雨水

LeetCode 503.下一个更大元素II 链接&#xff1a;503.下一个更大元素II 思路&#xff1a; 本题其实和739. 每日温度更像一点&#xff0c;因为本题只有一个数组&#xff0c;而在下一个更大元素I中有两个&#xff0c;因此必须要一个哈希表来在另一个数组中查找相对应的数字。除…

yolov5检测结果不显示

安装完yolov5后&#xff0c;运行各种正常&#xff0c;后台也能显示识别信息&#xff0c;像这样。 而且在runs/detect/exp4文件夹中也会有正确的标识 但是我也想能在前台实时显示&#xff0c;像这样。 折腾了一个晚上也没有搞的定&#xff0c;甚至一度以为&#xff0c;是因为CPU…

SSM甜品店系统计算机专业毕业论文java毕业设计开题报告

&#x1f496;&#x1f496;更多项目资源&#xff0c;最下方联系我们✨✨✨✨✨✨ 目录 Java项目介绍 资料获取 Java项目介绍 计算机毕业设计java毕设之SSM甜品店系统-IT实战营_哔哩哔哩_bilibili项目资料网址: http://itzygogogo.com软件下载地址:http://itzygogogo.com/i…

【MindStudio训练营第一期】【昇腾AI训练营新手班学习笔记】可视化流程编排

准备 配置环境理解Python代码部分mxVision用户指南一份 步骤 案例的流程图&#xff1a; 图像输入和图像预处理 图像输入&#xff08;appsrc插件&#xff09; 通过python open和read到的图片数据&#xff0c;用SendData方法传入stream中&#xff0c;appsrc将数据发送给下游元…

《操作系统》期末考试卷3参考答案

《操作系统》期末考试卷&#xff08;第3套&#xff09; 参考答案与评分标准 一、单项选择题&#xff08;共10题&#xff0c;每题2分&#xff0c;共20分&#xff09; 题号 1 2 3 4 5 6 7 8 9 10 答案 D D C A C B A A B A 二、填空题&#xff08;共8题&#xff0c;每空1分&…

Java学习之toString方法

目录 toString方法的功能 Object类的toString方法 源代码 子类没有重写的案例 子类重写toString 使用AltInsert自动重写 输出结果 最后一条 例子 toString方法的功能 返回该对象的字符串表示。默认返回&#xff1a;全类名&#xff08;包名类名&#xff09;哈希值的十六进…