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 ==============\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函數前調用其它函數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM