如何在D中不处理命令行参数?

时间:2015-06-23 20:49:48

标签: arrays d

D中main()入口点的正确说法是

void main(char[][] args)
{

}

但是,如果没有传递任何参数,我怎么知道?如果它是一个数组?

3 个答案:

答案 0 :(得分:5)

  

void main(char [] [] args)

在现代D中,如果您的程序不需要参数,则规范签名为void main(string[] args)void main()

  

但是如果没有传递任何参数,我怎么知道它是一个数组呢?

检查数组的.length属性。如果args.length==1,则没有参数传递给程序。 (参数0总是程序本身,如在C / C ++中。)

答案 1 :(得分:2)

使用string[]

void main(string[] args) {
  // Check args.length
}

您还可以使用std.getopt进行进一步解析。

答案 2 :(得分:1)

正如我们的朋友已经说过的那样,请使用string[] args

import std.stdio;

int main(string[] args) {
  if (args.length == 1) {
    writeln("No arguments given. Aborting execution.");
    return 1;
  }
  writeln(args);
  return 42; // answer to everything
}

如果您有许多参数的相当复杂的情况,我建议您查看std.getopt模块。

以下是std.getopt文档中的示例:

import std.getopt;

string data = "file.dat";
int length = 24;
bool verbose;
enum Color { no, yes };
Color color;

void main(string[] args) {
  auto helpInformation = getopt(
    args,
    "length",  &length,    // numeric
    "file",    &data,      // string
    "verbose", &verbose,   // flag
    "color", "Information about this color", &color);    // enum
  ...

  if (helpInformation.helpWanted) {
    defaultGetoptPrinter("Some information about the program.",
      helpInformation.options);
  }
}