繁体   English   中英

将参数从Bash命令行传递给函数

[英]Passing parameters to a function from the Bash command line

我正在Bash上的命令行运行C ++程序,该程序位于Linux环境中。 我很好奇你如何从命令行传递一个参数。 这是我的计划:

#include <iostream>
using namespace std;

int large_pow2( int n );

int main()
{
   int value = 15;
   int largest_power = large_pow2(value);

   cout << "The highest power of 2 in " << value << " is " << large_power << "." << endl;

   return 0;
} 

int large_pow2( int n )
{
   int i = n
   int j = i & (i - 1);
   while( j != 0)
   {
      i = j;
      j = i & (i - 1);
   }
   return j;
}

编译程序后,我希望能够使用命令行传入一个用于value 例如,要运行您输入的程序./"program_name"其中"program_name"是我的程序名称,不带引号。 有没有办法设置value = n或其他什么? 当我运行该程序时,假设我希望n20所以在命令行中输入类似./"program_name" 20 然后程序将以n = 20运行。 有没有办法做到这一点? 我是Linux环境和Bash的新手,所以还不太清楚如何处理它。

int main(int argc, char *argv[])使用argcargv并相应地修改代码。

argc参数跟踪从CLI传递给您的程序的参数数量,并且始终> = 1。 1是程序的名称。 所以argc[0]是程序名。

argv包含命令行参数,而不是程序名,并且始终是char字符串。 因此,如果你不想要字符串,我们需要像atoi一样使用适当的转换器。

所以你的代码看起来像是,错误检查不是为了简单起见

int main(int argc, char *argv[])
{
    //Now we expect argc ==2, program value, This will when argc != 2
    // We should use if in real scenario
    assert(argc == 2);
    int value = atoi(argv[1])
    int largest_power = large_pow2(value);

    cout << "The highest power of 2 in " << value << " is " << large_power << "." << endl;

    return 0;
} 

你的main方法可以采用(int argc,char ** argv)这是参数的计数和NUL终止的args。 程序路径是argv [0]所以atoi(argv [1])可能就是你想要的。 检查argc == 2。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM