《C Prime Plus》02

1. UNIX 系统

C语言因UNIX系统而生,也因此而流行,所以我们从UNIX系统开始(注意:我们提到的UNIX还包含其他系统,如FreeBSD,它是UNIX的一个分支,但是由于法律原因不使用该名称)。

UNIX C没有自己的编辑器,但是可以使用通用的UNIX编辑器,如emacs、jove、vi或X Window System文本编辑器。

作为程序员,要负责输入正确的程序和为存储该程序的文件起一个合适的文件名。如前所述,文件名应该以.c结尾。注意,UNIX区分大小写。因此,budget.c、BUDGET.c和Budget.c是3个不同但都有效的C源文件名。但是BUDGET.C是无效文件名,因为该名称的扩展名使用了大写C而不是小写c。

假设我们在vi编辑器中编写了下面的程序,并将其存储在inform.c文件中:

以上文本就是源代码,inform.c是源文件。注意,源文件是整个编译过程的开始,不是结束。

1.1 在UNIX系统上编译

编译inform.c,要输入以下命令:

cc inform.c

几秒钟后,会返回UNIX的提示,告诉用户任务已完成。如果程序编写错误,你可能会看到警告或错误消息,但我们先假设编写的程序完全正确(如果编译器报告void的错误,说明你的系统未更新成ANSI C编译器,只需删除void即可)。如果使用ls命令列出文件,会发现有一个a.out文件(见图1.5)。该文件是包含已翻译(或已编译)程序的可执行文件。要运行该文件,只需输入:

a.out

用UNIX准备C程序

输出内容如下:

 如果要存储可执行文件(a.out),应该把它重命名。否则,该文件会被下一次编译程序时生成的新a.out文件替换。

如何处理目标代码?C编译器会创建一个与源代码基本名相同的目标代码文件,但是其扩展名是.o。在该例中,目标代码文件是inform.o。然而,却找不到这个文件,因为一旦链接器生成了完整的可执行程序,就会将其删除。如果原始程序有多个源代码文件,则保留目标代码文件。学到后面多文件程序时,你会明白到这样做的好处。

1.2 GNU编译器集合和LLVM项目

GNU项目始于1987年,是一个开发大量自由UNIX软件的集合(GNU的意思是“GNU’s Not UNIX”,即GNU不是UNIX)。GNU编译器集合(也被称为GCC,其中包含GCC C编译器)是该项目的产品之一。GCC在一个指导委员会的带领下,持续不断地开发,它的C编译器紧跟C标准的改动。GCC有各种版本以适应不同的硬件平台和操作系统,包括UNIX、Linux和Windows。用gcc命令便可调用GCC C编译器。许多使用gcc的系统都用cc作为gcc的别名。

LLVM项目成为cc的另一个替代品。该项目是与编译器相关的开源软件集合,始于伊利诺伊大学2000年的研究项目。它的Clang编译器处理C代码,可以通过clang调用。有多种版本供不同的平台使用,包括Linux。2012年,Clang成为FreeBSD的默认C编译器。Clang也对最新的C标准支持得很好。

GNU和LLVM都可以使用-v选项来显示版本信息,因此各系统都使用cc别名来代替gcc或clang命令。以下组合:

cc -v

显示你所使用的编译器及其版本。

2. Linux系统

Linux是一个开源、流行、类似于UNIX的操作系统,可在不同平台(包括PC和Mac)上运行。在Linux中准备C程序与在UNIX系统中几乎一样,不同的是要使用GNU提供的GCC公共域C编译器。编译命令类似于:

注意,在安装Linux时,可选择是否安装GCC。如果之前没有安装GCC,则必须安装。通常,安装过程会将cc作为gcc的别名,因此可以在命令行中使用cc来代替gcc。

3. PC的命令行编译器

C编译器不是标准Windows软件包的一部分,因此需要从别处获取并安装C编译器。可以从互联网免费下载Cygwin和MinGW,这样便可在PC上通过命令行使用GCC编译器。Cygwin在自己的视窗运行,模仿Linux命令行环境,有一行命令提示。MinGW在Windows的命令提示模式中运行。

源代码文件应该是文本文件,不是字处理器文件(字处理器文件包含许多额外的信息,如字体和格式等)。因此,要使用文本编辑器(如,Windows Notepad)来编辑源代码。如果使用字处理器,要以文本模式另存文件。源代码文件的扩展名应该是.c。一些字处理器会为文本文件自动添加.txt扩展名。如果出现这种情况,要更改文件名,把txt替换成c。

通常,C编译器生成的中间目标代码文件的扩展名是.obj(也可能是其他扩展名)。与UNIX编译器不同,这些编译器在完成编译后通常不会删除这些中间文件。有些编译器生成带.asm扩展名的汇编语言文件,而有些编译器则使用自己特有的格式。

一些编译器在编译后会自动运行链接器,另一些要求用户手动运行链接器。在可执行文件中链接的结果是,在原始的源代码基本名后面加上.exe扩展名。例如,编译和链接concrete.c源代码文件,生成的是concrete.exe文件。可以在命令行输入基本名来运行该程序:

4. 集成开发环境(Windows)

许多供应商(包括微软、Embarcadero、Digital Mars)都提供Windows下的集成开发环境,或称为IDE(目前,大多数IDE都是C和C++结合的编译器)。可以免费下载的IDE有Microsoft Visual Studio Express和Pelles C。利用集成开发环境可以快速开发C程序。关键是,这些IDE都内置了用于编写C程序的编辑器。这类集成开发环境都提供了各种菜单(如,命名、保存源代码文件、编译程序、运行程序等),用户不用离开IDE就能顺利编写、编译和运行程序。如果编译器发现错误,会返回编辑器中,标出有错误的行号,并简单描述情况。

4.1 Microsoft Visual Studio和C标准

在Windows软件开发中,Microsoft Visual Studio及其免费版本Microsoft Visual Studio Express都久负盛名,它们与C标准的关系也很重要。然而,微软鼓励程序员从C转向C++和C#。虽然Visual Studio支持C89/90,但是到目前为止,它只选择性地支持那些在C++新特性中能找到的C标准(如,long long类型)。而且,自2012版本起,Visual Studio不再把C作为项目类型的选项。尽管如此,本书中的绝大多数程序仍可用Visual Studio来编译。在新建项目时,选择C++选项,然后选择【Win32控制台应用程序】,在应用设置中选择【空项目】。几乎所有的C程序都能与C++程序兼容。或者,在选择C++选项后,将默认的源文件扩展名.cpp替换成.c,编译器便会使用C语言的规则代替C++。

5. Windows/Linux

许多Linux发行版都可以安装在Windows系统中,以创建双系统。一些存储器会为Linux系统预留空间,以便可以启动Windows或Linux。可以在Windows系统中运行Linux程序,或在Linux系统中运行Windows程序。不能通过Windows系统访问Linux文件,但是可以通过Linux系统访问Windows文档。

        

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

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

相关文章

【运输层】网络数据报协议 UDP

目录 1、UDP 的特点 2、UDP 的首部格式 UDP 只在 IP 协议之上增加了很少的一些功能,比如复用、分用以及差错检测等。 1、UDP 的特点 UDP是无连接的,即发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延。 UDP使用尽最大努力…

基于vscode Arduino插件开发Arduino项目

基于vscode Arduino插件开发arduino项目 插件配置问题记录1. 指定编译输出文件夹2. 编译下载时不输出详细信息3. 输出端口信息乱码4. 通过串口输出中文,vscode对应的串口助手上会显示乱码(未解决) 插件配置 环境:Arduino插件版本…

苏州金龙助力旅游客运加速蜕变

近日,北京铭悦旅游客运有限公司又迎来一批苏州金龙海格纯电动客车。(以下简称北京铭悦旅游)总经理郭保生在车辆交付时说到,“为迎接强劲复苏的旅游市场,要求旅游客运向绿色客运转型,以及人民对品质生活、美…

【LeetCode热题100】51. N 皇后(回溯)

一.题目要求 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方…

4.3学习总结

[HNCTF 2022 WEEK2]Canyource(无参数) 通过这题又接触了一种无参数RCE的方法,前面学习的getallheaders只有在apache环境下才能使用,具有一定的局限性 这里是利用php函数来构造读取flag的方法 localeconv() – 函数返回一个包含本…

当Pycharm中右键运行python程序时出现Run ‘pytest in tests ***py‘,如何解决?

1、在Pycharm中右键运行python程序时出现Run pytest in tests ***py ,这是进入了Pytest模式。 2、解决办法 进入到File->Settings->Tools->Python integrated Tools页面或者快捷键(CtrlAltS) 找到Testing下的Default test runner …

Ubuntu Desktop 安装有道词典

Ubuntu Desktop 安装有道词典 1. 有道词典2. Installation2.1. 解压 deb 包到 youdao 目录2.2. 解压 deb 包中的 control 信息 (包的依赖写在该文件里面)2.3. 编辑 control 文件,删除依赖里面的 gstreamer0.10-plugins-ugly2.4. 创建 youdaobuild 目录,重…

大模型量化技术-GPTQ

大模型量化技术-GPTQ 2022年,Frantar等人发表了论文 GPTQ:Accurate Post-Training Quantization for Generative Pre-trained Transformers。 这篇论文详细介绍了一种训练后量化算法,适用于所有通用的预训练 Transformer模型,同时只有微小的性能下降。 GPTQ算法需要通过…

rocketmq的运维

1. admintool创建topic的时候 -o 的用法含义 https://rocketmq.apache.org/zh/docs/4.x/producer/03message2/ 有关orderMessageEnable和returnOrderTopicConfigToBroker的设置可以参考 https://blog.csdn.net/sdaujsj1/article/details/115741572 -c configFile通过-c命令指…

typdef:深入理解C语言中typdef关键词的用法

typedef:C语言中的类型重命名关键词 在C语言中,typedef 是一个非常有用的关键词,它允许我们为现有的数据类型定义一个新的名称。这不仅使得代码更加清晰易读,还提高了代码的可维护性。在这篇博客中,我们将深入探讨 ty…

编程生活day6--回文子串、蛇形填充数组、笨小猴、单词排序

回文子串 题目描述 给定一个字符串,输出所有长度至少为2的回文子串。 回文子串即从左往右输出和从右往左输出结果是一样的字符串,比如:abba,cccdeedccc都是回文字符串。 输入 一个字符串,由字母或数字组成。长度5…

STM32CubeMX配置步骤详解四 —— 基础配置(1)

接前一篇文章:STM32CubeMX配置步骤详解三 —— 安装 本文内容主要参考: STM32CUBEMX配置教程(一)基础配置-CSDN博客 特此致谢! 三、STM32CubeMX基础配置 前边几回讲解了STM32CubeMX的下载及安装。当前STM32CubeMX已…

LeetCode575——分糖果

题目链接:. - 力扣(LeetCode) 这道题比较简单,但我还是花费了将近四个小时的时间去解答,AC的那一刻,终于全身舒畅,这道题的思路就是先求出糖果的种数,然后我们从题中可以得出&#x…

MySQL数据库 数据库基本操作(二):表的增删查改(上)

1. CRUD CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写,就是数据库基本操作中针对表的一系列操作. 2. 新增(create) -->insert 语法: insert into 表名 [列名1,列名2…] values (val1,val2…) [注意] 列名可以没有,如果没有列名…

【Redis】Redis的使用

登录redis [roottest2 ~]# redis-cli 127.0.0.1:6379> 或[roottest2 ~]# redis-cli -h 192.168.67.12 -p 6379 192.168.67.12:6379> redis-benchmark 测试工具 redis-benchmark 是官方自带的Redis性能测试工具,可以有效的测试Redis服务的性能 基本的测试语…

C# 实现子进程跟随主进程关闭

文章目录 前言一、如何实现?1、创建作业对象(1)、创建对象(2)、设置销毁作业时,关闭拥有的进程 2、子进程加入作业对象3、销毁作业对象(1)、手动销毁(2)、所在…

从零起步:开启你的IT职业之旅

简介: 信息技术(IT)行业以其快速发展和广阔的就业前景吸引着全球众多职场新人。但对于零基础的求职者而言,挺进这一行业似乎是条充满挑战的道路。进入IT行业可能看起来是一项艰巨的挑战,尤其是对于那些没有任何相关经…

redis乱码\xac\xed\x00\x05t\x00H解决

发现数据库乱码: 这数据库是来自rdids队列list实现的一个简单队列,停止使用该list的服务,查看里面的值,发现 乱码\xac\xed\x00\x05t\x00H,如下图: 很明发送数据端的问题,检查代码: …

20240403在ubuntu20.04下解压缩gz压缩包

20240403在ubuntu20.04下解压缩gz压缩包.txt 2024/4/3 15:17 缘起:使用友善之臂FriendlyElec的NanoPi NEO Core开发板 https://wiki.friendlyelec.com/wiki/index.php/NanoPi_NEO/zh#.E8.BF.90.E8.A1.8CFriendlyCore NanoPi NEO/zh http://wiki.friendlyelec.com/w…

人工智能会拥有反思能力吗?

一、背景 人工智能是否能拥有真正的反思能力,目前仍在探索和发展之中。虽然现有的AI系统可以在一定程度上进行自我学习、自我调整和优化,但是它们的“反思”还远未达到人类意义上的深度和全面性。 传统的人工智能系统依赖于预设的算法和模型&#xff0c…