1

以下は、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マシンには問題はありません。それは良い仕事をします。しかし、私のソラリスマシンでは、whileループ内にさえ入らないので、何も解析しません。ソラリスマシンで「mangetopt」をチェックしました(getopt in shellが使用されていると思います)。これは、getoptが次のメジャーリリースでサポートされないことを示しています。

それで、どうすればそれを私のソラリスマシンで動作させることができますか?ブーストは使いたくない。

ありがとうDLクマール

4

1 に答える 1

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
于 2011-10-17T19:36:14.023 に答える