반응형
'/*' 주석처리의 단점
C에서 여러 라인을 한 번에 주석 처리할 때는 '/*'를 사용할 수 있다. 그러나 '/*'는 다음과 같은 단점을 가지고 있다.
단점. 주석 내부의 주석
1~3까지 print 할 수 있는 라인들이 주석처리되어있었다고 하자. 이후 디버깅을 위해 1~3이 포함된 A~E까지의 print문도 주석 처리하고 싶다. 그래서 A부터 E까지 주석 처리하면 주석 내부에 주석이 중첩되는 문제로 마지막 라인에서 오류가 발생한다. 이를 해결하기 위해서는 1~3까지의 주석을 제거하는 방법 등의 다른 방법을 취해야 한다. 한마디로 귀찮아진다.
원본
printf("A\r\n");
printf("B\r\n");
printf("C\r\n");
/*
printf("1\r\n");
printf("2\r\n");
printf("3\r\n");
*/
printf("D\r\n");
printf("E\r\n");
주석 추가 - 오류발생
/*
printf("A\r\n");
printf("B\r\n");
printf("C\r\n");
/*
printf("1\r\n");
printf("2\r\n");
printf("3\r\n");
*/
printf("D\r\n");
printf("E\r\n");
*/
최근에 어떤 SDK를 사용하고 있는데, 이 SDK는 단일 라인의 주석을 '//' 대신 '/*'를 사용하고 있다. C99부터 '//'가 표준으로 포함되었기 때문에 경력이 오래된 개발자의 습관인가 생각하고 있는데, 이유가 어쨌건 같은 이유로 이것도 주석 처리할때 귀찮아진다.
/*
printf("A\r\n");
printf("A\r\n"); /* comment */
printf("A\r\n");
*/
'#if'로 '/*'의 단점을 해결할 수 있다.
'/*'와 마찬가지로 "#if0 ~ endif"로 여러 라인을 주석처리할 수 있다.
#if 0
printf("A\r\n");
printf("B\r\n");
#endif
위 코드는 A, B print문이 주석처리된다.
그리고 '#if 0' 대신 '#if 1'로 바꾸면 간편하게 주석이 해제된다.
#if 1
printf("A\r\n");
printf("B\r\n");
#endif
이는 '#if 0 ~ #endif' 내부에 '#if ~ #endif', '/*'가 있더라도 컴파일 오류가 발생하지 않는다.
#if 0
#if 1
printf("A\r\n"); /* comment */
#endif
#if 0
printf("B\r\n");
#endif
#endif
최근댓글