运行c程序的过程和简单的c程序结构

author author     2022-10-02     685

关键词:

运行c程序的过程

编译

编译器可以将源代码转换成机器语言,在编译过程中,会找出错误并报告。这个阶段的输入是在编辑期间产生的文件,常称为源文件。

编译器能找出程序中很多无效的和无法识别的错误,包括结构错误,例如程序的某个部分永远不会执行。编译器输出的结构叫作对象代码,存放它们的文件叫作对象文件。在Linux中这些文件的扩展名通常是.o,在Windows下面这些文件的扩展名通常是.obj。如果编译成功就会生成一个文件,它与源文件同名。但扩展名为.o或者.obj

其实我们在上一节编写第一个C语言程序的时候,使用的gcc -o 1-1 1-1.c这条命令既包含了编译也包含了链接,所以直接生成了可执行文件1-1

Linux下编译是在源代码文件所在目录输入以下命令(假如源代码文件是上节课的 1-1.c):

gcc -c 1-1.c
这时源文件所在的目录将会生成1-1.o的文件。

链接

链接器将源代码文件中由编译器产生的各种对象模块组合起来,再从C语言提供的程序库中添加必要的代码模块,将它们组合成一个可执行文件。链接器也可以检测和报告错误,例如程序中引用了一个根本不存在的库组件。链接一旦成功,就会生成可执行文件,在Windows下面可执行文件的扩展名是.exe,在Linux下面,可执行文件没有扩展名,但它的文件类型是可执行的。

在编译生成 .o文件的基础上我们将会输入以下命令(以编译生成1-1.o为例):

gcc -o 1-1 1-1.o
这时1-1.o所在的目录将会生成1-1可执行文件。

多数情况下,我们是通过gcc -o 1-1 1-1.c一次性完成编译和链接。

执行

执行阶段就是成功完成了前述的三个过程后,运行程序。但是这个阶段可能会出现各种错误,包括输出错误,计算机什么也不做哦,甚至是计算机崩溃。无论如何,都需要我们返回编辑阶段,检查并修改源代码。相信大家都还记得上一节课的执行命令,在文件所在目录执行:

./1-1
创建C程序的各个过程:

技术分享图片

C语言的简单结构

预处理指令

1-1.c 的第一行代码如下:

严格地说,它不是可执行程序的一部分,但它很重要,事实上程序没有它是不能执行的。符号#表示这是一个预处理指令,告诉编译器在编译源代码之前,要先执行一些操作。编译器在编译过程开始之前的预处理阶段会处理这些指令。预处理指令的类型相当多,大多放于程序源文件的开头。

在这个例子中,编译器要将stdio.h文件的内容包含进来,这个文件被称为头文件,因为通常放在程序的开头处。在本例中,头文件定义了 C 标准库中一些函数的信息,本例要用到标准库中的printf()函数,所以必须包含 stdio.h头文件。stdio是“ standard input & output ”的缩写,包含了编译器理解printf()以及其它输入 / 输出函数所需要的信息。C语言所有头文件的扩展名都是.h。在以后的学习过程中大家会看到很多其它的预处理指令。

main()函数

int main()
{
    printf("Hello World!");
    return 0;
}

main()函数是“主函数”。每个C程序都由一个或多个函数组成,但每个C程序都必须有一个main()函数——因为每个程序总是从这个函数开始执行。

程序的几乎全部工作都是由各个函数分别完成的,函数是C程序的基本单位,在设计良好的程序中,每个函数都用来实现一个或多个特定的功能。

一个C语言程序由一个或者多个函数组成,其中必须包含一个main()函数(且只能有一个main()函数)。

一个函数包括两个部分:

一是 函数首部

即函数的第一行:

int main()

二是 函数体

即函数首部下面的花括号内的部分:

{

}

printf()函数

printf()C编译系统提供的函数库中的输出函数。printf()函数中双撇号内的字符串“Hello World!”按照原样输出,每个语句最后都有一个分号,表示语句结束。

c程序设计导引

第5章 函数5.1函数的概念和结构  先来比较两个概念:过程(procedure)、函数(function)。  过程与函数都是一组封装在一起的语句,能实现特定的功能。区别在于过程只进行某种操作,而函数会产生一个返回值。在C语... 查看详情

使用简单的 C 程序编译和运行 Java 程序

】使用简单的C程序编译和运行Java程序【英文标题】:CompileandrunJavaprogramsusingsimpleCprogram【发布时间】:2015-08-2907:52:19【问题描述】:我有这个问题:要编译和运行Java程序,我必须执行以下操作:在cmd.exe中运行命令pathC:\\ProgramFil... 查看详情

更为复杂c程序的运行时结构(代码片段)

运行环境win10企业版180917763.194,MinGWV3.1432位,BundledV3.13.2,BundledGDBV8.2。在C语言中,栈的方向是从高地址向低地址延伸,而数组中数据在栈中的存储方向与此正好相反。字符串拷贝等数组操作是不对数据长度做审核的,如果实际... 查看详情

一个c语言应用程序上机过程一般要经过哪几个步骤

运行程序步骤:1.编辑:输入源程序并存盘(.C)2.编译:将源程序翻译为目标文件(.OBJ)3.链接:将目标文件生成可执行文件(.EXE)4.运行:执行.EXE文件,得到运行结果。上机1C语言简单程序的编写和调试拓展资料:C语言是一门通用计算机... 查看详情

vb语言和c语言有啥区别?

...语言。2、c语言:仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。三、优点不同1、vb语言:具有丰富的数据类型和众多的内部函数。其采用模块化和结构化程序设计语言,结构清晰,语法简... 查看详情

c语言程序设计

...C语言中,语句是程序最基本的执行单位,以分号结尾,运行C程序的步骤和方法:1,编辑源程序2,编译3,链接,4运行5,使用visualC++2010学习版开发环境。 查看详情

c语言和c++有啥区别?

...存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。2、C++:不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。... 查看详情

c程序编译执行过程

...代码编译---->形成目标代码,目标代码是在目标机器上运行的代码。连接---->将目标代码与C函数库相连接,并将源程序所用的库代码与目标代码合并,并形成最终可执行的二进制机器代码(程序)。执行----->在特定的机器... 查看详情

c程序结构

从程序流程的角度来看,C语言中的语句可以分为3种基本结构:顺序结构、分支结构和循环结构。①顺序结构的执行过程如图5-1所示。在这种结构中,程序会顺序执行各条语句。②分支结构的执行过程如图5-2所示。在这种结构中... 查看详情

计算机二级c和c++区别

...译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一 查看详情

如何通过命令行简单的执行c程序(代码片段)

...四步:预处理——编译——汇编——链接。对于我们平时运行程序,用的编译C程序指令最多就是:gccxxx.c-oxxx,其中为了简单使用,基本上就是gccxxx.c,这个语句不管在Windows系统还是Linux系统都是,只不过需要安装g 查看详情

如何使用 Sublime Text 2 编译和运行一个简单的 C 程序?

】如何使用SublimeText2编译和运行一个简单的C程序?【英文标题】:HowtocompileandrunasimpleCprogramwithSublimeText2?【发布时间】:2012-04-2100:25:14【问题描述】:我想用GCC编译一个简单的C程序。我需要在sublime-build文件中添加什么?【问题... 查看详情

图解简单c程序的运行时结构

程序在内存中的存储分为三个区域,分别是动态数据区、静态数据区和代码区。函数存储在代码区,全局变量以及静态变量存储在静态数据区,而在程序执行的时候才会在动态数据区产生数据。程序执行的本质就是代码区的指令... 查看详情

c程序编译过程浅析

前几天看了《程序员的自我修养——链接、装载与库》中的第二章“编译和链接”,主要根据其中的内容简单总结一下C程序编译的过程吧。我现在一般都是用gcc,所以自然以GCC编译hellworld为例,简单总结如下。 hello.c源代码... 查看详情

c语言程序是如何执行的

C语言怎么运行,以linux举例:1、编写好源代码example.c;假设是放在目录/home/user/下面;2、进入/home/user/目录,编译源代码:gccexample.c-oexample,如果没有编译错误,将生成执行文件example;3、在当前目录下输入./example,就可以运行了;... 查看详情

程序相似性判断

一、问题分析基本任务:对于两个C语言的源程序清单,用哈希表的方法分别统计两程序中使用C语言关键字的情况,并最终按定量的计算结果,得出两份源程序清单的相似性。任务要求:C语言关键字的Hash表可以自建,也可以如实... 查看详情

问答题

...文件编译---->形成目标代码,目标代码是在目标机器上运行的代码。连接---->将目标代码与C函数库相连接,并将源程序所用的库代码与目标代码合并,并形成最终可执行的二进制机器代码(程序)。执行----->在特定的机器... 查看详情

c程序编译过程浅析

...:http://blog.csdn.net/koudaidai/article/details/8092647前几天看了《程序员的自我修养——链接、装载与库》中的第二章“编译和链接”,主要根据其中的内容简单总结一下C程序编译的过程吧。我现在一般都是用gcc,所以自然... 查看详情