C Optionales Argument mit getopt() unter Mac

PoiZz3n

Cadet 2nd Year
Registriert
Sep. 2014
Beiträge
20
Guten Abend,

ich sitze gerade an einer Progammieraufgabe für die Uni und stehe vor folgendem Problem:

Mein Programm soll einen "Benchmark-Modus" enthalten, der beim Aufruf über die Kommandozeile mit dem Parameter "-b" gesteuert werden soll. Es soll optional ein Integer als Argument angegeben werden. Das ganze ist bisher so implementiert:

C:
while ((option = getopt(argc, argv, "k:x:b::")) != -1)
    {
        switch (option)
        {
            case 'x':
                x = atof(optarg);
                break;

            case 'k':
                k =  atof(optarg);
                break;

            case 'b':
                 benchmarkOn = true;

                if (optarg == NULL)
                {
                    reps = 10;
                }

                else
                {
                     reps = atof(optarg);
                }
                break;

            default:
                printf("Syntax: [-x] <float> [-k] <int>");
                printf("\n");
                exit(EXIT_FAILURE);
        }
    }

Wenn -b ohne Argument angeben ist, soll reps auf 10 gesetzt werden, ansonsten eben auf den Wert der übergeben wurde.

Das Problem ist jedoch, dass wenn ich das ganze auf meinem Mac kompiliere und ausführe, nur eine Eingabe mit Argument funktioniert und wenn der Aufruf ohne Argument stattfindet wird folgender Fehler ausgegeben: "./ProgrammName: option requires an argument -- b".

Ich habe das ganze dann mal auf einer Kali-VM laufen lassen und dort hat das ganze wie gewollt funktioniert. Das passt nun soweit, da das Programm primär unter Linux lauffähig sein muss, jedoch würde mich trotzdem interessieren was das Problem ist, wenn ich es auf dem Mac versuche.

Liebe Grüße
 
Das liegt wohl einfach an der Implementation. Für OSX kommt die aus der BSD Library, für Unix aus GNU

In der entsprechenden manpage steht mal nichts von optionalem Argument, da müsstest du dir wohl anders behelfen
 
Zuletzt bearbeitet:
Hmmm verstehe, das hab ich jetzt völlig außer Acht gelassen, obwohl es das naheliegendste ist. :cool_alt:

Vielen Dank!
 
Zurück
Oben