C++-main函式與命令列引數
阿新 • • 發佈:2018-12-29
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函式前呼叫其它函式