opcje.c

/*
 * plik ma na celu prezentację podstawowych zagadnień z programowania w języku C / C++
 * prezentuje korzystanie z funkcji parsujących ospcje programu
 *
 * zobacz tez: man getopt_long
 *
 */

// dla wypisywania:
#include <stdio.h>

// dla obsługi opcji:
#include <getopt.h>

// dla CHAR_MAX:
#include <limits.h>

// deklaracje numerów wyboru dla opcji długich nie posiadających krótkich odpowiedników
// CHAR_MAX + 1 => numery zaczynają się tam gdzie kończą się numery
// odpowiadające kodom pojedynczych znaków ...
enum {
  OPCJA_PIERWSZA = CHAR_MAX + 1,
  OPCJA_DRUGA,
  OPCJA_TRZECIA
};

// struktura przechowujaca informacje o opcjach programu ...
// nazwa_dluga, czy_wymaga_argumentow, zmienna_do_ustawienia, nazwa krotka
static struct option opcje [] =
{
  {"wymaga-argumentu", required_argument, NULL, 'w'},
  {"moze-miec-argument", optional_argument, NULL, OPCJA_PIERWSZA},
  {"kolejna", no_argument, NULL, OPCJA_DRUGA},
  {"i-jeszcze-jedna", no_argument, NULL, OPCJA_TRZECIA},
  {0, no_argument, NULL, 'v'},
  {0, 0, 0, 0}
};
  
int main(int argc, char *argv[]) {
  int opcja;
  while((opcja = getopt_long(argc, argv, "w:vh", opcje, 0)) != -1) {
    switch (opcja) {
      case 'v':
        printf("Podana opcja -v\n");
      break;
      case 'w':
        printf("Podana opcja -w z argumentem %s\n", optarg);
      break;
      case OPCJA_PIERWSZA:
        printf("Podana opcja --moze-miec-argument z argumentem %s\n", optarg);
        if (!optarg)
          printf("  bez argumentu\n");
      break;
      case OPCJA_DRUGA:
        printf("Podana opcja --kolejna\n");
      break;
      case OPCJA_TRZECIA:
        printf("Podana opcja --i-jeszcze-jedna\n");
      break;
      default:
        printf("nie podano opcji ...\n");  
    }
    printf("  zczytałem opcje do argv[%d] wlacznie\n", optind );
  }
  
  printf("XXX: %d\n", wyswietl_pomoc);
  
  return 0;
}

XHTML generated by highlight (http://www.andre-simon.de/) from opcje.c



Copyright (c) 1999-2015, Robert Paciorek (http://www.opcode.eu.org/), BSD/MIT-type license


Redystrybucja wersji źródłowych i wynikowych, po lub bez dokonywania modyfikacji JEST DOZWOLONA, pod warunkiem zachowania niniejszej informacji o prawach autorskich. Autor NIE ponosi JAKIEJKOLWIEK odpowiedzialności za skutki użytkowania tego dokumentu/programu oraz za wykorzystanie zawartych tu informacji.

This text/program is free document/software. Redistribution and use in source and binary forms, with or without modification, ARE PERMITTED provided save this copyright notice. This document/program is distributed WITHOUT any warranty, use at YOUR own risk.

Valid XHTML 1.1 Dokument ten (URL: http://www.opcode.eu.org/programing/c_cpp/opcje.c) należy do serwisu OpCode. Autorem tej strony jest Robert Paciorek, wszelkie uwagi proszę kierować na adres e-mail serwisu: webmaster@opcode.eu.org.
Data ostatniej modyfikacji artykulu: '2014-01-07 19:27:41 (UTC)' (data ta może być zafałszowana niemerytorycznymi modyfikacjami artykułu).