반응형

'/*' 주석처리의 단점

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