C语言进阶课程学习记录-main函数与命令行参数
- main函数
- 验证以下4中定义是否正确
- 实验-main的返回值
- cmd窗口
- 实验-main的输入参数
- cmd窗口
- 在main函数执其执行的函数
- 实验-程序执行的第一个函数
- gcc编译器
- cmd窗口
- bcc编译器
- 小结
本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程,图片全部来源于课程PPT,仅用于个人学习记录
main函数
C语言中的main函数称为主函数
一个C程序是从main函数开始执行的
验证以下4中定义是否正确
int main()
{}
void main()
{}
main()
{}int main()
{return 0;}
以上四种gcc编译、运行都没有报错
实验-main的返回值
//33-2-A.c
#include <stdio.h>int main()
{printf("I'm A!\n");return 0;
}
//33-2-B.c
#include <stdio.h>int main()
{printf("I'm B!\n");return 99;
}
cmd窗口
D:\Users\cyz1994\Cxuexi\gccLearn\33-1>gcc 33-2-A.cD:\Users\cyz1994\Cxuexi\gccLearn\33-1>AA
I'm A!D:\Users\cyz1994\Cxuexi\gccLearn\33-1>gcc 33-2-B.cD:\Users\cyz1994\Cxuexi\gccLearn\33-1>BB
I'm B!D:\Users\cyz1994\Cxuexi\gccLearn\33-1>echo %ERRORLEVEL% //Windows环境变量,它包含最近执行的程序或批处理命令的退出代码
99D:\Users\cyz1994\Cxuexi\gccLearn\33-1>AA
I'm A!D:\Users\cyz1994\Cxuexi\gccLearn\33-1>echo %ERRORLEVEL%
0D:\Users\cyz1994\Cxuexi\gccLearn\33-1>AA&&BB
I'm A!
I'm B!
//AA的返回值为0 执行了BD:\Users\cyz1994\Cxuexi\gccLearn\33-1>BB&&AA
I'm B!//BB的返回值不为0,不执行AA
实验-main的输入参数
#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;
}
cmd窗口
D:\Users\cy\Cxuexi\gccLearn\33-1>C.exe
============== Begin argv ==============
C.exe
============== End argv ==============
D:\Users\cy\Cxuexi\gccLearn\33-1>c.exe a.c b.c
============== Begin argv ==============
c.exe
a.c
b.c
============== End argv ==============
在main函数执其执行的函数
main函数不一定是程序执行的第一个函数
gcc编译器的属性关键字实现先执行其他函数,再执行main函数
实验-程序执行的第一个函数
gcc编译器
#include <stdio.h>#ifndef __GNUC__
#define __attribute__(x)
#endif__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;
}
cmd窗口
D:\Users\cyy\Cxuexi\gccLearn\33-1>gcc 33-4.cD:\Users\cy\Cxuexi\gccLearn\33-1>a
before_main
main
after_main
bcc编译器
#include <stdio.h>#ifndef __GNUC__
#define __attribute__(x)
#endif__attribute__((constructor))
void before_main()
{printf("%s\n","before_main");
}__attribute__((destructor))
void after_main()
{printf("%s\n","after_main");
}int main()
{printf("%s\n","main");return 0;
}
小结
一个C程序是从main函数开始执行的
main函数是操作系统调用的函数
main函数有参数和返回值
现代编译器支持在main函数前调用其它函数