zerglurker的C语言教程002

经过上节课,大家现在已经有了一个可运行的C语言程序、相关代码和开发环境。

也许你会有一点疑问,为什么是建立main.cpp而不是main.c

另外,printf是什么?main是什么?#include是什么?

嗯,不要急,这些问题我都会慢慢告诉你们。

通过上节课的内容,我们知道代码要想编程程序,是需要一个工具的。

windows下面,该工具vs提供了;而在linux下面,该工具叫做gcc

这个工具,就是我们后面会提到的,称为编译器的东西。因为它将源代码编码转译为可运行文件,所以叫做编译器。

为了说明后面的内容,我们先建立一个头文件:

右键单击项目,选择添加→新建项

技术分享

选择下图中的头文件,文件名输入public.h

技术分享

然后新加一行代码,如下面所示(基于上课的代码):

#include<stdio.h>

#include“public.h”

 

intmain(intargc,char**argv,char**env)

{

         printf("hello world!\n");

         return0;

}

下面我们再来看看代码。任何一个C或者C++的源代码,基本都会有两个部分:头文件引用说明和函数实现

这里#include<stdio.h>就是头文件引用说明部分。它告诉编译器,我这里会用到一些其他文件里面声明的函数。

#include 有两种方式,一种是上文提到,另外一种是用双引号如下面的代码一样

#include“public.h”

两者的区别是,前者告诉编译器,我引用的文件是库文件的头文件(库文件的详细概念后面会讲,这里各位可以简单的理解为操作系统提供的基本函数,用来简化软件开发。),请从系统头文件开始找起;后者告诉编译器,这个头文件是我自己定义的,请先从当前目录找起。

这样编译器就会根据你的指示,去寻找这些头文件。

intmain(intargc,char**argv,char**env)

这行代码,告诉编译器,我这里有一个函数叫做main

它有三个参数argc argvenv,它的返回值是整数

这里特别强调的一点是main函数,在一个程序中只能被实现一次!

因为这个函数有一个特别的函数,它是所有代码的起点,程序的入口函数。

也就是程序运行的时候,会首先运行该函数,而不是其他的函数。

所以这个函数也只能实现一次,否则有多个实现,就相当于是有多个入口,你让程序从哪个进入呢?

毕竟从一个进,其他入口怎么办?所以干脆定义一个规则,一个程序只能定义一个入口。这样大家都好办了。

也许你手上有一本教材,或者别的什么资料,它的main函数是这样给的:

int main(intargc)

int main(intargc,char* argv[])

int main(intargc,char*argv[],char*env[])

甚至干脆是这样的

int main()

以及这样的

void main()

嗯,不要激动,他们都是对的,我也是对的

就像我上面说过的,这个函数只是告诉编译器,我的入口在这里

至于这个入口是个什么样的入口,编译并不太关心。

但是注意!!虽然你甚至可以这样定义main函数:int main(void*param)

可是系统在调用你的这个入口的时候,它会按照启动时参数的个数(argc)启动时参数的列表(argv)启动时环境变量列表(env)的顺序传递参数。从下图可以看到param在运行的时候,系统传递进来的值是1。表明启动时只使用了一个参数。其他的参数你可以不要,但是你不能更改系统给你的参数。

技术分享

所以我们定义main函数最好按照大家的约定来

而且更有意思的是,尽管你可能不想要这三个参数,可是系统仍然会给出,完全无视你的需求

比如我如下定义main函数

技术分享

从实际调试情况来看,系统仍然将argv(也就是启动参数列表)和env(运行环境列表)传递给了我。只是我需要用一些特殊的手法才能看到这种情况。

所以,大家定义main函数的时候最好采用我给的方法:

intmain(intargc,char**argv,char**env)

既然你无法舍弃,为了程序的可控性,最好还是都拿着——毕竟不管你拿还是不拿,它都在哪里,相对于不可控的情况,拿在手里心里更加踏实。

好了,总结一下:

本节主要学习了以下几点:

1 源代码的构成有两个部分:头文件和函数实现

2 如何建立一个自定义的头文件

3 入口main函数的知识。

那么现在你现在算是基本有了C语言(或者说是C++语言)入门的第一步。

注意第一点!以后不论你接触到的代码有多么复杂或者多么简单,都离不开这个框(否则要么是一个无用的程序,要么是一个错误的程序)。

关于main函数里面其他内容,在下章和后续章节我还会深入下去,所以千万别忘记了。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。