1、main函数的概念

  C语言中main函数称之为主函数

  —个C程序是从main函数开始执行的

下面的main函数定义正确吗?

//1
main(){ } //2
void main(){ }
//3
int main(){ }
//4
int main(){
return 0;
}

  

2、main函数的本质

main函数是操作系统调用的函数

操作系统总是将main函数作为应用程序的开始

操作系统将main函数的返回值作为程序的退出状态

思考: 

为什么C编译器支持那么多不同的main函数原型?

和C语言的发展有关

3、main函数的参数

程序执行时可以向main函数传递参数

int main()

int main(int argc) // argc-命令行参数个数    

int main(int argc, char * argv[] ) //argv-命令行参数数组

int main(int argc, char * argv[], char *env[]) //env-环境变量数组

gcc编译器的常见用法:

  gcc a.c b.c c.c

  argc ----------------->   4

  argv[0]--------------->gcc

  argv[1]--------------->a.c

  argv[2]--------------->b.c

  argv[3]--------------->c.c

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

  

4、小技巧

面试中的小问题 

main函数一定是程序执行的第一个函数吗?

  

#include <stdio.h>  
  
#ifndef __GNUC__  
#define __attribute__(x)   //如果不是gcc编译器,定义空宏,如果是gcc编译器直接删除
#endif  
  
__attribute__((constructor))  
void before_main()  
{   
    printf("%s\n",__FUNCTION__);  //gcc拓展宏代表函数名
}  
  
__attribute__((destructor))   
void after_main()  
{  
    printf("%s\n",__FUNCTION__);  
}  
  
int main()  
{  
    printf("%s\n",__FUNCTION__);  
      
    return 0;  
}  

  

BCC55会报错,不认识宏_FUNCTION_,但现代编译器很多已支持

所以若配合gcc属性关键字,main函数可以不是程序执行的第一个函数

9、小结

—个C程序是从main函数开始执行的

main函数是操作系统调用的函数

main函数有参数和返回值

现代编译器支待在main函数前调用其它函数

C++-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. 第33课 main函数与命令行参数

    main函数的概念: 测试程序: 以上四种定义main函数的方法都是正确的. main函数的本质: 操作系统是希望main函数的有返回值的,这样可以知道main函数的退出状态. 如果程序时异常退出的, ...

  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. windows使用proxifier全局代理 - 配置可用; windows10 配置全局代理 走 socks5

    最近windows上需要配置全局代理 走 socks5,发现同类型的有 cow pcap 等解决方案,通过尝试发现还是proxifier 比较好用! 下载:https://www.proxifier. ...

  2. 剑指offer-面试题42-连续子数组的最大和-动态规划

    /*题目; 输入一个整形数组(可能有正数和负数),求数组中连续子数组(最少有一个元素)的最大和. 要求时间复杂度为O(n). 先输入数组的格式,再依次输入数组的值.*//*思路: f(i) = pDa ...

  3. 【47】迁移学习(Transfer Learning)

    迁移学习(Transfer Learning) 如果你要做一个计算机视觉的应用,相比于从头训练权重,或者说从随机初始化权重开始,如果你下载别人已经训练好网络结构的权重,你通常能够进展的相当快,用这个作 ...

  4. C#简单的LogHelper

    适用于不想使用log4net等第三方的Log工具的LogHelper.正规的还是要使用<C# 工具类LogHelper>的这种做法. using System; using System. ...

  5. windows10使用任务计划提醒自己

    转载自:https://www.cnblogs.com/yourstars/p/6505991.html 利用Win10计划任务 + 弹窗,提醒你自己 步骤: 1.打开Win10控制面板 -> ...

  6. 转: VS 解决方案目录结构设置

    https://www.cnblogs.com/zuibunan/p/3843459.html 下面的文章也有介绍 https://blog.csdn.net/lp310018931/article/ ...

  7. BZOJ4566&&lg3181 HAOI找相同字符(广义后缀自动机)

    BZOJ4566&&lg3181 HAOI找相同字符(广义后缀自动机) 题面 自己找去 HINT 给定两个文本串,问从两个串中各取一个非空子串,使这俩子串相同,问方案有多少种.我的思路 ...

  8. 设置完代理IP,手机连接WiFi时连不上,一直在转

    fiddler抓包,设置代理后,会出现手机连不上网的情况,针对这个情况处理方式为: 首先如果已经连接上WiFi了,但是提示“不可上网”,那就把WiFi断开重新连接下. 不行的话就试试下面的办法 一.配 ...

  9. 批量获取mysql数据库实例指定参数的值

    需求:需要对比所有mysql数据库实例上面的指定参数配置情况,同时需要需要能看到如ip,端口,master or slave,毕竟主和从参数不一样还是有可能的. 说明:必须要有个数据库存储所有是数据库 ...

  10. vjudge A - 机器人走方格

    原题:https://vjudge.net/problem/51Nod-1118 #include<bits/stdc++.h> using namespace std; ][]; int ...