2 min read

diff 팁 두 가지

diff 팁 두 가지
Photo by Pass Horizon / Unsplash

오늘 diff의 man 페이지를 보다 새로운 기능을 알았습니다. 다음은 설명을 위해 diff를 돌릴 소스 파일들입니다. test() 함수 내의 printf()에 들어가는 문자열이 서로 다릅니다.

// a.c
#include <stdio.h>

int test()
{
    int i;

    for(i = 0; i < 100; i++) {
        printf("%d\n", i);
    }
    return 0;
}

int main(void)
{
    test();
    return 0;
}
// b.c
#include <stdio.h>

int test()
{
    int i;

    for(i = 0; i < 100; i++) {
        printf("NUM: %d\n", i);
    }
    return 0;
}

int main(void)
{
    test();
    return 0;
}

1. diff할 때 서로 내용이 다른 함수 이름을 같이 보기

첫번째로, -p 옵션을 주면 두 소스 코드에서 다른 내용을 담은 함수의 이름을 같이 보여줍니다.

명령:

diff -p a.c b.c

결과:

*** a.c 2007-11-08 21:09:52.000000000 +0900
--- b.c 2007-11-08 19:49:57.000000000 +0900
*************** int test()
*** 5,11 ****
        int i;

        for(i = 0; i < 100; i++) {
!               printf("%d\n", i);
        }
        return 0;
  }
--- 5,11 ----
        int i;

        for(i = 0; i < 100; i++) {
!               printf("NUM: %d\n", i);
        }
        return 0;
  }

세번째 줄에 보시면 int test()라고 출력된 것을 볼 수 있습니다.

2. 서로 다른 내용에 선택적 컴파일 구문을 자동으로 넣기

두번째로, -D <macro_name> 옵션을 주면 <macro_name>에 따라 a.c 또는 b.c로 선택적 컴파일을 할 수 있는 소스 코드를 얻을 수 있습니다.

명령:

diff -D PRINT_NUM a.c b.c

결과:

#include <stdio.h>

int test()
{
    int i;

    for(i = 0; i < 100; i++) {
#ifndef PRINT_NUM
        printf("%d\n", i);
#else /* PRINT_NUM */
        printf("NUM: %d\n", i);
#endif /* PRINT_NUM */
    }
    return 0;
}

int main(void)
{
    test();
    return 0;
}

test() 함수 내에 #ifndef ... #else ... #endif 에 의해 선택적 컴파일을 할 수 있는 루틴이 삽입된 것을 볼 수 있습니다.

— END OF POST.