开始Linux C编程之旅2

分析程序

    我们学习了怎么样创建一个C源码文件(后缀是.c的文件,例如test.c),然后,编译程序,得到可执行的程序,最终执行程序。

    现在,我们来分析C源码文件中的C程序,就是所谓的“代码”。这个C程序的代码如下:

#include <stdio.h> //包含头文件, 为了使用printf()函数;

#include <stdlib.h> //包含头文件, 为了使用system()函数;

int main() //定义程序的主函数, 就是程序的入口地址;

{ //主函数的开始标记;

    printf("Now time =\n"); //输出提示;

    system("date"); //输出系统时间;

    return 0; //返回结束状态;

} //主函数的结束标记;

    现在我们来分析一个C程序主要有3部分组成:

(1)包含头文件,引用系统提供的接口函数;

(2)程序的主函数,即程序的入口地址,程序从哪个地方开始执行;

(3)程序语句,实现程序功能的具体指令;如果把程序比作一栋大楼,那么,程序语句就是组成大楼的钢筋水泥;

3.1包含头文件

    举个例子,如果大家要起一栋大楼,会用到铁铲、推车之类的工具。这些工具会存放在某个指定的地方,一般称为“仓库”。同样,程序中使用到了printf()这样的函数,这些函数如同铁铲之类的工具,存放在C语言的“仓库”中。那么,在C语言中,这些仓库我们可以称为“头文件”。

    C语言中定义的头文件,就是以.h为结尾的文件。例如 stdio.h、stdlib.h文件,就是系统提供的头文件。如同C语言提供的“仓库”,里面存放了许多有用的铁铲、推车等工具,使用这些工具,我们就可以开发出一个程序。

    要在代码中引用指定的头文件,格式如下:

#include <xxx.h>

    其中xxx的头文件的名称。这个格式是固定的,前面必须是 #include 关键字,然后使用尖括号“< >”,中间是引用的 .h 头文件。

    所以,我们知道了头文件的作用,就是一个仓库,存放很多编码使用的工具。我们必须使用仓库中的工具,才可以进行编码。随着学习的深入,我们可以定义自己的仓库,存放自己定义的函数模块。就是定义自己的.h头文件,然后,声明引出自己定义的函数,让其他模块使用。

3.2程序的入口

    读书的时候,每一个学校都有一个校门口,要合法、正规地进入学校,就只能够通过校门口进入。当然也可以通过翻墙等行为进出学校,但是都不是学校所允许的。同样的道理,每一个程序要能够操作系统上正常运行,都必须提供一个入口,让操作系统通过这个入口,加载程序中的数据,然后,运行程序。

    C语言中定义了程序入口,就是main函数。在我们的测试例子中,有:

    int main() //定义程序的主函数, 就是程序的入口地址;

{ //主函数的开始标记;

    printf("Now time =\n"); //输出提示;

    system("date"); //输出系统时间;

    return 0; //返回结束状态;

} //主函数的结束标记;

    这就是定义了main函数,这个main函数的定义是:

(1)函数的返回值类型是 int类型,就是返回一个int类型的数据;

(2)函数名的名称必须是main关键词;

(3)函数名main后面接一个小括号(),括号里是空,表示不携带参数;

(4)在小括号()后面接一个大括号{ },这个大括号{ }中的代码就是main函数要执行的代码;

(5)执行代码的最后,通过 return 关键字返回0数值,就是为了符合main函数开始定义时,要求返回int类型的变量。

    在这里,我们讲解了main函数的定义,主要是说明main函数是程序的入口地址,如同一个学校的校门口一样,要通过校门口,才可以进入学校。同样,main函数提供了程序的入口地址,所以,我们要写的程序代码,就是在main函数中编写,main函数被操作系统调用之后,我们写的程序代码也就被操作系统调用执行。

    所以,在main函数中,我们就编写了需要执行的代码。 操作系统把程序加载到内存之后,找到main函数这个入口,然后,就一条一条地执行我们编写的代码。

3.3函数体的代码

    程序的入口是从main函数开始,所以,我们要实现的代码也就是在main函数的函数体中编写。main函数的定义格式是:

int main() //定义程序的主函数, 就是程序的入口地址;

{

} //主函数的结束标记;

    那么,函数体就是在大括号{ }中的代码。在测试例子中,函数体中的代码是:

printf("Now time =\n"); //输出提示;

system("date"); //输出系统时间;

return 0; //返回结束状态;

    这些代码的作用是:

(1) printf函数输出 "Now time=\n" 字符串中的数据,后面的"\n"表示回车换行;

(2) system函数执行参数"date"指定的动作,获取系统时间输出;

(3) return关键字返回一个值,表示退出main函数的运行;

    注意:每一行代码必须以引号“;”结束。除了遇到如下几种特殊情况:

(1)使用#include包含头文件,不需要引号结束;

(2)函数的声明,在小括号()后面,不需要引号结束;

(3)函数体的大括号{}后面,不需要引号结束;

    那么,当我们学习了变量,运算符,表达式,输入/输出函数等知识之后,就可以自由编写函数体中的代码,实现更加复杂的功能。我们可以把想要计算机实现的功能通过C语言来描述,然后,编译成可执行程序来运行。

3.4程序的注释

    我们先来看看一个测试例子:

#include <stdio.h> //包含头文件, 为了使用printf()函数;

int main() //定义程序的主函数, 就是程序的入口地址;

{ //主函数的开始标记;

/*注释

可以注释多行

代码*/

printf("test abc!\n");

return 0; //返回结束状态;

}

    测试运行结果如下:

mylinux@ubuntu:~/src/test$ gcc test.c -o exe

mylinux@ubuntu:~/src/test$ ./exe

test abc!

    在这个测试例子中,我们主要讲解C语言的“注释”。在代码中添加注释很有必要,例如,我们需要描述某一段关键的代码,描述某一个函数模块的时候,就需要在代码中添加注释,那么,当一个项目有多个开发人员在共同开发时,大家可以通过代码的注释来快速了解代码的构造和设计。

    C语言提供了两种中注释方法:

(1)单行注释

在一行中,以两个反斜杠“//”开始,后面接着的数据就是注释。注释的数据不会被编译器编译,所以,注释里面写的东西可以中文或其他字符,不要求是C语言写的代码。注意:“//”注释符只能够在单一行中使用,不能够跨越多行。例如上面的例子中,有:

int main() //定义程序的主函数, 就是程序的入口地址;

这是合法的,因为注释符“//”后面接的数据都是在一行中。

(2)多行注释

    “多行注释”也称为“块注释”,就是可以注释多行代码块。多行注释是以“/*”开始,以“*/”结束。例如上面例子中的代码有:

/*注释

可以注释多行

代码*/

printf("test abc!\n");

    就是通过/*  */来注释多行。注意,多行注释符 /* */ 不能够嵌套,不能够编写 /* abc /*123*/www*/ 这样的嵌套注释,嵌套注释是不允许的。

    多行注释的规则是:从第一个/*符号开始,遇到第一个 */ 符号结束。所以,对于 /* abc /*123*/www*/ 这样的嵌套注释,只是注释了 /* abc /*123*/ 数据,剩下的 www*/没有配对,所以,是不合法的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354