如何在c++ /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机器上工作呢?我不想使用boost

谢谢D. L. Kumar

如果,如您所说,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

最新更新