1、main函数的概念
C语言中main函数称之为主函数
—个C程序是从main函数开始执行的
下面的main函数定义正确吗?
//1
main(){ } //2
void main(){ }
//3
int main(){ }
//4
int main(){
return 0;
}
2、main函数的本质
main函数是操作系统调用的函数
操作系统总是将main函数作为应用程序的开始
操作系统将main函数的返回值作为程序的退出状态
思考:
为什么C编译器支持那么多不同的main函数原型?
和C语言的发展有关
3、main函数的参数
程序执行时可以向main函数传递参数
int main() int main(int argc) // argc-命令行参数个数 int main(int argc, char * argv[] ) //argv-命令行参数数组 int main(int argc, char * argv[], char *env[]) //env-环境变量数组
gcc编译器的常见用法:
gcc a.c b.c c.c
argc -----------------> 4
argv[0]--------------->gcc
argv[1]--------------->a.c
argv[2]--------------->b.c
argv[3]--------------->c.c
#include <stdio.h>
int main(int argc, char* argv[], char* env[])
{
int i = 0;
printf("============== Begin argv ==============\n");
for(i=0; i<argc; i++)
{
printf("%s\n", argv[i]);
}
printf("============== End argv ==============\n");
printf("\n");
printf("\n");
printf("\n");
printf("============== Begin env ==============\n");
for(i=0; env[i]!=NULL; i++)
{
printf("%s\n", env[i]);
}
printf("============== End env ==============\n");
return 0;
}
4、小技巧
面试中的小问题
main函数一定是程序执行的第一个函数吗?
#include <stdio.h>
#ifndef __GNUC__
#define __attribute__(x) //如果不是gcc编译器,定义空宏,如果是gcc编译器直接删除
#endif
__attribute__((constructor))
void before_main()
{
printf("%s\n",__FUNCTION__); //gcc拓展宏代表函数名
}
__attribute__((destructor))
void after_main()
{
printf("%s\n",__FUNCTION__);
}
int main()
{
printf("%s\n",__FUNCTION__);
return 0;
}
BCC55会报错,不认识宏_FUNCTION_,但现代编译器很多已支持
所以若配合gcc属性关键字,main函数可以不是程序执行的第一个函数
9、小结
—个C程序是从main函数开始执行的
main函数是操作系统调用的函数
main函数有参数和返回值
现代编译器支待在main函数前调用其它函数