2016-05-03 19 views
-2

コマンドライン引数を受け入れる関数を記述しようとしています。 Google検索では、それほど多くのヒットを得ましたが、主な機能を持つコマンドライン引数はすべて以下のようなものです。メイン関数以外のCPPでコマンドライン引数を使用する

#include <iostream> 

int main(int argc, char** argv) { 
    std::cout << "Have " << argc << " arguments:" << std::endl; 
    for (int i = 0; i < argc; ++i) { 
     std::cout << argv[i] << std::endl; 
    } 
} 

私はすでに主な機能を持っていると私はメインまたは他のプログラムで、後で呼び出し可能な別の関数を、書きたい場合は、どのようにそれを書くために、ユーザ定義の名前を持つすなわち機能。

+2

あなたがメソッドを書きたい、しかし、あなたも引数を渡す方法を理解していない場合は...多分、あなたは教育少数のより多くの時間を費やしたはずです自分の好きな言語の初心者の基礎について語りましょう。これは侮辱ではありませんが、次のステップを実行する前に、最も重要な概念を実際に理解する必要があります。 – GhostCat

+0

@Jägermeisterご意見ありがとうございます。 :) – AwaitedOne

+1

[C++のargc argvのmain()の外側にある可能性のある複製](http://stackoverflow.com/questions/12862798/c-process-argc-argv-outside-of-main) – gdlmx

答えて

2

引数を使用できるようにするには、メソッドに転送するだけです。このように、

void printArguments(int argc, char** argv) { 
    std::cout << "Have " << argc << " arguments:" << std::endl; 
    for (int i = 0; i < argc; ++i) { 
     std::cout << argv[i] << std::endl; 
    } 
} 

int main(int argc, char** argv) { 
    printArguments(argc, argv); 
} 

を...またはグローバル変数に格納します:たとえば:

void my_method(int argc, char** argv) { 
    cout << "Num args: " << argc << endl; 
} 

int main(int argc, char** argv) { 
    my_method(argc, argv); 
} 
+0

使い方それらはヘッダファイルにあります。 'extern int argc'と' extern char ** argv'と 'int argc'と' cpp'ファイルの 'char ** argv'を定義し、' main.cpp'のように 'int main(int argc、char * * argv) '。それは正しいですか? – AwaitedOne

1

あなたはこのように、あなたが呼び出す関数に渡すことができますいずれか

int mainArgc; 
char** mainArgv; 

void printArguments() { 
    std::cout << "Have " << mainArgc << " arguments:" << std::endl; 
    for (int i = 0; i < mainArgc; ++i) { 
     std::cout << mainArgv[i] << std::endl; 
    } 
} 

int main(int argc, char** argv) { 
    mainArgc = argc; 
    mainArgv = argv; 
    printArguments(); 
} 
+0

ヘッダーファイルでそれらを使用する方法。 cppファイルの 'extern int argc'と' extern char ** argv 'と' int argc'と 'char ** argv'を定義し、 'main.cpp'のように' int main(int argc、char ** argv ) '。それは正しいですか? – AwaitedOne

1

関数に引数を渡すことができます。

#include <iostream> 

int my_function(int argc, char** argv) { 
    std::cout << "Have " << argc << " arguments:" << std::endl; 
    for (int i = 0; i < argc; ++i) { 
     std::cout << argv[i] << std::endl; 
    } 
} 

int main(int argc, char** argv) { 
    my_function(argc, argv); 
} 
0

Boostは引数を効果的に処理するユーティリティを提供しています。

他の答えが指摘しているように、この答えに示された関数本体全体を新しい関数に移動し、main()から "argc"と "argv"あなたの新しい機能に。

int 
main(int argc, char *argv[]) 
{ 
    namespace po = boost::program_options; 

    po::options_description desc("Usage: describe usage here [OPTIONS]"); 

    desc.add_options() 
     ("help", "Print usage") 
     ("list,l", po::value<std::string>(), "dummy command taking a value") 
     ; 

    po::variables_map vm; 

    try 
    { 
     po::store(po::parse_command_line(argc, argv, desc), vm); 

     if (vm.count("help")) 
     { 
     std::cout << desc << std::endl; 
     return 0; 
     } 

     if (vm.count("list")) 
     { 
     std::cout << "Dummy command entered" << std::endl; 
     return 0; 
     } 

     po::notify(vm); 
    } 
    catch (po::error& e) 
    { 
     std::cerr << "Error: " << e.what() << std::endl; 
     std::cerr << desc << std::endl; 
     return 1; 
    } 

} 

コンパイル&サンプルOP:

g++ -std=c++11 -Iboost_root/boost -Lboost_root/boost/stage/lib/ Options.cpp -l boost_program_options 


./a.out --list dummy_value 
Dummy command entered 
関連する問題