[英]Is it compulsory to write int main(int argc, char *argv[]), can't use some other names instead of argc and *argv[]?
我在這里遇到一些麻煩,在項目選項本身中給Visual Studio提供命令行參數(在'Configuration Properties' - >'Debugging'中)。
我在“ int main(int main_i)
”不起作用后寫了“ int main(int argc)
”。 在MS visual studio屬性頁面的項目命令行參數中,我不確定應該寫什么。 我只想傳遞一個整數來指定文件是讀取還是寫入,因此只需要int argc。 我不需要char *argv[]
。 我在命令行參數文本框中嘗試了一些值,但它在執行時沒有到達exe文件,它顯示了我根本沒有輸入的內容。
你能給我一個簡單的例子來說明我需要在MSVS C ++ Property Pages的命令行參數空間輸入什么嗎? 我根本找不到任何關於如何將命令行參數提供給MSVS的示例。
我也不明白為什么我需要重建整個項目,即使我剛剛修改了命令行參數值?
如果希望程序理解單個整數命令行參數,則仍然必須使用argc
和argv
。 像這樣的東西應該這樣做:
int main(int argc, char *argv[]) {
if (argc < 2) {
fprintf(stderr, "Need a command line argument.\n");
exit(1);
}
int arg = atoi(argv[1]);
// now you have an integer
// do whatever with it...
}
C標准要求main
函數具有特定的參數集。 允許的組合之一是(int, char *[])
。 您可以根據需要為參數命名 ,但它們幾乎總是被稱為argc
和argv
。
這些名稱只是一個完善的約定,你可以使用你想要的任何名稱(雖然它可能引起一些人的注意),但是,我只看到了以指定的順序使用了兩個參數的代碼。
在ANSI之前的日子里,可以簡單地使用int main()
,它仍然是..但是現在通常提供argc
argv
。
您不能只提供其中一個參數。
變量名稱僅適用於編譯器。 它們將轉換為二進制圖像中的地址。 您可以為main傳遞最多3個參數。
這是我試過的 -
int main(int i, char* a[], char* e[])
如您所見,名稱不是正常名稱。 第一個參數是命令行參數的數量,第二個參數是實際的參數數組,第三個是環境變量數組。
事實上,主要可以采取任何數量的論點,但其余的,在第三個之后將是無效的。 這仍然會編譯 -
int main(int i, char* a[], char* e[], char* j[])
只是為了好玩,你甚至可以這樣做 -
int main(int i, float a, float b, float c, float d, float e)
即使是簡單的main
也是允許的,你仍然可以訪問這些參數。
int main()
{
int nArgCount = __argc;
char** pArgs= __argv;
printf("Argument Count: %d\n", nArgCount-1);
printf("Arguments:");
for(int nIndex = 1; nIndex<nArgCount; ++nIndex)
printf("%s, ", pArgs[nIndex]);
}
您還可以使用GetCommandLine
函數來訪問命令行。 沒有/使用main
參數的重要方面是你仍然可以在任何函數中訪問命令行參數 。
和其他提到的一樣,這只是一個方便的問題,Kernighan和Ritchie在第一個C版本中使用了這些參數。
你可以自由使用任何東西。
這是一個簡單的例子:
#include <iostream>
int main(int arglen, char *args[])
{
std::cout << "Running: " << *args << std::endl;
while (--arglen > 0)
std::cout << *++args << std::endl;
return 0;
}
我使用Visual C ++ 2010 Express。 如果這樣做,可以按Alt + F7以顯示項目屬性,轉到“配置屬性”>“調試”,然后在“ Command Arguments
鍵入命令行Command Arguments
。
而已。
如果要讀取命令行參數的值,則必須使用char *argv[]
。 否則你可以放棄它。
如果您只想要一個整數來區分兩件事,那么您有一種方法可以做到這一點。 只需傳遞一個命令行參數,不要傳遞任何其他參數。 現在你不需要char *argv[]
。 現在只傳遞一個命令行參數,然后argc
值為2
,即可執行文件的名稱+命令行參數。
如果你沒有傳遞命令行參數,那么它的值只有1
,即可執行文件的名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.