Как обрабатывать зависимости платформы Getopt в C ++ / C - PullRequest
1 голос
/ 17 октября 2011

Ниже приведен мой небольшой фрагмент кода с использованием getopt, который хорошо работает на моем компьютере с Linux, но не на компьютере с солярисом.Это стандартный фрагмент кода, который я нашел где-то еще в Интернете.

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

Теперь на моей машине с Linux нет проблем.Это делает хорошую работу.Но на моем солярисе он даже не входит в цикл while, поэтому он ничего не анализирует для меня.Я проверил «man getopt» на моей машине с солярисом (поскольку я думаю, что getopt в оболочке используется), он просто говорит, что getopt не будет поддерживаться в следующем основном выпуске.

Итак, как я могу заставить его работать намой солярисЯ не хочу использовать повышение.

Спасибо DL Kumar

1 Ответ

1 голос
/ 17 октября 2011

Если, как вы говорите, Solaris не собирается поддерживать getopt в следующем основном выпуске, вам придется использовать свой собственный с макросом IF / DEF, когда он не компилируется в GNU / Linux.Что-то вроде этого:

#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
...