0%

C语言 main函数

聊聊main函数

main字面的意思就是主要的意思,在程序里面也是,并且更重要了,是主函数,何为主函数,就是程序运行会执行的第一个程序,意即程序的入口,如果说眼睛是心灵的窗户,那么main就是程序的大门。

在C99标准之前,main函数可以没有返回类型或者使用void,如下所示:

1
2
3
4
5
/*beginner/main/main1.c*/

main()
{
}

或者

1
2
3
4
5
6
/*beginner/main/main2.c*/

void main()
{
}

这两个可以称为最短小精悍的程序了,不会出错,因为没有语句。

如果使用C99标准编译,就可以看到如下的警告信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
main1.c:3:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
main()
^
1 warning generated.
gcc -o main2 main2.c
main2.c:3:1: warning: return type of 'main' is not 'int' [-Wmain-return-type]
void main()
^
main2.c:3:1: note: change return type to 'int'
void main()
^~~~
int
1 warning generated.

警告的含义就是我们的mian函数是有血有肉的,是有正儿八经的返回值的,这个返回值的类型就是int,所以这个程序:

1
2
3
4
5
/*beginner/main/main3.c*/

int main()
{
}

OK,完美编译,没有任何报错信息,不过终归看着少了点什么,是的,如果定义了返回类型,就需要有相应的返回,所以第一个标准的简单C语言函数如下所示:

1
2
3
4
5
6
/*beginner/main/main4.c*/

int main()
{
return 0;
}

main函数的形式

恩,既然写出了main函数的标准形式,这里就需要讨论一个问题,为什么有时候看到int main(),有时候又看到int main(int argc, char *argv[])呢,具体的形式如下所示:

无参数的main函数

1
2
3
4
5
6
7
8
/*beginner/main/main5.c*/

int main()
{
printf("Hello World\n");
return 0;
}

可以看到上面这个例子,只是打印了hello world,并没有其他语句。

而下面的例子,我们看到使用到了argc和argv,所谓的形参,所以在有需要的时候才会出现这种形式,就好像是黄蓉给郭靖的几个锦囊^_^。

有参数的main函数

1
2
3
4
5
6
7
8
9
10
11
12
/*beginner/main/main6.c*/

int main(int argc, char *argv[])
{
printf("The are %d arguments.\n", argc);
int i;
for (i = 0; i < argc; i++)
printf("%s ", argv[i]);
printf("\n");
return 0;
}

编译运行

直接输入make就可以了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#beginner/main/Makefile
ALL : main1 main2 main3 main4 main5 main6

main1: main1.c
gcc -o main1 main1.c

main2: main2.c
gcc -o main2 main2.c

main3: main3.c
gcc -o main3 main3.c

main4: main4.c
gcc -o main4 main4.c

main5: main5.c
gcc -o main5 main5.c

main6: main6.c
gcc -o main6 main6.c

.PHONY : clean

clean:
rm -f main1 main2 main3 main4 main5 main6
处无为之事,行不言之教;作而弗始,生而弗有,为而弗恃,功成不居!

欢迎关注我的其它发布渠道