서론
최근 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://namu.wiki/w/C%EC%96%B8%EC%96%B4

최근댓글