2013-08-18 96 views
-3

如何使用gcc將變量傳遞給C程序?如何使用gcc將變量傳遞給C程序

例如

gcc -o server ./server.c --host=localhost --port=1234 

如何訪問我的代碼,這些變量?

謝謝。

+6

這並不完全清楚。如果你在談論命令行參數,那麼這是一個* runtime *的東西,而不是* compile-time *的東西。 –

+3

查看'gcc'的'-D'選項。 –

回答

4

你的問題不清楚;至少有兩件事情可能會被問到:如何訪問在程序運行時傳遞給程序的命令行參數,以及在編譯程序時如何訪問傳遞給編譯器的參數。

命令行參數:

./server主機=本地主機--port = 1234

這些經由參數存取以main()

int main(int argc, char *argv[]) { 
    for (int i=0; i<argc; ++i) { 
    std::cout << argv[i] << '\n'; 
    } 
} 

getopt是一個相當解析這些命令行選項的常用方法,儘管它不是C或C++標準的一部分。

編譯參數:

你一定不能訪問傳遞到編譯器的參數,但參數可以檢測你發現他們通過更改編譯環境。例如,如果編譯器採用啓用語言功能的選項,則可以通過檢測功能是否啓用來檢測該選項何時通過。

的gcc -std = C11的main.cpp

int main() { 
    #if 201112L <= __STDC_VERSION__ 
    printf("compiler was set to C11 mode (or greater).\n"); 
    #else 
    printf("compiler set to pre-C11 mode.\n"); 
    #endif 
} 

此外,您可以直接定義在命令行參數的宏編譯器,該方案將能夠訪問。

GCC -DHELLO =「WORLD」的main.cpp

int main() { 
    #if defined(HELLO) 
    printf("%s\n", HELLO); 
    #else 
    printf("'HELLO' is not defined\n"); 
    #endif 
} 
0

如果你想在編譯時定義他們看到-D PARAM,如果你想在運行時使用類似

來定義它們
int main(int,char**); 
int main(int argsc/*argument count*/, char**argv/*argument vector*/) 
{ 
    int i; 
    for(i=0;i<argsc;i++) 
    { 
     printf("%s\n",argsv[i]); 
    } 
    return 0; 
} 
0

如果要將變量傳遞給程序執行,可以使用環境變量。就像這樣:

char* myOption = getenv("MY_OPTION_NAME"); 
if(!myOption) myOption = "my default value"; 
//Do whatever you like with the value... 

當你罵你的程序,你可以通過之前賦予它們程序名稱直列設置的變量:

MY_OPTION_NAME="foo" ./server 

你也可以設置環境變量一勞永逸全部使用

export MY_OPTION_NAME="foo"