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

运行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!”按照原样输出,每个语句最后都有一个分号,表示语句结束。

时间: 2024-11-10 00:37:12

运行c程序的过程和简单的c程序结构的相关文章

一个简单的jsp程序

<%@ page contentType="text/html;charset=GB2312"%> <HTML> <BODY BGCOLOR=cyan> <FONT Size=1> <p>这是一个简单的JSP页面 <% int i,sum=0; for( i=1;i<=100;i++){ sum=sum+i; } %> <p>1到100的连续和是: <BR> <%=sum %&g

最简单的Windows程序

准备研究一下vmp 保护,从一个最简单的Windows程序入手似乎是个不错的想法. 怎样才最简单呢,只有一个MessageBox 调用好了. 弹出消息,退出,哦也,够简单吧. 祭出法器VC2010,新建win32 项目, #include "stdafx.h" int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR    lpCmdLine, int       nCmdShow) { Me

编写运行最简单的java程序——使用记事本编写java程序

第一个java程序--使用记事本编辑 经过上篇文章的java环境搭建成功的小伙伴们可以在自己的计算机上编写属于自己的java程序了yo~ 还没有搭建环境变量的小伙伴请转移到上一篇的随笔中去完成搭建. 连接地址:http://www.cnblogs.com/hysum/p/7084380.html 现在我们可以通过使用记事本来编辑我们的第一个java小程序. 第一步 .使用记事本编辑程序代码 用记事本编写的是java的源代码文件,里面的代码就是我们平时学习的java代码.生成的文件后缀是.java

Linux环境下部署完JDK后运行一个简单的Java程序

前言 前一篇文章详细讲解了如何在Windows环境下安装虚拟机+Linux系统,并且成功部署了JDK. 不过部署完JDK之后,我们判断部署是否成功的依据是看"java -version"命令是否有正确的内容打印,也许这并不具备太大的说服力.可能能够运行起一个正确的java程序来,不管从感性角度还是理性角度来说,都会有一个更好的认识. 所以本文写一段很简单的java代码,并且在Linux环境下编译运行,以证明JDK部署得确实没有问题. 代码验证JDK部署是否正确 1.级联建立两个目录 首

关于源程序到可运行程序的过程

源程序,是指未经编译的,依照一定的程序设计语言规范书写的,人类可读的文本文件,我们通常理解为源程序就是我们所写好的代码. 可运行程序.我们常说的.exe程序,能够运行程序.完毕计算机功能.在C语言中,.c文件就是所谓的源文件,接下来,我们剖析一下,源程序到可运行程序的过程. 在这个过程中.会发生例如以下的变化: .c文件生成.obj文件的过程,我们称为编译..obj文件生成到.exe文件的过程,我们称为链接. 在这里首先生成的.obj文件就是一个是程序编译生成的二进制文件.再后来,当.exe文件

李洪强iOS开发之应用程序的本质与简单执行过程

什么叫程序? 就是一段执行指令 程序的两个状态: 保存状态(保存到硬盘上)   运行状态(由CPU执行) 代码可以执行吗? CPU(中央处理器-> 是计算机计算和数据处理的地方)把文件的数据读取出来, 解码,然后展示 数据需要存贮在内存中(内存条) 寄存器: 与CPU绑定在一起一个存储设备,存储设备与CPU相同的速率 CPU - 1.9GHZ -->每秒执行1.9G条指令 寄存器是相当于CPU(工厂)的传送带 内存(相当于仓库) 应用程序放到硬盘中,双击一下应用程序.操作系统知道你双击了那个应

C程序编译过程浅析【转】

转自:http://blog.csdn.net/koudaidai/article/details/8092647 前几天看了<程序员的自我修养——链接.装载与库>中的第二章“编译和链接”,主要根据其中的内容简单总结一下C程序编译的过程吧. 我现在一般都是用gcc,所以自然以GCC编译hellworld为例,简单总结如下. hello.c源代码如下: ?[Copy to clipboard] C 1 2 3 4 5 6 [c] view plaincopy <span style=&qu

如何利用CEF3创建一个简单的应用程序 (Windows Platform)

1. 说明 这篇文章主要讲述如何利用CEF3来创建一个简单的应用程序,引用的是1535及以上版本中包含的 Cefsimple 项目例子.如果想知道关于CEF3更多的使用方法,可以去访问 GeneralUsage. 2. 开始 首先,根据自身所使用的开发平台,可以去 这里 下载对应的发布版本.针对这个教程,我们需要下载1750或者更新的版本.当前支持的平台有Windows, Linux和Mac OS X.每一个版本都包含了当在特定平台上编译特定版本CEF3时所需要的所有文件和资源.您可以通过包含在

实验---反汇编一个简单的C程序(杨光)

反汇编一个简单的C程序 攥写人:杨光  学号:20135233 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ) 实验要求:  实验部分(以下命令为实验楼64位Linux虚拟机环境下适用,32位Linux环境可能会稍有不同) 使用  gcc –S –o main.s main.c -m32 命令编译成汇编代码, 代码如下: int g(int x) { retu