筑基期—C语言
1.1 环境:
在ANSIC的任何一种是实现中,存在两种不同的环境。第一种是翻译环境,第二种是执行环境。标准明确说明这两种环境不必在同一台机器上,交叉编译器就是在一台机器上运行,但它所产生的可执行代码可以运行于不同类型的机器上。操作系统也是如此。标准同时讨论了独立环境,就是不存在操作系统的环境。你可能在嵌入式系统(如微波炉控制台)遇到这类型的环境。
1.11 翻译
翻译阶段由几个步骤组成,组成一个程序的每个(有可能多个)源文件通过编译过程分别转换为目标代码(object code)。然后,各个目标文件由链接器(linker)捆绑在一起,形成一个单一而完整的可执行程序。连接器也会同时引入标准C函数库中任何被该程序所用到的函数,而且他可以搜索程序员的个人程序库,将其需要使用的函数也链接到程序中。
编译过程本身也由几个阶段组成,首先是预处理器(preprocessor)处理。在这个阶段预处理器在源代码上执行文本操作,例如,用实际值代替由#include指令定义的符号以及读入由#inlclude指令包含的文件的内容。
然后,源代码经过解析(parse),判断它的语句意思。第二阶段是产生绝大多数错误和警告信息的地方。随后,便产生目标代码(机器指令的初步形式)。如果我们在编译程序的过程中加入了要求优化的选项,优化器(optimizer)就会对目标代码进一步进行处理,使它效率更高。
一:文件名约定
C源代码通常保存于以 .c 拓展名命名的文件中,由#include指令包含包含到c源代码的文件被称为头文件,通常有拓展名 .h。目标文件 .o(UNIX系统) .obj(dos操作系统) 。
二:编译和链接
在绝大多数UNIX系统中,c编译器被称为cc。
1. cc program.c 产生一个称为 a.out 的可执行程序。中间会产生一个 program.o 的目标文件。
2. cc main.c sort.c lookup.c 编译并链接几个c源文件
3. cc main.o lookup.o sort.c 编译一个源文件,并与它现存的目标文件链接在一起
4. cc -c program.c 编译单个源文件,并产生一个目标文件(program.o),以后再进行链接
5. cc -c main.c sort.c lookup.c 编译几个源文件,并为每个文件产生一个目标文件
6. cc main.o sort.o lookup.o 链接几个目标文件
上面那些可以产生可执行程序的命令均可以加上“-o name” 这个选项,它可以使链接器把可执行程序保存在“name”文件中,而不是“a.out”
MS-DOS命令行界面与UNIX编译器不同点:
1.它的名字是bcc
2.目标文件的名字是file.obj。
3.当单个源文件被编译并链接时,编译器并不删除目标文件。
1.1.2 执行
程序的执行也需要经历几个阶段。首先,程序必须载入到内存中。(宿主环境中)由操作系统完成,那些不是存储在堆栈中的尚未初始化的变量将在这个时候得到初始值。(独立环境),必须手工安排,也可能是通过把可执行代码置入只读内存(ROM)来完成。
然后,程序的执行便开始。调用main函数,执行程序代码,程序的终止(正常返回为main函数返回)
筑基期—C语言的更多相关文章
- C语言  ·  高精度加法
		
问题描述 输入两个整数a和b,输出这两个整数的和.a和b都不超过100位. 算法描述 由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储.对于这种问题,一般使用数组来处理. 定义一个数组A ...
 - Windows server 2012 添加中文语言包(英文转为中文)(离线)
		
Windows server 2012 添加中文语言包(英文转为中文)(离线) 相关资料: 公司环境:亚马孙aws虚拟机 英文版Windows2012 中文SQL Server2012安装包,需要安装 ...
 - iOS开发系列--Swift语言
		
概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...
 - C语言  ·  Anagrams问题
		
问题描述 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的.例如,"Unclear"和"Nuclear ...
 - C语言  ·  字符转对比
		
问题描述 给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一: 1:两个字符串长度不等.比如 Beijing 和 Hebei 2:两个字符串不仅长度相 ...
 - JAVA语言中的修饰符
		
JAVA语言中的修饰符 -----------------------------------------------01--------------------------------------- ...
 - Atitit 项目语言的选择 java c#.net  php??
		
Atitit 项目语言的选择 java c#.net php?? 1.1. 编程语言与技术,应该使用开放式的目前流行的语言趋势1 1.2. 从个人职业生涯考虑,java优先1 1.3. 从项目实际来 ...
 - 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
		
说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...
 - InstallShield 脚本语言学习笔记
		
InstallShield脚本语言是类似C语言,利用InstallShield的向导或模板都可以生成基本的脚本程序框架,可以在此基础上按自己的意愿进行修改和添加. 一.基本语法规则 ...
 
随机推荐
- log4j.properties 配置示例
			
需要的jar如下: !-- log4j --> <dependency> <groupId>log4j</groupId> <artifactId> ...
 - J2EE开发环境--RAP
			
J2EE开发环境--RAP J2EE开发环境分四步: 1.JDK环境 2.tomcat 3.redis环境 4.mysql环境 5.RAP包 线上环境,推荐使用源码,自建应用用户,设置对应规则,禁止关 ...
 - [域|Domain] The trust relationship between this workstation and the primary domain failed 此工作站和主域间的信任关系失败
			
PS> $cred = Get-Credential domain.sample.com;Reset-ComputerMachinePassword -Credential $cred -Ser ...
 - 安装matplotlib
			
1.1 Linux中安装matplotlib 如果使用的系统自带的python版本,可使用系统的包管理器安装matplotlib,命令如下: $ sudo apt-get install python ...
 - django配置连接多个数据库,自定义表名称
			
在项目tt下新建两个app,分别为app01.app02.配置app01使用default节点数据库:app02使用hvdb节点数据库(也可以配置app01下的model既使用default,也可以使 ...
 - PowerShell管理SCOM_批量设置维护模式(下)
			
#定义存储需要置为维护模式的计算机名称列表$serverlist = "C:\scomm\servers.txt"#定义RMS服务器名称$rmsServerName=”scomw. ...
 - 在虚拟机里安装linux(centos 6.5)系统
			
菜鸟一枚,也是接触linux系统没多长时间,前一阵子网上说有一个高级数据库工程师,因为rm -rf / 命令干掉了数据库-(nb),居然还跑路了!厉害了我的哥!也是闲的我蛋疼,在虚拟机里试了一批,本来 ...
 - Python学习---JSON补充内容[中文编码 + dumps解析]
			
JSON补充内容[微信解决中文乱码,接上] import json # 英文显示 dic = {"hello": "world"} str = json.dum ...
 - 在 vSphere 5.x/6.0 中配置 Network Dump Collector 服务 (2002954)
			
vmware KB: https://kb.vmware.com/s/article/2002954?lang=zh_CN 重点配置命令: 使用 vSphere Client 连接到 vCenter ...
 - Oracle判断表、列、主键是否存在的方法
			
在编写程序时,数据库结构会经常变化,所以经常需要编写一些数据库脚本,编写完成后需发往现场执行,如果已经存在或者重复执行,有些脚本会报错,所以需要判断其是否存在,现在我就把经常用到的一些判断方法和大家分 ...