【问题标题】:command line arguments to execute a C++ program执行 C++ 程序的命令行参数
【发布时间】:2018-10-05 21:37:40
【问题描述】:

这是我的 c++ 程序的主要部分:

void main(int argc, char** argv, Arguments& arguments)

第一个参数是一个文件,其余的是布尔值。
我想知道命令行编译程序的正确语法是什么。
我试过了:

gcc  -o "argument1" "argument2" "argument3" prog.cpp  

和

g++ -std=c++11 -o "argument1" "argument2" "argument3" prog.cpp

但我收到此错误:

linker command failed with exit code 1 (use -v to see invocation)

我怀疑我没有正确传递参数,因此我的程序没有正确链接到输入文件 (argument1)。
谢谢你纠正我。

【问题讨论】:

  • 这不是main 的有效原型。
  • 您不要使用gcc 来运行C++ 程序。您将 C++ 程序编译为可执行文件。然后你运行可执行文件,例如从你的 shell。
  • 这可能是学术界的说法。
  • 您还应该使用g++ 来编译C++。 (或者给gcc传递正确的参数,这对任何人来说都太麻烦了,所以使用g++。)
  • 有好书列表here.

标签: c++ linux command-line


【解决方案1】:

主参数和命令行参数

Main 可以有two forms 之一:

int main()
int main(int argc, char** argv)

在第一种形式中,您不能传递任何参数。 在第二种形式中,argc 是在命令行上传递的参数的计数,argv 是长度为argc 的char*(c 样式字符串)数组,其中包含命令行参数。

因此,例如,如果您将程序称为

./program apple bananna carrot date

那么argc 将等于 5,argv 将包含以下值:

argv[0] = "./program" -- the name of your program as called on the command line. 
argv[1] = "apple"
argv[2] = "bananna"
argv[3] = "carrot"
argv[4] = "date"

编译和运行你的程序

C++ 不是解释型语言,因此必须进行编译。假设您的源代码位于一个名为 program.cpp 的文件中,并且您希望您的可执行文件名为 program,那么您将调用 g++,如下所示:

g++ -o program program.cpp

如果您 ls 当前目录,您现在应该在源代码旁边的目录中看到一个名为 program 的文件。您现在可以运行该程序(再次假设您将输出文件命名为program)

./program arg1 arg2 arg3

字符串arg1、arg2 和arg3 将如上所述传递到main。

【讨论】:

  • 请注意,实现通常允许第三种形式,int main (int argc, char *argv[], char *envp[]);
【解决方案2】:

主函数定义如下:

int main (int argc, char *argv[])

或

int main (int argc, char **argv)

据我了解,argc = 参数计数和 argv = 参数向量。 argc 是参数的数量(您可以选择多少),而 argv 包含该数量的参数,其中包含您要从命令行传递给程序的所有实际数据。但请记住,至少有一个参数是第一位的:程序的名称。

这些不是在编译期间而是在运行时使用的。运行程序与编译和链接不同,编译和链接必须先完成(在你的情况下使用 gcc)。

【讨论】:

    【解决方案3】:

    看来你是新人,因为你混的很多!

    首先你必须编译你的程序。对于 cpp 程序,通常使用 g++。所以用

    编译它
    g++ -Wall -o prg prg.cpp
    

    之后你必须修改你的访问权限

    chmod +x prg
    

    能够调用程序。

    现在你可以用你的参数调用你的程序了:

    ./prg arg1 arg2 arg3
    

    【讨论】:

    • 在大多数系统上,由 g++ 创建的可执行文件会自动标记为可执行文件,因此不需要chmod。 (如果没有,你可能有一个奇怪的umask 设置。)
    【解决方案4】:

    C++编码/程序执行过程如下(至少对于简单的一文件程序):

    第 1 步:编写代码,例如在名为 prog.cpp 的文件中

    第 2 步:将代码编译为可执行文件。在我们的例子中,g++ -o myprog prog.cpp

    第 3 步:执行程序。在我们的例子中,myprog "argument1" "argument2" "argument3"

    【讨论】:

      猜你喜欢
      • 2012-01-03
      • 2013-01-27
      • 1970-01-01
      • 2016-02-22
      • 2016-10-26
      • 2010-09-18
      • 2011-04-21
      • 2012-11-06
      相关资源
      最近更新 更多