본문 바로가기

c언어

주석에 관한 글(#if 0 , /* */)

안녕하세요, 오늘은 C언어의 주석 처리 방법인 '#if 0'  '#endif'에 대해 이야기하려 합니다. 이 포스트에서는 이 방법의 장점과 함께, 컴파일 과정에서의 활용법에 대해서도 다루어 볼 예정입니다.

 

보통 코드를 주석 처리한다고 할때 코드 블럭의 앞과 뒤를 /*  */로 묶어서 주석 처리를 하거나, 매 코드 라인단위마다 앞에 //를 붙이는 경우가 많습니다.

 

예를 들면

/*
printf("hello world!");
*/

혹은

//printf("hello world!");

이렇게들 많이 쓰시는 것 같습니다. ( 저 또한)

 

그렇다면 왜 아래와 같이 사용하는 걸까요?

#if 0 
printf("hello world!");
#endif

 

 

장점: 

그럼 이 방식의 장점은 무엇일까요? 가장 큰 장점은 블록 단위의 주석 처리가 가능하다는 점입니다. 즉, 여러 줄에 걸친 코드를 한 번에 주석 처리할 수 있습니다.

또한, '#if 0'과 '#endif'를 사용하면 주석 안에 주석이 들어가는 상황을 피할 수 있습니다. 기존의 '/* */' 방식을 사용하면 주석 안에 주석을 넣는 것이 어렵지만, 이 방식을 사용하면 그런 문제를 피할 수 있습니다.

 

"#if 0"과 "#if 1"의 활용은 주석의 적용과 해제를 간편하게 관리할 수 있게 합니다. 즉, 이 방식을 사용하면 전체 주석 표현을 새로 작성하거나 삭제하는 대신, 단순히 '0'을 '1'로 바꾸는 것만으로 코드의 주석 처리 상태를 쉽게 변경할 수 있습니다. 이는 코드 관리를 보다 효율적으로 할 수 있게 돕는 장점입니다.

 

컴파일 과정에서의 활용법:

마지막으로, 이 방식은 컴파일 과정에서도 유용하게 활용될 수 있습니다. 컴파일러에게 명령을 내릴 때 '-D' 옵션을 사용하여 '#if 0'을 '#if 1'로 변경하면, 주석 처리된 코드 블록을 다시 활성화할 수 있습니다.

예를 들면, 컴파일 과정에서 '-D_TEST'라는 옵션을 적용하게 되면 이 옵션은 특정 코드 부분의 활성화나 비활성화를 제어할 수 있게 해줍니다.

 

이런 코드가 코드가 있다고 가정해봅시다.

특별한 옵션 없이 컴파일을 하면 결과가 어떨까요?

this is test1

this is test 2 는 나오지 않는 모습을 볼 수 있습니다. 하지만 -D_TEST 옵션을 적용해보면 결과는 다르게 나옵니다.

this is test1+2

clang -o test "-D_TEST" 옵션을 추가하면 결과 값이 다르게 나오는 것을 알 수 있습니다.

 

마치며: 

 직장 동료분의 주석 처리 방식을 다른 분들과 공유하고 싶어 글로 남겨 봤습니다. 더워지는 날씨속에서 모두 건강하시길 바랍니다.