2-C程序结构
一、代码分析
打开项目中的main.c文件(C程序的源文件拓展名为.c),可以发现它是第一个C程序中的唯一一个源文件,代码如下:
#include <stdio.h>
#include <stdlib.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char *argv[]) {
return ;
}
1.#include <stdio.h>
- #include 是C语言的预处理指令之一,所谓预处理,就是在编译之前做的处理,预处理指令一般以 # 开头
- #include 指令后面会跟着一个文件名,预处理器发现 #include 指令后,就会根据文件名去查找文件,并把这个文件的内容包含到当前文件中。被包含文件中的文本将替换源文件中的 #include 指令,就像你把被包含文件中的全部内容拷贝到这个 #include 指令所在的位置一样
- 如果被包含的文件拓展名为.h,我们称之为"头文件"(Header File),头文件可以用来声明函数("函数"就是面向对象中的"方法"),要想使用这些函数,就必须先用 #include 指令包含函数所在的头文件
2.main函数
- 一个C程序中一定会有一个main函数,也只能有一个main函数。main函数是整个C程序的入口。main.c的第3行代码就定义了一个main函数。
- main函数的返回值为int类型,接收2个参数,其实可以不写参数
main函数可以简化成这样:

main()
{
// insert code here...
printf("Hello, World!\n");
return 0;
}

这里要注意的是:这里的main函数没有写返回值类型,并不代表函数没有返回值,而是表示返回值类型为int类型,void才代表函数没有返回值
由于C语言的语法限制不严格,我们还可以进一步简化main函数:
main()
{
// insert code here...
printf("Hello, World!\n");
}
虽然它要求main函数返回int类型的值,但我们可以不返回
3.stdio.h
- stdio.h 是C语言函数库中的一个头文件,里面定义了一些标准输入输出函数。在main.c的第1行代码中,用#include指令包含了stdio.h文件。
- 这里之所以包含 stdio.h 文件,是因为在第7行中用到了在 stdio.h 内部声明的printf函数,这个函数可以向标准输出设备(比如显示器屏幕)输出数据。
二、开发和运行C程序的步骤(重要)
步骤图如下:

1.编写程序
C语言源文件的扩展名为".c",源文件以ASCII码形式存储,不能直接被计算机执行,因为计算机只能识别二进制指令,也就是0和1
2.编译(VC环境下)
- 把C的源程序翻译成计算机可以识别的二进制形式的目标代码文件,这个过程称为编译,由C的编译器完成
- 在编译的同时,还对源程序的语法等进行检查。若出现语法错误,则编译失败。如果编译成功则生成目标文件,目标文件名跟源程序文件名一样,扩展名为".obj"。比如,mj.c编译后生成目标文件mj.obj
- 每个源文件是单独进行编译的,假如一个项目中有多个.c源文件,编译成功会生成多个对应的.obj目标。一般情况下,目标文件之间是有关联的,比如 a.obj 可能会调用 b.obj 中定义的一个函数,因此它们都不能够单独被计算机执行,而且目标文件中并不包含程序运行所需要的库函数等
3.链接(VC环境下)
- 将所有有关联的obj目标文件,以及系统提供的C库函数等组合在一起生成可执行文件的过程,称为"链接"
- 链接生成的可执行文件的文件名跟源程序文件同名,扩展名为".exe",计算机可以直接执行
三、总结
说了这么多,总结一下第一个C程序的运行步骤:

1.在编译前先执行#include指令,拷贝stdio.h的内容到源程序中 .c
2.编译源程序,生成目标文件 .obj
3.链接C语言函数库,生成可执行文件 .exe
4.运行可执行文件,在屏幕上输出"Hello, World!"
看起来好像挺多步骤的、挺麻烦的,但是当我们点击运行按纽时,编译器会自动按顺序执行上面4个步骤
2-C程序结构的更多相关文章
- 谈谈.net模块依赖关系及程序结构
技术为解决问题而生. 上面这个命题并非本文重点,我将来有空再谈这个.本文也并非什么了不起的技术创新,只是分享一下我对.net模块依赖关系及程序结构方面的一些看法.先看一个最最简单的hello worl ...
- 【C语言入门教程】1.1 基本程序结构
基本程序结构就是从上至下顺序执行的程序,C语言程序必须有且只有一个主函数,程序从主函数开始执行,直到主函数结束.下例是根据半径求圆形面积的程序源代码. #include <stdio.h> ...
- C++程序结构---1
C++ 基础教程Beta 版 原作:Juan Soulié 翻译:Jing Xu (aqua) 英文原版 本教程根据Juan Soulie的英文版C++教程翻译并改编. 本版为最新校对版,尚未定稿.如 ...
- ASP.NET MVC掉过的坑_MVC初识及MVC应用程序结构
APS.Net MVC 浅谈[转] 来自MSDN 点击访问 MVC 理论结构 模型-视图-控制器 (MVC) 体系结构模式将应用程序分成三个主要组件:模型.视图和控制器. ASP.NET MVC 框架 ...
- MFC单文档程序结构
MFC单文档程序结构三方面: Doc MainFrame View
- ecshop在线手册前言及程序结构
该在线手册是有模版堂转载而来:仅供参考 一.前言 为什么我们ecshop模板堂要重制ecshop在线手册呢?因为目前网上的一些教程有些是比较老的,有些是不全面的,官方的手册也已经很久没有更 新,很多刚 ...
- C语言之程序结构
一个好的程序首先要有好的程序结构,我从变量和结构两个方面来做分析. 一.浅谈程序中的变量 一个程序架构最基本的就是程序变量,谈到程序中的变量,我们应该考虑两部分,一方面是变量的作用域,一方面是变量的生 ...
- C#学习笔记二:C#程序结构
从最简单的HelloWorld开始入手,这是一个最低限度的C#程序结构. C# Hello World 示例 一个C#程序主要由以下几部分组成: 命名空间声明 一个类 类方法 类属性 一个Main方法 ...
- Windows 应用程序结构
Windows 应用程序结构
- Asp.net MVC学习--默认程序结构、工作流程
二.MVC 默认程序结构 MVC新建好之后,会对应的出现几个包,分别是:Controller.Model.View --即MVC 其中的默认的Default.aspx文件可以方便url重写,如果不设置 ...
随机推荐
- linux下遍历目录
遍历目录的主要思想 由于目录就是一颗树,所以遍历目录就转换为遍历一棵树.谈到树的遍历就再熟悉不过了,有树的前序.层次和后序遍历,我使用的是前序遍历,后序遍历和前序遍历本质上一样,而层次遍历要比前两个麻 ...
- 部署Icinga-php4
关于Icinga-php4的文档信息及下载地址,可参考:http://icinga-cn.sourceforge.net/ 我这里使用的是icinga-pnp4-cn-1.12.2.tar.xz. 因 ...
- EntityFramework 如何查看执行的 SQL 代码?
在 VS 调试的时候,如果我们项目中使用的是 EntityFramework,查看 SQL 执行代码就不像 ADO.NET 那样直观了,我们需要设置下,可以参考下: How can I log the ...
- C语言版flappy bird黑白框游戏
在此记录下本人在大一暑假,2014.6~8这段时间复习C语言,随手编的一个模仿之前很火热的小游戏----flappy bird.代码bug基本被我找光了,如果有哪位兄弟找到其他的就帮我留言下吧,谢谢了 ...
- 跟我学PHP-第一篇:如何安装Zend Studio 以及汉化和基本准备工作
昨天从早上一直弄到晚上10点,可累死我了,网上的资料都是掺次不齐,所以我写一篇系统点的文章来告诉大家怎么做. 1.如果你想进行一套PHP系统的开发,肯定是要有“尚方宝剑”的,这个尚方宝剑就是PHP工具 ...
- PJAX初体验(主要是利用HTML5 新增API pushState和replaceState+AJAX)
说在前面 什么是PJAX呢? 站在应用角度的就是既实现了页面无刷新的效果,同时也产生了浏览器的前进和后退,而且url也会变化. 也不是什么新鲜技术,主要是AJAX+html5 pushState和re ...
- Javascript数组常用方法
一.forEach对数组的遍历 二.map返回经过运算的新数组 三.filter返回满足条件的新数组 四.返回数组前后元素运算的结果 五.every遍历数组每项元素是否满足某个条件,全部满足返回tru ...
- ajax调用本地wcf中的post和get
我们可以通过jQuery调用本地或者远程的wcf服务,本文讲解的是对本地wcf服务的post和get调用方式. post和get到底有什么区别呢?此处不作详述. 但是,post对请求的数据格式更为严格 ...
- js修改不了input的值
奇怪的input 今天想做一个通过点击按钮,修改input值的控件,但是点击按钮后,input值变成修改的值后又变回了原来的值,百思不得其解,代码如下 <form> <div cla ...
- Effective java笔记(三),类与接口
类与接口是Java语言的核心,设计出更加有用.健壮和灵活的类与接口很重要. 13.使类和成员的可访问性最小化 设计良好的模块会隐藏起所有的实现细节,仅使用API与其他模块进行通信.这个概念称为信息隐藏 ...