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

发布于 2024-12-10 03:16:21 字数 478 浏览 0 评论 0原文

以下是我使用 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机器上工作呢?我不想使用升压。

谢谢 库马尔

Following is my small code snippet using getopt that works well on my linux machine, but not on solaris machine. It is standard code snippet that I found else where in the internet.

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

Now there is no problem on my linux machine. It does good job. But on my solaris machine, it does not even go inside the while loop, so it does not parse anything for me.
I checked "man getopt" on my solaris machine (as I think getopt in shell is used), It just says getopt will not be supported in the next major release.

So How I could i make it work on my solaris machine. I dont want to use boost.

Thanks
D. L. Kumar

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

匿名的好友 2024-12-17 03:16:21

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

If, as you say, Solaris isn't going to support getopt in the next major release, you'll need to use your own with an IF/DEF macro when not compiling on GNU/Linux. Something along this lines:

#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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文