zoukankan      html  css  js  c++  java
  • C++-main函数与命令行参数

    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 ==============
    ");  
          
        for(i=0; i<argc; i++)  
        {  
            printf("%s
    ", argv[i]);  
        }  
          
        printf("============== End argv ==============
    ");  
          
        printf("
    ");  
        printf("
    ");  
        printf("
    ");  
          
        printf("============== Begin env ==============
    ");  
          
        for(i=0; env[i]!=NULL; i++)  
        {  
            printf("%s
    ", env[i]);  
        }  
          
        printf("============== End env ==============
    ");  
      
        return 0;  
    }  
    

      

    4、小技巧

    面试中的小问题 

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

      

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

      

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

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

    9、小结

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

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

                main函数有参数和返回值 

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

  • 相关阅读:
    Asp.net mvc项目分页功能
    asp.net mvc邮箱激活
    4. Spring 如何通过 XML 文件配置Bean,以及如何获取Bean
    3. Spring 核心之 IOC(控制反转) & DI(依赖注入)
    2. Spring 的 HelloWorld
    1. Spring 简介以及关于 Eclipse 的 Spring Tool Suite 插件安装
    早睡早起身体好,早睡早起有力量,晚安~~
    睡前写几句,缓解一下刷题的心情。。。
    ACM 杭电HDU 2084 数塔 [解题报告]
    ACM HDU 2041--超级楼梯题解
  • 原文地址:https://www.cnblogs.com/lemaden/p/10194409.html
Copyright © 2011-2022 走看看