C語(yǔ)言 main()函數(shù)

C語(yǔ)言 main()函數(shù)

C語(yǔ)言main函數(shù)的完全格式是

int main(int argc, char* argv[], char* envp[]){
}
int main(int argc, char **argv, char **envp){
}

argc: 是執(zhí)行程序時(shí)命令行參數(shù)個(gè)數(shù),需要注意,程序本身的名字也算是一個(gè)

argv[]: 是命令行中參數(shù)的具體參數(shù)值

envp[]: 是環(huán)境變量, 沒(méi)有一個(gè)整數(shù)來(lái)為它技術(shù),是通過(guò)最后一個(gè)envp[i]==NULL來(lái)表示結(jié)尾的。

argc和argv 都是比較熟的 不必贅述。

單獨(dú)說(shuō)一下 envp:

例子程序

#include <stdio.h>

int main(int argc, char **argv, char **envp) {
    printf("   argc == %d\n", argc);
    for(int i=0; i<argc; i++) {
        printf("      %s\n", argv[i]);
    }
    for(int i=0; envp[i]!=NULL;i++) {
        printf("    %s\n", envp[i]);
    }
    return 0;
}

查看 msdn的解釋:

MSDN上的解釋是這樣的:

Microsoft Specific

wmain( int argc, wchar_t *argv[ ], wchar_t *envp[ ] )

envp:

The envp array, which is a common extension in many UNIX? systems【#1】, is used in Microsoft C++. It is an array of strings representing the variables set in the user's environment. This array is terminated by a NULL entry【#2】. It can be declared as an array of pointers to char (char *envp[ ]) or as a pointer to pointers to char (char **envp). If your program uses wmain instead of main, use thewchar_t data type instead ofchar【#3】. The environment block passed to main and wmain is a "frozen" copy of the current environment【#4】. If you subsequently change the environment via a call to putenv or _wputenv, the current environment (as returned by getenv/_wgetenv and the _environ/ _wenviron variable) will change, but the block pointed to by envp will not change. See Customizing Command Line Processing for information on suppressing environment processing. This argument is ANSI compatible in C, but not in C++【#5】.

envp保存了系統(tǒng)環(huán)境變量, 以NULL結(jié)束,所以可以使用 envp[i]來(lái)判斷是否打印完畢

  1. 許多unix操作系統(tǒng)普遍擴(kuò)展了對(duì)envp的支持

  2. 保存了一個(gè)用戶環(huán)境變量的字符串,以NULL結(jié)束

  3. envp可是是char[]類型 也可以使char*類型,

  4. envp一旦傳入,它就是單純的字符串,不會(huì)隨著程序動(dòng)態(tài)設(shè)置發(fā)生變化,可以使用putenv函數(shù)修改變量,也可是用getenv函數(shù)查看變量,但是envp本身不會(huì)發(fā)生變化

  5. 對(duì)ANSI版本兼容,對(duì)C++不兼容

    可能的應(yīng)用場(chǎng)景

    1. 為程序提供參考,可以方便的傳入當(dāng)前系統(tǒng)運(yùn)行的環(huán)境變量
    2. 如果程序在運(yùn)行過(guò)程中修改了環(huán)境變量, 可以使用此參數(shù)進(jìn)行環(huán)境變量的恢復(fù)。

補(bǔ)充

通過(guò)進(jìn)一步的查詢

main函數(shù)的envp參數(shù)不是在POSIX中規(guī)定的,而是作為一個(gè)擴(kuò)展來(lái)指定的

envp參數(shù)提供了一個(gè)與envrion相同的功能,盡管此功能在UNIX系統(tǒng)上得到廣泛實(shí)施,但應(yīng)避免使用此功能,因?yàn)槌朔秶拗仆?,SUSv3中未詳細(xì)說(shuō)明。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容