我正在尝试编写一个接受命令行参数的函数。在谷歌搜索上我得到了很多点击,但都使用命令行参数和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或任何其他程序中调用,如何编写它,即用户定义的名称函数。
答案 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