[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: