从不同的二进制名称运行相同的C ++程序

时间:2010-09-14 03:39:02

标签: c++

好的,对于家庭作业,我的教授希望我们用C ++编写一个程序,从英里转换为km。我做了所有这些,程序运行。但是,他有这种特殊的方式来调用该程序:

  

该程序的使用选项基于   在二进制文件的名称上。如果   程序名称是'km2miles',.   程序解释命令行   争论作为公里值   转换为英里。如果名字是   'miles2km',然后它解释为   里程被转换为km。自从   第一个命令行参数,argv [0]   永远都是程序的名字,你可以   使用其值来决定哪个函数   打电话。

我在这个项目中只有3个文件(他告诉我们只有这3个): convert.cpp distance.cpp distance.h

距离.h和.cpp具有将Mi转换为Km和Vice Versa的不同功能,convert.cpp具有主要功能。但是,我知道如何调用此程序(编译后)的唯一方法是:

./ convert 10

其中10是要转换的数字。他说它应该这样称呼:

$ km2miles 100

$ miles2km 60

我不知道如何通过使用不同的名称让程序采取不同的行为......尤其是当该名称甚至不运行程序时!帮助将不胜感激。

4 个答案:

答案 0 :(得分:4)

你可以:

  • 在构建时指定名称,并将其构建两次
  • Windows上的
  • copy convert miles2kms; copy convert kms2miles
  • 在UNIX / Linux上:cp convert miles2kms; cp convert kms2miles
  • UNIX / Linx上的
  • (更好):建立链接或符号链接:ln -s convert miles2kms; ln -s convert kms2miles

在你的程序中,你应该做的事情如下:

#include <string>
#include <iostream>

int main(int argc, const char* argv[])
{
    std::string program_name = argv[0];

    if (argc != 2) {
        std::cerr << "usage: " << program_name << " <value>\n";
        return 0;
    }
    if (/* TODO: what would go here? */)
        ...
    else
        ...
}

答案 1 :(得分:2)

说明已经告诉你如何:

  

由于第一个命令行参数, argv [0]始终是程序名称,因此您可以使用其值来决定调用哪个函数。

     

特别是当该名称甚至没有运行程序时!

如果您正在使用gcc,默认情况下它会生成一个名为a.out的二进制文件,但您可以将其重命名为您想要的任何内容。 (或者,您可以通过-o命令行选项指定输出文件的名称。)

答案 2 :(得分:1)

好吧,他给了你一个关于argv [0]事情的线索。

您是否可以在班级的某个角落讨论符号链接?

我很难在不实际给出答案的情况下提供更多提示。

答案 3 :(得分:0)

如果您不想将相同的代码重新编译为2个不同的可执行文件,则可能需要使用符号链接: http://en.wikipedia.org/wiki/Symbolic_link