博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言进阶:第33课、mian函数与命令行参数
阅读量:3736 次
发布时间:2019-05-22

本文共 1587 字,大约阅读时间需要 5 分钟。

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.cargc 	---> 4argv[0] ---> gccargv[1] ---> a.argv[2] ---> b.cargv[3] ---> c.c
观察下面代码:
#include 
int main(int argc, char* argv[], char* env[]){ int i = 0; printf("============== Begin argv ==============\n"); for(i=0; i

编译运行观察其输出,可以体会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.outbefore_mainmainafter_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()函数之前调用其他函数。
你可能感兴趣的文章
单例设计模式
查看>>
面试题集锦(一)
查看>>
Calendar类方法——编写万年历的两种方式
查看>>
File类的使用——遍历所有文件及子文件以及遍历删除
查看>>
内存流的使用——基本使用
查看>>
RandomAccessFile 类的使用——基本使用
查看>>
Properties实现类——基本使用
查看>>
结构型模式——装饰者设计模式
查看>>
线程的同步——Synchronized和ReentrantLock
查看>>
网络编程基础
查看>>
python实现快速排序
查看>>
python实现归并排序
查看>>
二叉树的镜像实现(python版)
查看>>
ptqt5控件了解(三)
查看>>
自学C++(一)
查看>>
51单片机介绍(二)
查看>>
STM32F103 入门篇-5-初识STM32
查看>>
后台框架的frameset
查看>>
Spring Jdbc
查看>>
Spring 事务管理
查看>>