在上一篇中我们已经创建了一个C程序,接下来分析一下里面的代码。
项目结构如下:

一、代码分析

打开项目中的main.c文件(C程序的源文件拓展名为.c),可以发现它是第一个C程序中的唯一一个源文件,代码如下:

#include <stdio.h>int main(int argc, const char * argv[])
{// insert code here...printf("Hello, World!\n");return 0;
}

1.#include <stdio.h>

  • #include 是C语言的预处理指令之一,所谓预处理,就是在编译之前做的处理,预处理指令一般以 # 开头
  • #include 指令后面会跟着一个文件名,预处理器发现 #include 指令后,就会根据文件名去查找文件,并把这个文件的内容包含到当前文件中。被包含文件中的文本将替换源文件中的 #include 指令,就像你把被包含文件中的全部内容拷贝到这个 #include 指令所在的位置一样
  • 如果被包含的文件拓展名为.h,我们称之为"头文件"(Header File),头文件可以用来声明函数(“函数"就是面向对象中的"方法”),要想使用这些函数,就必须先用 #include 指令包含函数所在的头文件
  • #include 指令不仅仅限于.h头文件,可以包含任何编译器能识别的C/C++代码文件,包括.c,.hpp,.cpp等,甚至.txt,.abc等等都可以

也就是说你完全可以将第3行到第9行的代码放到其他文件中,然后用 #include 指令包含进来,比如:

  1. 将第3行到第9行的代码放到my.txt中

  1. main.c源文件中包含my.txt文件


程序还是可以照常运行的,因为 #include 的功能就是将文件内容完全拷贝到 #include 指令所在的位置

不过你可能会疑惑,为什么stdio.h用尖括号<>,而my.txt用双引号"" ?这个很好区别,如果是系统自带的文件,最好用<>;如果是开发人员自己创建的文件,最好用""

说明:这里用txt文件纯属演示,平时做项目不会这样做,除非吃饱了撑着,才会把代码都写到txt中去

2.main函数

  • 前面也已经提到,C中的函数就是面向对象中的"方法"。C语言是一门面向过程的语言,是以过程为中心的编程思想,就是先分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用函数 就可以了
  • 一个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函数,这个函数可以向标准输出设备(比如显示器屏幕)输出数据,屏幕上输出的文字就是第7行代码printf("Hello,World!\n");造成的,双引号""内的文本为C语言的字符串

二、开发和运行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",计算机可以直接执行

4.运行

  • 如果是在Windows环境下,直接双击".exe"文件即可运行C语言程序
  • 由于我们的第一个C程序,是在Mac OS X系统环境下用Xcode创建的命令行项目,Mac OS X系统是基于UNIX系统的,因此生成的可执行文件的这样的:
  • 双击可以用终端(命令行)打开:

三、总结

说了这么多,总结一下第一个C程序的运行步骤:

1.在编译前先执行#include指令,拷贝stdio.h的内容到源程序中

2.编译源程序,生成目标文件

3.链接C语言函数库,生成可执行文件

4.运行可执行文件,在屏幕上输出"Hello, World!"
看起来好像挺多步骤的、挺麻烦的,但是当我们点击Xcode的运行按钮时,Xcode会自动按顺序执行上面4个步骤
上一篇:【C语言】02-第一个C程序
下一篇:【C语言】04-函数

【C语言】03-第一个C程序代码分析相关推荐

  1. C语言 03-第一个C程序代码分析

    本文目录 一.代码分析 二.开发和运行C程序的步骤 三.总结 说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语 ...

  2. (一)易语言学习笔记之从了解易语言到写一个小程序

    如果要安装易语言参考下面链接: https://www.bilibili.com/video/BV1Rd4y1F7N4/?spm_id_from=333.999.0.0&vd_source=8 ...

  3. n的阶乘c语言程序迭代,C语言实现N阶乘的程序代码

    这篇文章主要给各位讲述C语言实现N阶乘的程序代码,所谓n的阶乘就是从1到n的累积,所以可以通过一个for循环,从1到n依次求积即可,想详细了解的朋友赶紧跟随爱站技术频道的小编一起往下学习吧. 代码如下 ...

  4. c语言课程设计作业图书管理系统,C语言课程设计图书馆管理系统程序代码.doc

    C语言课程设计图书馆管理系统程序代码.doc includestdio.h includewindows.h includestring.h includeconio.h define M 100 s ...

  5. C语言中打开一个应用程序可以调用或运行命令

    C语言中打开一个应用程序可以调用或运行命令system(),也可以调用操作系统的API函数,比如Windows系统可以调用CreateProcess().ShellExecuteEx()等函数来打开一 ...

  6. 动图图解C语言选择排序算法,含代码分析

    C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C ...

  7. C语言基础-第一个C程序

    之前在大学期间学过C语言的基础,后来主要方向是java,就没继续深入学习C语言.但是C语言作为一个基础语言,对开发有着很大的帮助.最近又开始用业余时间系统的学习C语言. 首先,简单的介绍一下C语言 C ...

  8. 黑马程序员-JavaSE核心知识-03第一个Java程序

    3.3.第一个Java程序:永远的"Hello World !"(重点) 第一个要测试的程序永远从"Hello World !"开始,Java程序的文件后缀必须 ...

  9. C语言_写一个关机程序,只要程序运行起来,电脑在1分钟内关机。

    写一个关机程序,只要程序运行起来,电脑在1分钟内关机, //如果输入:"我是猪,才取消关机\n") 代码如下(示例): #include <string.h> #inc ...

  10. helloworldjava_Java语言入门-第一个HelloWorld程序

    1.官网下载Jdk 1.1 打开之后出现如下界面: 1.2选择对应版本:这里选择Jdk8版本. 最新的不一定是最好的,稳定才是王道. 2.安装 2.1 双击安装包打开,点击下一步. 2.2 点击更改路 ...

最新文章

  1. python语言基础汇总
  2. 安装cuda时出现 non 7z achive. 报错解决办法 安装文件损坏
  3. 崩坏3服务器维护多久,崩坏35月28日停服维护多久?4.0版本更新内容汇总[图]
  4. 支持M1芯片mac 达芬奇17中文版(详细安装教程) DaVinci Resolve Studio 17.3.1b5
  5. 计算机网络 原理与实验指导书,《计算机网络原理》实验指导书.doc
  6. (08)Vivado时钟约束
  7. 裸板烧写linux内核,嵌入式linux学习(二):烧写裸板进程
  8. Windows自带集成工具对ISO镜像是否源于官方网站的验证
  9. win10 动态磁盘 linux,教你如何将win10系统动态磁盘改成基本磁盘?
  10. 如何在高通平台新建项目
  11. Windows 10虚拟机Vmware 安装 黑苹果macos10.14
  12. Java如何实现不同局域网TCP通信+群聊+私聊(云服务器实现)
  13. Altium Designer--如何用快捷键进行元器件旋转
  14. allegro中Externally Determined Violation错误标记去掉的skill
  15. 傅里叶变换分析之掐死教程
  16. LVGL8的窗口切换方式
  17. html实现京东网页
  18. vue-router back 返回时携带参数
  19. 制作emwin个性化控件
  20. rz: xxxxxxx removed

热门文章

  1. validate.js的使用
  2. 各浏览器下图片垂直居中的方法:
  3. Android 布局优化之include与merge
  4. 暗黑3服务器维护时间多久,暗黑3亚服维护近24小时 将封10万账号
  5. Delete `␍`eslintprettier/prettier
  6. css的calc函数
  7. js高级学习笔记(b站尚硅谷)-11-变量提升与函数提升
  8. head 查看文件前n行
  9. mycat 分表子查询_mysql分库分表之mycat中间件解决方案
  10. python垃圾回收机制与很多_你了解Python的 垃圾回收 机制吗?