main函数的概念:

测试程序:

以上四种定义main函数的方法都是正确的。

main函数的本质:

操作系统是希望main函数的有返回值的,这样可以知道main函数的退出状态。

如果程序时异常退出的,在有的系统上面,会得到提示:程序异常退出。

C编译器支持多种不同的main函数原型,因为在早期有C语言,但是没有复杂的操作系统,有些程序甚至直接跑在裸机上,这样的程序的返回值也没有什么意义。所以,由于历史的原因,使得C编译器支持多种不同的main函数原型。

main函数返回值示例程序:

在bcc下的返回值如下:

两个程序可以连着运行:

如果B.exe的返回值是0,则A.exe就会运行,否则不运行。

反过来运行结果如下:

这种使用&&连着运行程序的语法就是操作系统的批处理语法。在linux下就是shell脚本。

我们的main函数最好写成具有int返回值的形式,因为这样就可以将它当做黑盒在批处理语言中通过if 或者其他语句判断返回值,并执行其它操作。

main函数的参数:

gcc编译器常见用法:

示例程序:

 #include <stdio.h>

 int main(int argc, char* argv[], char* env[])
{
int i = ; printf("============== Begin argv ==============\n"); for(i=; i<argc; i++)
{
printf("%s\n", argv[i]);
} printf("============== End argv ==============\n"); printf("\n");
printf("\n");
printf("\n"); printf("============== Begin env ==============\n"); for(i=; env[i]!=NULL; i++)
{
printf("%s\n", env[i]);
} printf("============== End env ==============\n"); return ;
}

argv中的个数是由argc指示的,但是env变量并没有指示其中有多少条环境变量信息,我们只能通过判断空指针来确定。

运行结果如下:

注释掉第24行运行结果如下:

小技巧:

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 ;
}

第三行先判断当前的编译器是否为gcc编译器,如果不是的话,会定义第4行的宏。

第7行的命令告诉编译器,在调用main之前,先调用before_main函数。而after_main是在main函数执行结束后调用。

运行结果如下:

__FUNCTION__是在gcc编译器中定义的。属于语言的扩展,其他编译器不一定存在。在bcc中是不存在这个关键字的。

回答上面的问题:

main函数不一定是第一个执行的函数。

有属性扩展的编译器中,我们可以人为的在main函数之前加上其它函数。在没有属性扩展的编译器中,main函数是第一个执行的。

小结:

第33课 main函数与命令行参数的更多相关文章

  1. 解析main函数的命令行参数

    原创文章,转载请正确注明本文原始URL及作者. 介绍 写C/C++程序,我们常常需要把main函数的参数作为选项来传递.在linux中,解析选项有专门的函数可以用. int getopt(int ar ...

  2. C++main函数与命令行参数,退出程序

    本文翻译自:https://docs.microsoft.com/en-us/cpp/cpp/main-function-command-line-args?view=vs-2019 (除动态链接库d ...

  3. Unix系统编程()main函数的命令行参数

    命令行参数输入双引号是什么效果? 好像可以去空格化.

  4. C++-main函数与命令行参数

    1.main函数的概念 C语言中main函数称之为主函数 —个C程序是从main函数开始执行的 下面的main函数定义正确吗? //1 main(){ } //2 void main(){ } //3 ...

  5. main函数与命令行参数

    main函数的概念 C语言中main函数称之为主函数 一个c程序从main函数开始执行的 下面的main函数定义正确吗? main函数的本质 main函数是操作系统调用的函数 操作系统总是将main函 ...

  6. getopt_long函数解析命令行参数

    转载:http://blog.csdn.net/hcx25909/article/details/7388750 每一天你都在使用大量的命令行程序,是不是感觉那些命令行参数用起来比较方便,他们都是使用 ...

  7. Java的main函数(命令行传参)

    javac :编译命令 java  :执行命令

  8. [笔记] 命令行参数 int main(int argc,char *argv[])

    int main(int argc,char *argv[]) // argument count 变量个数 argument values 变量值 C程序的main函数有两个形参* argc:整数, ...

  9. Go 命令行参数,JSON 序列化与反序列化

    #### Go 命令行参数,JSON 序列,反序列化这一节来学习一下Go 如果解析命令行参数,以及JSON 的序列化及反序列化; 命令行参数对于熟悉Linux 的同学来说比较清楚,如: ls -a , ...

随机推荐

  1. mysql根据经纬度获取附近的商家

    create table geo( geo_id INT NOT NULL AUTO_INCREMENT, lng float NOT NULL, lat float NOT NULL, name ) ...

  2. PAT 1110 Complete Binary Tree[判断完全二叉树]

    1110 Complete Binary Tree(25 分) Given a tree, you are supposed to tell if it is a complete binary tr ...

  3. Sql Server CPU 性能排查及优化的相关 Sql

    Sql Server CPU 性能排查及优化的相关 Sql 语句,非常好的SQL语句,记录于此: --Begin Cpu 分析优化的相关 Sql --使用DMV来分析SQL Server启动以来累计使 ...

  4. qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)

    原博主博客地址:http://blog.csdn.net/qq21497936本文章博客地址:http://blog.csdn.net/qq21497936/article/details/78516 ...

  5. 居于mtk芯片安卓车机系统具体流程

    一:车机系统框架  MCU 功能  电源控制  Radio 控制(RDS)  按键检测(Panel/Remote/SW)  常见信号检查(倒车/大灯/刹车)  CAN 模块通讯  ARM- ...

  6. 怎样在linux下对U盘进行格式化和分区

    说明,为了不做无用功,首先必须卸载要分区的设备,分区才能执行成功.通过命令umount /media/?? 或者umount /mnt/??? 看你的实际情况,这一步必不可少.1.首先通过命令fdis ...

  7. gstreamer调试命令

    gplay播放命令 gplay 文件全路径 (eg:gplay 123.mp3) gstreamer播放命令 gst-launch playbin2 uri=file:///文件全路径 (eg  gs ...

  8. bzoj1623 / P2909 [USACO08OPEN]牛的车Cow Cars

    P2909 [USACO08OPEN]牛的车Cow Cars 显然的贪心. 按速度从小到大排序.然后找车最少的车道,查询是否能填充进去. #include<iostream> #inclu ...

  9. 20145105 《Java程序设计》第3周学习总结

    20145105 <Java程序设计>第3周学习总结 教材学习内容总结 第四章 认识对象 一.类与对象 要产生对象必须先定义类,类是对象的设计图,对象是类的实例. (一)定义类 1.类定义 ...

  10. 20145314郑凯杰《网络对抗技术》实验1 逆向及Bof基础实践

    20145314郑凯杰<网络对抗技术>实验1 逆向及Bof基础实践 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数 ...