如何在C ++ / C中处理getopt平台依赖

时间:2011-10-17 19:07:00

标签: c++ getopt

以下是我使用getopt的小代码片段在我的linux机器上运行良好,但在solaris机器上运行不正常。这是我在互联网上找到的标准代码段。

while ((c = getopt(argc, argv, "ab:")) != -1) {
  cout << "I am solaris, I dont come here \n";
  switch(c) {
    case 'a':
    case 'b':
  }
}

现在我的linux机器上没有问题。它做得很好。但是在我的solaris机器上,它甚至没有进入while循环,因此它不会为我解析任何东西。 我在我的solaris机器上检查了“man getopt”(因为我认为在shell中使用了getopt),它只是说在下一个主要版本中不支持getopt。

那么我怎样才能让它在我的solaris机器上运行。我不想使用提升。

由于 D. L. Kumar

1 个答案:

答案 0 :(得分:1)

如果正如你所说的那样Solaris在下一个主要版本中不支持getopt,那么当你不在GNU / Linux上编译时,你需要使用你自己的IF / DEF宏。这方面的事情:

#IFDEF _SOLARIS_
for (int index=0; index < argv; ++index)
{
  c = argc[index];  
  switch(c) {
    case 'a':
     // do your code
    case 'b':
     index++;
     if (index < argc)
       PARAMATER = arg[index]; // plucks the parameter
     else
       HANDLE MISSING ERROR
     // do your code
  }
}
#ELSE
while ((c = getopt(argc, argv, "ab:")) != -1) {
  cout << "I am solaris, I dont come here \n";
  switch(c) {
    case 'a':
    case 'b':
  }
}
#ENDIF