【C语言C++编程入门】——编译机制和语言标准!
编程机制
编写程序时必须遵循确切步骤主要是取决于你的计算机环境。因为 C语言是可以移植的,所以它在许多环境中可用,其中包括 UNIX,Linux,Windows等等 。
不过,让我们首先来看一看许多环境所共有的一些方面。你完全不必知道运行一个 C 程序后面的事情,但了解一点是一个很好的背景知识。它还可以帮助你理解为什么编写一个 C 程序必须经过一些特定步骤。
用 C 语言编写一个程序时,你将编写的内容保存在一个被称为源代码文件的文本文件中。大多数 的系统,都需要该文件的名称以 .c 结尾。
例如,hello world.c 。名称中小点前的部分被称为基本名,小点后的部分被称为扩展名。因此,hello world是一个基本名,c 是一个扩展名。组合在一起的 hello world.c是文件名。
这样,在我们提到名称时内容就可以更具体,我们假定有一个名为 helloworld.c的源文件,其源代码如下面所示。
------------------------------------------------------
#include
int main ()
{
printf("hello world! ");
return 0;
}
------------------------------------------------------
目标代码文件、可执行文件和库
C语言编程的基本策略是使用程序将源代码文件转换为可执行文件,此文件包含可以运行机器语言代码。
它分两步完成这一工作:编译和链接。编译器将源代码转换为中间代码,链接器将此中间代码与其他代码相结合生成可执行文件。
C 使用被划分为两部分的这一方法使程序便于模块化。你可分别编译各个模块,然后使用链接器将编译过的模块结合起来。这样,如果需要改变一个模块,则不必重新编译所有其他的模块。同时,链接器将你的程序与预编译的库代码结合起来。
中间文件的形式有多种选择。最一般的选择,同时也是我们这里讲述的实现方式所采取的选择,是将源代码转换为机器语言代码,将结果放置在一个目标代码文件中。虽然目标文件包含机器语言代码,但该文件还不能运行。目标文件包含源代码的转换结果,但它还不是一个完整的程序。
目标代码文件中所缺少的第一个元素是一种叫做启动代码(start-up code)的东西,此代码相当于你的程序和操作系统之间的接口。
例如,你可以在DOS或Linux下运行一个 IBM PC兼容机,在两种情况中硬件是相同的,所以会使用同样的目标代码,但DOS与Linux要使用不同的启动代码,因为这两种系统处理程序的方式是不同的。
所缺少的第二个元素是库例程的代码。几乎所有C程序都利用标准C库中所包含的例程(称为函数)。例如,前面的 concrete.c 使用了函数 printf()。目标代码文件不包含这一函数的代码,它只包含声明使用 printf()函数的指令。实际代码存储在另一个称为“库”的文件中。库文件中包含许多函数的目标代码。
链接器的作用是将【目标代码】、【系统的标准启动代码】和【库代码】这3个元素结合在一起,并将它们存放在单个文件,即可执行文件中。对库代码来说,链接器只从库中提取你所使用的函数所需要的代码,如下图中的简单示例:
简而言之,目标文件和可执行文件都是由机器语言指令组成的。但目标文件只包含你所编写的代码转换成的机器语言,而可执行文件还包含你所使用的库例程以及启动代码的机器代码。
Windows系统的集成开发环境
因为 C 编译器不是标准 Windows 包的一部分,所以需要获得并安装一个 C 编译器。许多厂商都会提供基于 Windows的集成开发环境(IDE) 。
所有编译器都具有用来装配C程序的快速,集成的开发环境。关键的一点是,它们都具有内置的编辑器,可用来编写C程序。这类开发环境一般都提供了让你可以命名和保存源代码文件的菜单,以及让你可以不离开IDE就能编译和运行程序的菜单。
如果编译器发现任何错误,会返回到编辑器中,而且编辑器可以标出有问题的行,并将它们与相应的错误消息匹配起来,例如VC6.0、QT、Visual Studio(简称vs)。
Windows IDE最初可能让人有一点望而生畏,因为它们提供多种目标,也就是说,提供了多种可让程序在其中运行的环境。
例如,它们可能提供16位Windows程序,32位Windows程序,动态链接库文件(DLL)等等让你选择。许多目标都需要引入Windows图形界面的支持。
为了管理这些选项,通常需要创建一个项目,以便随后向其中添加将要使用的源代码文件名。一般来说,首先使用文件菜单来创建一个新的项目。重要的是选取正确的项目形式。本书中的例子是一般性的例子,设计目的是在一个简单的命令行环境中运行。
因为 Widnows IDE一般可处理 C 和 C++,所以你应该指明你需要一个C程序。在某些产品,可以使用项目类型来指明希望使用 C。而在其他一些产品,如 Microsoft Visual C++中,可以使用.c文件扩展名来指明希望使用 C 而不是 C++。然而,大多数 C 程序也可以作为 C++程序运行。
可能大家在写完一个程序之后会遇到一个问题:显示程序执行的窗口在程序终止时突然消失,也就是程序运行后窗口一闪而过。如果遇到这种情况,那么可以使程序暂停,直到按下 Enter键。要做到这一点,请在程序的末尾,恰好在 return 语句之前,添加下面的一行:
getchar();
该行读取一次按键,因此程序将暂停直到按下 Enter 键时。有时,根据程序函数的需要,可能已经有一个等待按键的指令。在这种情况下,需要使用 getchar()两次:
getchar();
getchar();
例如,如果程序最后做的事情是请你输入你的体重,那么就应当键入你的体重并按 Enter 键以输入数据。程序将读取体重,第1个getchar()将读取 Enter键,第2个getchar()将导致程序暂停,直到再次按下 Enter键。如果现在你对此还不太理解,那么在学习更多关于 C 输入的知识后你就明白了。
虽然各种IDE都有许多共同的原则,但在细节方面会因产品而异,而在一个产品系列中,又会因版本而异。你必须要经过一些实践,才能知道编译器的正确工作方式。
语言标准
目前,有许多 C 实现方式可用。理想情况下,编写 C 程序时,假如该程序末使用机器特定的编程技能,则它在任何实现方式中的运行应该是相同的。要在实践中做到这一点,不同的实现方式需要遵守一个公认的标准。
首先说明一点,C语言并没有官方的标准。不过,Brian Kernighan 和 Dennis Ritchie 编写的 The C Programming Language 第1版(1978)成为大家接受的标准,通常称为 K&R C 或经典 C。
特别是这本书附录中的“C Reference Manual”已成为 C 实现的指南。例如,编译器都会声明它可提供一个完整的 K&R 实现。然而,虽然该附录定义了 C 语言,但是却没有定义 C 库。
因为 C 比大多数其他语言更加依赖库,所以还需要一个库标准。因为缺乏任何官方标准,所以提供 UNIX 实现的库成为一个事实上的标准。
第1个 ANSI/ISO C 标准
随着 C语言的发展和更加广泛地用于更多种类的系统上,使用 C 的群体意识到它需要一个更加全面,新颖和严格的标准。为了满足这一要求,美国国家标准代组织(ANSI)在1983年设立了一个委员会以发展一个新的标准,该标准于1989年正式采用。
这个新标准(ANSI C)定义了语言和一个标准 C 库。国标标准化组织于1990年采用一个 C 标准 (ISO C )。ISO C 和 ANSI C 实质上是同一个标准。
ANSI/ISO标准最终版本通常被称为 C89 (因为 ANSI于1989年批准了该标准) 或 C90(因为 ISO 于1990年批准了该标准)。然而,因为 ANSI版本是首先出现的,所以人们通常使用ANSI C这一术语。
C99标准
1994年,修订标准的工作开始了,这一努力的结果是产生了 C99标准。一个联合 ANSI/ISO委员会签署了 C90标准的最初原则,包括保持言语短小而简单。
他们的意图不是为语言添加新的特性,而是为了满足新的目标。新目标之一是支持国际化编程,例如,提供了处理国际字符集的方法。第二个目标是“整理现有的惯例以解决明显的缺点”。
因此,在遇到需要将 C 移植到 64 位处理器时,委员会根据在真实生活中处理问题的人的经验来添加标准。第三个目标是针对科学和工程项目的重要数字计算改进 C 的适应能力。
国际化,修正其不足和改进计算的实用性这三点是主要的面向改变的目标。形成在关于更改的计划在性质上更加保守,例如,让与 C90 和 C++ 的不兼容性达到最小,让语言在概念上保持简单。肩带来说就是希望 C++成为重要的和强有力的语言。
结果是 C99 的修改保持了 C 的本质特性,C 继续是一种简短,清楚,高效的语言。本书指出了 C99中的许多修改。因为目前大多数编译器没有完全实现所有 C99的修改,所以你可以会发现一些修改在你的系统上不可用。或者你可能会发现,只有修改编译器的设置以后,才能够看到一些 C99 的特性。
总结
C 是一种强大,简洁的编程语言。之所以流行是因为它提供了有用的编程工具和对硬件良好的控制,还因为 C 程序在从一个系统向另一个系统移植方面比大多数程序更容易。C 是一种需要编译的语言。C 编译器和链接器是将 C 语言源代码转换成可执行代码的程序。
用 C 编程可能很费力,困难并让你感到灰心,但这一工作也可能让你着迷,兴奋和感到满意。
看到这里是不是又有很多感悟了呢~
如果你很想学会编程,那么小编推荐我的C语言/C++编程学习基地【点击进入】!
都是学编程小伙伴们,带你入个门还是简简单单啦,一起学习,一起加油~
还有许多学习资料和视频,相信你会喜欢的!
涉及:游戏开发、常用软件开发、编程基础知识、课程设计、黑客等等......
【C语言C++编程入门】——编译机制和语言标准!的更多相关文章
- Mysql C语言API编程入门讲解
		
原文:Mysql C语言API编程入门讲解 软件开发中我们经常要访问数据库,存取数据,之前已经有网友提出让鸡啄米讲讲数据库编程的知识,本文就详细讲解如何使用Mysql的C语言API进行数据库编程. ...
 - 【C语言C++编程入门】——程序结构:构思!
		
学习编程语言的最好方法是编写程序.一般来说,初学者编写的第一个程序是一个名为"Hello World"的程序,它简单地将"Hello World"打印到你的电脑 ...
 - 【C语言C++编程入门】程序的可读性和函数的调用!
		
一个简单程序的结构 你已经看过一个具体的例子,下面可以了解一些 C程序的基本规则了. 程序由一个或多个函数组成,其中一定有一个名为 main()的函数.函数的描述由函数头和函数体组成.函数头包括预处理 ...
 - 推荐一个算法编程学习中文社区-51NOD【算法分级,支持多语言,可在线编译】
		
最近偶尔发现一个算法编程学习的论坛,刚开始有点好奇,也只是注册了一下.最近有时间好好研究了一下,的确非常赞,所以推荐给大家.功能和介绍看下面介绍吧.首页的标题很给劲,很纯粹的Coding社区....虽 ...
 - MFC编程入门之五(MFC消息映射机制概述)
		
在MFC软件开发中,界面操作或者线程之间通信都会经常用到消息,通过对消息的处理实现相应的操作.比较典型的过程是,用户操作窗口,然后有消息产生,送给窗口的消息处理函数处理,对用户的操作做出响应. 一.什 ...
 - VS2010/MFC编程入门之五(MFC消息映射机制概述)
		
VS2010/MFC编程入门之五(MFC消息映射机制概述)-软件开发-鸡啄米 http://www.jizhuomi.com/software/147.html 上一讲鸡啄米为大家简单分析了MFC应用 ...
 - Microsoft.VisualC 命名空间包含支持用 c + + 语言的代码生成和编译的类。 混合编程中使用COM接口指针
		
Microsoft.VisualC 命名空间包含支持用 c + + 语言的代码生成和编译的类. Microsoft.VisualC.StlClr Unmanaged Code 和 Managed Co ...
 - C语言编程入门之--第四章C语言基本数据类型
		
导读:C语言程序中经常涉及一些数学计算,所以要熟悉其基本的数据类型.数据类型学习起来比较枯燥,不过结合之前的内存概念,以及本节的字节概念,相信数据类型也就不难理解了.本章从二进制的基本概念开始,然 ...
 - 在VC6.0下运行C语言程序,以及编程入门必备的常识类小知识!
		
今天给大家分享在VC6.0环境下编写C语言程序的基本步骤,为初学者打开学习C语言的第一道门.具体步骤如下(如果需要软件资源,可以留言): 1)新建工作区 依次点击 文件--新建--工作区 或是Ctrl ...
 
随机推荐
- PHP的七个数组指针函数
			
1. PHP的七个数组指针函数 函数 描述 reset() 将一个数组的内部指针重置到首位,并返回第一个元素的值 end() 将一个数组的内部指针移动到数组的最后一个元素所在的位置,并返回最后一个元素 ...
 - 一文说清 InnoDB 的事务机制
			
我们从一个转账的故事开始. 隔壁小王从美团上找到了一家水饺店,准备中午吃水饺.下单成功,支付20元. 商家这里响了一下:叮叮,您有美团外卖新订单啦,请及时处理.水饺一份,好嘞,下锅. 很快小王吃到外卖 ...
 - Javaweb应用中配置错误跳转页面
			
关于在Javaweb应用中配置错误跳转页面 应用场景,比如服务器的出现404错误,我们想让它返回跳转到我们自定义的错误页面 解决方法: 主要在web.xml文件中进行配置,这里玩的错误页面都单独放在e ...
 - 高可用服务之Keepalived利用脚本实现服务的可用性检测
			
上一篇博客主要聊到了keepalived高可用LVS集群的相关配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13659428.html:keepalive ...
 - 吴恩达《深度学习》-第五门课 序列模型(Sequence Models)-第二周 自然语言处理与词嵌入(Natural Language Processing and Word Embeddings)-课程笔记
			
第二周 自然语言处理与词嵌入(Natural Language Processing and Word Embeddings) 2.1 词汇表征(Word Representation) 词汇表示,目 ...
 - Spring Cloud Alibaba微服务生态的基础实践
			
目录 一.背景 二.初识Spring Cloud Alibaba 三.Nacos的基础实践 3.1 安装Nacos并启动服务 3.2 建立微服务并向Nacos注册服务 3.3 建立微服务消费者进行服务 ...
 - 《方法总结》C路的方法发现
			
C语言方法荟萃 定义一个最大值和最小值:#define max(x,y) ( x>y?x:y ) #define min(x,y) ( x<y?x:y ) &&: 说得 ...
 - mariadb 4
			
连接查询,视图,事物,索引,外键(第四章) 连接查询 --创建学生表 create table students ( id int unsigned not null auto_increment ...
 - windows下搭建ElasticSearch
			
1.官网下载ElasticSearch,需要java环境支持 地址:https://www.elastic.co/products/elasticsearch 2.下载后解压到目录 ...
 - 【读书】Into The Air:进入空气稀薄地带
			
珠穆朗玛峰,世界第一高峰,北部在中国境内,南部在尼泊尔境内.喜欢户外运动的人,曾经在20多岁的时候曾经"大言不惭"说这一辈子一定要去一次珠峰.<Into the Air> ...