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. spring boot开启事务管理,使用事务的回滚机制,使两条插入语句一致

    spring boot 事务管理,使用事务的回滚机制 1:配置事务管理 在springboot 启动类中添加 @EnableTransactionManagement //开启事务管理 @Enable ...

  2. BackgroundWorker+ProgressBar+委托 实现多线程、进度条

    上文在<C# 使用BackgroundWorker实现WinForm异步>介绍了如何通过BackgroundWorker实现winForm异步通信,下面介绍如何通过BackgroundWo ...

  3. (10)场景转换(Transitions)

    Cocos2d-x最爽的一个特性之一就是提供了在两个不同场景之间直接转换的能力.例如:淡入淡出,放大缩小,旋转,跳动等.从技术上来说,一个场景转换就是在展示并控制一个新场景之前执行一个转换效果. 场景 ...

  4. Java 和 Python 解析动态 key 的 JSON 数据

    一.概述 解析JSON过程中,什么情况都可能遇到.遇到特殊的情况,不会怎么办?肯定不是设计的问题,一定是你的姿势不对. 有这样一种JSON需要解析: { "b3444533f6544&quo ...

  5. 15信号sigaction

    信号处理 信号值小于 SIGRTMIN 的信号 (1~31) 都是不可靠信号 某些unix版本中,调用信号函数处理后会自动恢复默认信号处理,所以在信号处理函数中还需要继续调用signal函数设置信号处 ...

  6. 2017-2018 ACM-ICPC, Asia Daejeon Regional Contest Solution

    A:Broadcast Stations 留坑. B:Connect3 题意:四个栈,每次放棋子只能放某个栈的栈顶,栈满不能放,现在给出(1, x) 表示黑子放在第x个栈的第一个位置,白子放在第b个栈 ...

  7. EF Code First学习笔记:数据库创建(转)

    控制数据库的位置 默认情况下,数据库是创建在localhost\SQLEXPRESS服务器上,并且默认的数据库名为命名空间+context类名,例如我们前面的BreakAway.BreakAwayCo ...

  8. AVAudioFoundation(6):时间和媒体表示

    本文转自:AVAudioFoundation(6):时间和媒体表示 | www.samirchen.com 本文主要内容来自 AVFoundation Programming Guide. 基于时间的 ...

  9. Python面试题目之字典排序

    按照字典的内的年龄排序 待排序的字典 d1 = [ {'name':'alice', 'age':38}, {'name':'bob', 'age':18}, {'name':'Carl', 'age ...

  10. bzoj1604 / P2906 [USACO08OPEN]牛的街区Cow Neighborhoods

    P2906 [USACO08OPEN]牛的街区Cow Neighborhoods 考虑维护曼哈顿距离:$\left | x_{1}-x_{2} \right |+\left | y_{1}-y_{2} ...