By Jackson@ML
初见C语言,总被一个全球闻名的”Hello, world!”打印输出所惊讶。
代码如下:
# include
int main(void)
{
printf("Hello, world!");
return 0;
}
用gcc编译及运行结果如下图:
通常来讲,main函数被称为C/C++语言的重要组成部分,并且它也是C语言程序的入口,程序的执行从这里开始。
基于通识,我们不再质疑为什么非要写个main函数,而是按部就班地去做 – 反正能编译运行就得了。
但仔细看看,就越来越不明白了。
听老师解释,这很简单,返回值是整型,所以要用int。那么,如果不是整形呢?该怎么办?
与其一味听从惯例,不如剖析一下main函数。可不可以把main函数这样来写呢?
return_type main() {
// program statement 1;
// program statement 2;
return;
}
或者,把不相干的空格和换行去掉,这样写怎么样?
int main() { }
再或者,仍把void放进main(),表示不接受任何信息,这样写呢?
int main(void) { }
事实证明,这样的形式,编译器接受。(当然,还需要必要的内容)
我们看到的程序示例,似乎只有两大类,
事实上,关于main函数,有几个重要特点:
1) main()函数是程序开始执行的函数;
2) 每个程序都仅有一个main()函数;
3) 程序的主函数为main(), 而不是其它名称;
4) Main()函数始终返回整型(int)或没有返回类型(void).
5) Main函数编译时,就决定了由操作系统调用,而不是被用户来调用。
1) 不参数但返回类型为int的main函数;
说明该函数返回整型,但不传递参数,如下代码:
# include
int main(void)
{
printf("Hello, world!");
return 0;
}
运行结果为:
Hello, world!
2) 不带参数也没有返回类型的main函数;
说明main函数不返回值,也不传递参数。如下代码:
# include
void main()
{
printf("Hello, world!");
}
运行结果为:
Hello,world!
3) 带有命令行参数的main函数。
在下面的示例中,向main()函数传递参数。这些参数成为命令行参数,预先不写入程序,,而是在编译完运行时给出,使得程序运行。其中:
# include
int main(int argc, char* argv[])
{
printf("Value of argc is %d\n", argc);
for (int i = 0; i < argc; i++ ){
printf("%s \n", argv[i]);
}
}
将该C程序文件命名为argc.c, 执行编译:
gcc argc.c
之后,执行带参数的运行命令:
./argc.exe Welcome Greetings Prosperity
运行结果如下图:
后续有技术好文不断推出。敬请关注。