C语言进阶学习之mian函数与命令行参数
程序员文章站
2023-01-24 17:28:30
c语言中main函数称为主函数,一个c程序是从main()函数开始执行。
下面的main()函数定义正确吗:
上面四种写法都是正确的!
main()函数是操作调用的函数
操作系统总是将main()...
c语言中main函数称为主函数,一个c程序是从main()函数开始执行。
下面的main()函数定义正确吗:
上面四种写法都是正确的!
main()函数是操作调用的函数
操作系统总是将main()函数作为应用程序的开始
操作系统将main()函数的返回值作为程序的退出状态(return 0 的原因)
思考:为什么c编译器支持那么多不同的main()函数原型???
return num;
num如果是0以外的其他数字,则会告诉操作系统程序并没有正常进行。(某些情况下会发现短路现象)
程序执行时可以向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 ---> 4 argv[0] ---> gcc argv[1] ---> a. argv[2] ---> b.c argv[3] ---> c.c
观察下面代码:
#include 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");="" begin="" env="=============\n");" for(i="0;" env[i]!="null;" env[i]);="" return="" 0;="" }编译运行观察其输出,可以体会main()函数参数的具体含义。
main()函数一定是程序执行的第一个函数吗?(不一定,看编译器了)
#include #ifndef __gnuc__ #define __attribute__(x) #endif __attribute__((constructor)) //gcc属性关键字 void before_main() { printf("%s\n",__function__); } __attribute__((destructor)) void after_main() { printf("%s\n",__function__); } int main() { printf("%s\n",__function__); return 0; }gcc编译运行:
~/will$ gcc test.c ~/will$ ./a.out before_main main after_main__attribute__关键字是gcc特有的标准宏。
在bcc下编译同样的代码,会直接报错。但会以其他方式支持在main()函数前运行别的函数?
修改代码如下:
#include void before_main() { printf("%s\n","before_main()"); } void after_main() { printf("%s\n","after_main()"); } int main() { printf("%s\n","main()"); return 0; }编译运行会直接执行main()函数。
在不同的编译器中,由不同的扩展,所以代码编写尽量要脱离编译器相关的代码(特殊情况下除外),从而方便移植。在工程中尽量少使用编译器相关的函数。
小结:
一个c程序是从main()函数开始执行
main()函数是操作系统调用的函数
main()函数有参数和返回值。(返回0以外的数字,则程序异常退出)
现代编译器支持在main()函数之前调用其他函数。
上一篇: IP负载均衡
下一篇: 8种乳房痛,需要区别对待!