C语言编译器(C语言编程软件)完全攻略(第二部分:与编译器相关的几个知识点)

介绍常用C语言编译器的安装、配置和使用。

二、与编译器相关的几个知识点

上节我们介绍了编译器和 IDE 的概念,大家肯定希望赶紧实践一下,用 IDE 真正地运行一段C语言代码来看看效果,这样能够更快地获得成就感。

但是,使用 IDE 的过程中会涉及到一些与编程有关的概念,这些概念如果不提前了解,即使能够运行出程序来,也是雾里看花,知其然不知其所以然。本节的目标就是让大家对这些概念有一个简单的了解。

1、源文件(Source File)

在开发软件的过程中,我们需要将编写好的代码(Code)保存到一个文件中,这样代码才不会丢失,才能够被编译器找到,才能最终变成可执行文件。这种用来保存代码的文件就叫做源文件(Source File)

每种编程语言的源文件都有特定的后缀,以方便被编译器识别,被程序员理解。源文件后缀大都根据编程语言本身的名字来命名,例如:

  • C语言源文件的后缀是.c
  • C++语言(C Plus Plus)源文件的后缀是.cpp
  • Java源文件的后缀是.java
  • Python源文件的后缀是.py
  • JavaScript源文件后置是.js

源文件其实就是纯文本文件,它的内部并没有特殊格式,能证明这一结论的典型例子是:在 Windows 下用记事本程序新建一个文本文档,并命名为demo.txt,输入一段C语言代码并保存,然后将该文件强制重命名为demo.c(后缀从.txt变成了.c,发现编译器依然能够正确识别其中的C语言代码,并顺利生成可执行文件。

源文件的后缀仅仅是为了表明该文件中保存的是某种语言的代码(例如.c文件中保存的是C语言代码),这样程序员更加容易区分,编译器也更加容易识别,它并不会导致该文件的内部格式发生改变。

C++ 是站在C语言的肩膀上发展期来的,是在C语言的基础上进行的扩展,C++ 包含了C语言的全部内容,将C语言代码放在.cpp文件中不会有错,很多初学者都是这么做的,很多大学老师也是这么教的。但是,我还是强烈建议将C语言代码放在.c文件中,这样能够更加严格地遵循C语言的语法,也能够更加清晰地了解C语言和C++的区别。

2、工程/项目(Project)

一个真正的程序(也可以说软件)往往包含多项功能,每一项功能都需要几十行甚至几千行、几万行的代码来实现,如果我们将这些代码都放到一个源文件中,那将会让人崩溃,不但源文件打开速度极慢,代码的编写和维护也将变得非常困难。

在实际开发中,程序员都是将这些代码分门别类地放到多个源文件中。除了这些成千上万行的代码,一个程序往往还要包含图片、视频、音频、控件、库(也可以说框架)等其它资源,它们也都是一个一个地文件。

为了有效地管理这些种类繁杂、数目众多的文件,我们有理由把它们都放到一个目录(文件夹)下,并且这个目录下只存放与当前程序有关的资源。实际上 IDE 也是这么做的,它会为每一个程序都创建一个专门的目录,将用到的所有文件都集中到这个目录下,并对它们进行便捷的管理,比如重命名、删除文件、编辑文件等。

这个为当前程序配备的专用文件夹,在 IDE 中也有一个专门的称呼,叫做“Project”,翻译过来就是“工程”或者“项目”。在 VC 6.0 下,这叫做一个“工程”,而在 VS 下,这又叫做一个“项目”,它们只是单词“Project”的不同翻译而已,实际上是一个概念。

3、工程类型/项目类型

“程序”是一个比较宽泛的称呼,它可以细分为很多种类,例如:

  • 有的程序不带界面,完全是“黑屏”的,只能输入一些字符或者命令,称为控制台程序(Console Application),例如 Windows 下的 cmd.exe,Linux 或 Mac OS 下的终端(Terminal)。
  • 有的程序带界面,看起来很漂亮,能够使用鼠标点击,称为GUI程序(Graphical User Interface Program),例如 QQ、迅雷、Chrome 等。
  • 有的程序不单独出现,而是作为其它程序的一个组成部分,普通用户很难接触到它们,例如静态库、动态库等。

不同的程序对应不同的工程类型(项目类型),使用 IDE 时必须选择正确的工程类型才能创建出我们想要的程序。换句话说,IDE 包含了多种工程类型,不同的工程类型会创建出不同的程序。

不同的工程类型本质上是对 IDE 中各个参数的不同设置;我们也可以创建一个空白的工程类型,然后自己去设置各种参数(不过一般不这样做)。

控制台程序对应的工程类型为“Win32控制台程序(Win32 Console Application)”,GUI程序对应的工程类型为“Win32程序(Win32 Application)”

控制台程序是 DOS 时代的产物了,它没有复杂的功能,没有漂亮的界面,只能看到一些文字,虽然枯燥无趣,也不实用,但是它非常简单,不受界面的干扰,所以适合入门,我强烈建议初学者从控制台程序学起。等大家对编程掌握的比较熟练了,能编写上百行的代码了,再慢慢过渡到GUI程序。

4、链接(Link)

上节我们讲到,源代码经过编译(Compile)后就变成了可执行文件,其实这种说法有点笼统,甚至从严格意义上来讲是错误的。源代码要经过编译(Compile)和链接(Link)两个过程才能变成可执行文件。

编译器一次只能编译一个源文件,如果当前程序包含了多个源文件,那么就需要编译多次。编译器每次编译的结果是产生一个中间文件(可以认为是一种临时文件),而不是最终的可执行文件。中间文件已经非常接近可执行文件了,它们都是二进制格式,内部结构也非常相似。

将当前程序的所有中间文件以及系统库(暂时可以理解为系统中的一些组件)组合在一起,才能形成最终的可执行文件这个组合的过程就叫做链接(Link)完成链接功能的软件叫做链接器(Linker)。

如果程序只包含了一个源文件,是不是就不需要链接了呢?不是的!

经过编译后程序虽然只有一个中间文件,不再需要和其它的中间文件组合了,但是这个唯一的中间文件还需要和系统库组合,这个过程也是链接。也就是说,不管有多少个源文件,都必须经过编译和链接两个过程才能生成可执行文件。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络故障问题一般性检查排查思路

一、基本连通性检查 在网络中ping是一个十分强大的TCP/IP工具。它可以用来检测网络的连通情况和分析网络速度、也可以ping网址根据域名得到服务器IP、同时我们根据ping返回的TTL值来判断对方所使用的操作系统及数据包经过路由器数量。 ping 网址,有几种输出情况&a…

开源项目go-admin的代码生成功能使用

go-admin代码生成功能 具体如何配置go-admin项目的可以查看首次使用go-admin进行配置启动go-admin,再看下一篇文章! 找到代码生成 先进入到界面,点击开发工具,点击代码生成 代码生成操作 1. 创建表,可以使用可视…

【RK3399 PCIE调试——硬件信息资源获取】

一、1、 硬件接口 二、2、 PCB原理图 三、 官网地址: https://t.rock-chips.com/portal.php 相关资料和固件烧写可参考资料下载菜单

Linux GDB 调试

文章目录 一、Qemu二、Gdbvscode 调试 三、RootFs 一、Qemu qemu 虚拟机 Linux内核学习 Linux 内核调试 一:概述 Linux 内核调试 二:ubuntu20.04安装qemu Linux 内核调试 三:《QEMU ARM guest support》翻译 Linux 内核调试 四:…

半导体Memory的分类

文章目录 略图introRAM & ROM 略图 intro 存储器是嵌入式系统中用于存放数据和程序的模块。有些存储器是MCU内置的,有些是扩展的。 存储器嵌入式系统中常见且重要的外设模块。搞清楚存储器的分类是从事嵌入式开发工作的一项基本功。 从功能上,存储器…

利用小红书笔记详情API:为内容运营提供强大的支持

利用小红书笔记详情API,内容运营者可以获得对小红书平台上的笔记内容的深入洞察,从而为其运营工作提供强大的支持。以下是该API如何支持内容运营的几个关键方面: 获取笔记内容与数据: API允许内容运营者直接获取小红书平台上的笔记…

视频号小店开店需要准备什么资料?

我是电商珠珠 很多想要开通视频号小店的新手并不知道开通视频号小店需要准备什么资料。 今天我就来给大家详细的讲一下。 视频号小店分为三种类型,一种是普通企业店,一种是个体工商店,还有一种是品牌企业店。 先来说说普通企业店 1、营业…

面向对象编程(高级)

面向对象编程(高级) 1、类变量和类方法 (1) 概念 类变量,也称为静态变量,是指在类级别声明的变量。它们与特定类相关联,而不是与类的实例(对象)相关联。每个类变量只有…

【docker】cgroups资源限制

目录 一、cpu资源控制 1、 设置cpu使用率上限 2、设置cpu资源占用比(设置多个容器时才有效)Docker通过–cpu-shares指定cpu份额,默认为1024,值为1024的倍数。 3、设置容器绑定指定的CPU 三、内存资源控制 四、磁盘IO配额控制…

恭喜 Databend 上榜 2023 开源创新榜「优秀开源项目 」

近日,国家科技传播中心见证了一场开源界的重要事件:由中国科协科学技术传播中心、中国计算机学会、中国通信学会和中国科学院软件研究所联合主办,CSDN 承办的 2023 年开源创新榜专家评审会圆满落幕。由王怀民院士担任评委会主任,评…

MR实战:词频统计

文章目录 一、实战概述二、提出任务三、完成任务(一)准备数据1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录 (二)实现步骤1、创建Maven项目2、添加相关依赖3、创建日志属性文件4、创建词频统计映射器类5、创建词频统计归并…

如何搭建HomeAssistant智能家居管理平台并实现公网访问内网管理界面

目录 前言 一、下载HomeAssistant镜像 二、内网穿透HomeAssistant,实现异地控制智能家居 三、使用固定域名访问HomeAssistant 结语 前言 作者简介: 懒大王敲代码,计算机专业应届生 今天给大家聊聊如何搭建HomeAssistant智能家居管理平台…

数据结构之哈希——学习笔记

今天看网课学习了哈希的数据结构,写下这一篇博客记录自己的学习过程。 1.哈希简介: 我们发现某些时候映射到小集合的时候会同时有多个值映射到一个下标里面,所以接下来是这种情况的解决方案1: 我们考虑当两个数字映射之后的结果…

Python startswith()和endswith()方法及 index()方法:检测字符串中是否包含某子串

Python startswith()和endswith()方法 Python 字符串变量还可以使用 startswith() 和endswith() 方法。 startswith()方法 startswith() 方法用于检索字符串是否以指定字符串开头,如果是返回 True;反之返回 False。此方法的语法格式如下: …

向日葵远程工具的使用Mysql5.7的安装与配置

目录 一、向日葵远程安装与使用 二、Mysql 5.7 安装与配置 2.1 安装 2.2 Navicat Premium 12 测试连接 本机测试连接 外部访问MySQL测试连接 三、思维导图 一、向日葵远程安装与使用 简介: 向日葵远程控制是一款用于对远程PC进行管理和服务的软件,拥有5秒快速…

isEmpty 和 isBlank 的用法区别,居然一半的人答不上来.....

isEmpty 和 isBlank 的用法区别 isEmpty系列isBank系列 hi!我是沁禹~ 也许你两个都不知道,也许你除了isEmpty/isNotEmpty/isNotBlank/isBlank外,并不知道还有isAnyEmpty/isNoneEmpty/isAnyBlank/isNoneBlank的存在, come on ,让我们一起来探索org.apache…

网络调试 TCP,开发板用静态地址-入门4

用两台电脑(无线网络)做实验 1.1, 在电脑A上设置为Server如下: 选择TCP Server后,直接跳出用本机IP做为“本地主机地址” 1.2在 电脑B上设置为Client, 远程主机地址设置为Server的 IP 1.3, 在A, B两台电脑上能够互相发送数据 用…

[C语言]程序设计(四)

大家好,这里是争做图书馆扫地僧的小白。非常感谢各位的支持,也期待着您的关注。 目前博主有着C语言、C、linux以及数据结构的专栏,内容正在逐步的更新。 希望对各位朋友有所帮助同时也期望可以得到各位的支持,有任何问题欢迎私信与…

架构(1)

目录 1.如何理解架构的演进? 2.如何理解架构的服务化趋势? 3.架构中有哪些技术点? 4.谈谈架构中的缓存应用? 5.在开发中缓存具体如何实现? 1.如何理解架构的演进? 初始阶段的网站架构应用服务和数据服…

OpenAI ChatGPT-4开发笔记2024-02:Chat之text completion

API而已 大模型封装在库里,库放在服务器上,服务器放在微软的云上。我们能做的,仅仅是通过API这个小小的缝隙,窥探ai的奥妙。从程序员的角度而言,水平的高低,就体现在对openai的这几个api的理解程度上。 申…