23 main 函数与命令行参数
1 main 函数的概念
- C语言中
main
函数称之为主函数 - 一个C程序是从
main
函数开始执行的
2 main 函数的本质
main
函数是操作系统调用的函数- 操作系统总是将
main
函数作为应用程序的开始 - 操作系统将
main
函数的返回值作为程序的退出状态
3 main 函数的参数
-
程序执行时可以向
main
函数传递参数int main() int main(int argc) int main(int argc,char* argv[]) int main(int argc,char* argv[],char* env[])
argc
:命令行参数个数argv
:命令行参数数组env
:环境变量数组
-
gcc 编译器的常见用法
gcc a.c b.c c.c
argc
:4argv[0]
:gccargv[1]
:a.cargv[2]
:b.cargv[3]
:c.c
-
main
函数的参数示例-
Demo
#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; }
-
编译
-
运行
-
-
main
函数一定是程序执行的第一个函数么?- 看情况:如果使用了 gcc 编译器的属性关键字,那么可以指定在 main 函数之前执行一个函数
-
gcc 中的属性关键字
-
Demo
#include <stdio.h> #ifndef __GNUC__ #define __attribute__(x) #endif //gcc属性关键字 __attribute__((constructor)) void before_main(){ printf("%s\n",__FUNCTION__); } __attribute__((destructor)) void after_main(){ printf("%s\n",__FUNCTION__); } int main() { printf("%s\n",__FUNCTION__); return 0; }
-
编译
-
运行
before_main main after_main
-