이전 포스트로 '명령 인자 처리에 대한 고민...'이란 글을 썼었다.
명령인자를 처리하는데 있어 가능한 정확하고 편하게 쓰게 하기 위해서 파서를 도입해야 하는 생각까지 했었는데...
역시 선배님들은 위대하시다...또는 내가 조금만 검색해봤어도 알아내지 않았을까 싶다.

위의 고민거리를 한방에 날려줄 함수 이름은 getopt와 getopt_long이다.
이 함수를 알고 제대로 이해해서 적용해보니 40라인에 육박했던 것이 60라인으로 늘어났다!?
하지만 getopt_long에서 책임주체가 되어 처리를 해주니 난 각 분기에 따른 설정만 해주면 된다. 코드를 보기 훨씬 쉬워졌다.
라인수는 기존 40라인에서 처리 못하고 있던 예외를 getopt에서는 처리해 주기 때문에 비교가 안될 것으로 보인다.
여튼 보기 좋다. 아래는 내가 적용해본 코드의 일부이다. 변수 선언은 굳이 기재 안해도 될 것 같음.

do {
    opt = getopt_long(argc, argv, sOpt, lOpt, NULL);
    switch(opt)
    {
        case 'u':
        case 'U':
            sUser = strdup(optarg);
            break;

        case 'd':
        case 'D':
            sMode = 1;
            break;

        case 'f':
        case 'F':
            sForce = 1;
            break;

        case 'h':
        case 'H':
            prtUsage(stdout);
            exit(0);
            break;

        case '?':
            prtUsage(stderr);
            exit(1);
            break;

        case -1:
            break;

        default:
            abort();
    }
} while (opt != -1);

아래의 내용은 http://blog.naver.com/pjfile/40012816089에서 가져왔다. 해당 블로그에 예제와 함께 더 자세히 나와있음.