서론

최근 C로 만들어진 어느 SDK를 사용하고 있는데, 이 SDK는 단일 라인의 주석처리를 // 대신 /* */를 사용하고 있다. 이것이 꽤나 불편한 게, 특정 범위를 주석처리하기 위해 /* */ 를 사용하려고 하면 내부에 /* */가 있어서 오류가 발생한다. 그래서 #if 등의 다른 방법을 이용하고 있다. 어쨌든 왜 한 줄의 주석처리도 /* */를 사용했는지 궁금해서 C언어 주석에 대해 알아보았다.

 

C99 : 주석 //의 추가

C언어가 만들어진 이후부터 89년 표준안인 ANSI C까지 C언어에서 주석은 /* */ 뿐이었다. 그러다 99년에 나온 표준안인 C99에서 //를 정식으로 지원하기 시작했다. 이와 같이 C언어도 C11, C18로 계속적으로 업데이트 되고 있다. 그렇다고 우리가 버전에 크게 신경 쓸 필요는 없다. 실무에서 대부분은 C99를 사용하고 있으며 일반적인 문법은 C99에서 더 이상 크게 변하지 않았다.

 

/* */ 내부에 /* */를 사용할 수 없는 이유

단일 라인 주석에서 /* */를 사용할 때 가장 불편한것이 다중 라인을 주석 처리하고자 할 때 주석 블록 안에 /* */으로 처리된 주석이 있으면 주석처리가 안된다는 것이다. 이것의 이유는 간단하다. 전처리 과정에서 컴파일러는 /*를 만났을 때 */를 만날 때까지 모든 내용을 주석 처리한다. 따라서 /* /* */ */는 /* /* */까지 주석처리되며 남은 */은 오류를 발생시킨다.

 

/* */의 단점을 해결하는 방법

#if의 방법을 사용하면 /* */ 내부에 /* */를 사용할 때 발생하는 문제를 해결할 수 있다. 관련 내용은 아래 포스트에 있다.

 

 

[C] /*의 단점을 해결하는 #if

'/*' 주석처리의 단점 C에서 여러 라인을 한 번에 주석 처리할 때는 '/*'를 사용할 수 있다. 그러나 '/*'는 다음과 같은 단점을 가지고 있다. 단점. 주석 내부의 주석 1~3까지 print 할 수 있는 라인들이

hydroponicglass.tistory.com

 

결론

이제 위에서 얻은 정보를 바탕으로 단일라인에서 /* */를 사용하는 이유를 추측하자면, C99 이전부터 개발한 개발자의 습관이거나 사용한 SDK가 임베디드 소프트웨어였기 때문에 장비 혹은 다른 소프트웨어와의 호환성을 고려한 것이 아닐까 싶다. 임베디드 소프트웨어는 타 분야대비 발전속도가 느린편이라 장비를 포함한 연관된 다른 소프트웨어의 버전이 낮을 가능성이 있다.

사실 위의 이유만으로는 추측에 대한 근거가 부족해서 더 많은 정보를 찾아보려고 했지만 소득이 없었다. 추후에 정보를 더 얻게되면 업데이트할 예정이다.

 

참고

https://docs.microsoft.com/en-us/cpp/c-language/c-comments?view=vs-2019

https://edu.goorm.io/learn/lecture/201/%ED%95%9C-%EB%88%88%EC%97%90-%EB%81%9D%EB%82%B4%EB%8A%94-c%EC%96%B8%EC%96%B4-%EA%B8%B0%EC%B4%88/lesson/401190/c-%EC%96%B8%EC%96%B4-%ED%91%9C%EC%A4%80

https://namu.wiki/w/C%EC%96%B8%EC%96%B4