diff 팁 두 가지
오늘 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.