在主要功能

时间:2016-05-03 10:55:09

标签: c++ function

我正在尝试编写一个接受命令行参数的函数。在谷歌搜索上我得到了很多点击,但都使用命令行参数和main函数,如下所示。

#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;
    }
}

如果我已经有一个main函数并且我想编写另一个函数,稍后可以在main或任何其他程序中调用,如何编写它,即用户定义的名称函数。

4 个答案:

答案 0 :(得分:2)

如果您希望参数可用,您可以将它们转发到您的方法。例如:

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

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

答案 1 :(得分:1)

您可以将它们传递给您调用的函数,如下所示:

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);
}

...或将它们存储在全局变量中,如下所示:

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();
}

答案 2 :(得分: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);
}

答案 3 :(得分: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;
   }

}

编译&amp;样本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