Re: Нужен ли bash
>>> Не вопи. Гнушники параметры не переставляют.
AC>> Переставляют.
> Обосновать можно?
Обоснование уже было. Ну ладно, я повторю укороченный вариант.
0 ~>cat ~/prjs/g++/main.c
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
int main(int argc, char * const argv[])
{
int opt;
while((opt = getopt(argc, argv, "ab:c"))!=-1)
{
switch(opt)
{
case 'a':
printf("option 'a' found\n");
break;
default:
abort ();
}
}
for (opt = optind; opt < argc; opt++)
printf("argument after options: %s\n", argv[opt]);
return 0;
}
0 ~>cc ~/prjs/g++/main.c
0 ~>./a.out f1 -a f2
option 'a' found
argument after options: f1
argument after options: f2
0 ~>
Опция -a переставлена в начало argv, типа прозрачно для меня с нарушением
декларации
int getopt(int argc, char * const argv[], const char *optstring);
NetBSD, FreeBSD и Interix ведут себя в этой ситуации корректно.
>>> Уже не говоря о том, что пример ты в полемическом запале привел на
>>> редкость неудачный. Даже при вольном выдирании опций программа с таким
>>> usage работать будет.
AC>> Нет, не будет. Потому как программа в расчете на НОРМАЛЬНЫЙ getopt(3)
AC>> написана в расчете на ТРИ параметра после опций.
> А, ну да, у тебя там опции... Причем жуткая смесь из односимвольных
> опций и такого вот оператора... Тогда да, не будет. Впрочем, примерно
> по той же причине, по которой типичный плюсовый компилятор неправильно
> компилирует сишную программу.
"Вопрос не понят, куда вам надо?"(С)
В чем полет мысли? eq/ne/lt/le и тд абревиатуры изобретены AFAIR еще в
самых первых версиях фортрана, если не раньше, только, кажется, там
были точки по бокам, и с тех пор никуда не девались. Они используются
повсеместно до сих пор.
--
Best regards, Aleksey Cheusov.
Reply to: