簡體   English   中英

是否必須編寫int main(int argc,char * argv []),不能使用其他名稱而不是argc和* argv []?

[英]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的示例。

我也不明白為什么我需要重建整個項目,即使我剛剛修改了命令行參數值?

如果希望程序理解單個整數命令行參數,則仍然必須使用argcargv 像這樣的東西應該這樣做:

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 *[]) 您可以根據需要為參數命名 ,但它們幾乎總是被稱為argcargv

這些名稱只是一個完善的約定,你可以使用你想要的任何名稱(雖然它可能引起一些人的注意),但是,我只看到了以指定的順序使用了兩個參數的代碼。

在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM