건프의 소소한 개발이야기

[고급 C] Debug Message 잘 보는 방법 (3) - 매크로함수 정의하여 사용하기 본문

개발 이야기/고급 C 이야기

[고급 C] Debug Message 잘 보는 방법 (3) - 매크로함수 정의하여 사용하기

건강한프로그래머 2016. 5. 1. 09:47

안녕하세요, 건프입니다.


이번에는 C에서 매크로 함수를 이용해서 효율적으로 디버그로그를 찍는 방법을 알아봅니다.


다음 소스코드는 매크로로 함수를 만들었을때를 눈으로 확인하기 위한 예제코드입니다.



SUM 함수는 정수 더하기

str1 : 두 문자열 연결

STRCAT_1 : 문자열 연결

STRCAT_2 : 말그대로 문자의 연결 => #x 는 x에 큰따옴표("")를 양쪽에 씌워달라는 것을 뜻합니다. 

STR : 넘어온 인자에 "" 로 둘러싸기




여기서 눈여겨 볼 부분은 str6 와 str7인데요.

str6 은 MARGE_1을 이용해서, 글자그대로 str 이랑 1 이랑 이어서, str1 이 str6에 들어갑니다. 따라서 string1string2 이라는 값이 str6에 대입되었습니다.

반면 str7은 MARGE_2를 이용해서 "str2" 라는 것이 str7에 대입됩니다.

이것이 #x 를 쓴것과 안쓴것의 명확한 차이입니다.


만약 전처리기가 진행한 중간과정을 확인하고 싶으시다면, 컴파일 하실때 다음과 같은 옵션으로 진행하시면 됩니다.


gcc (소스코드.c) --save--temps -o (프로그램명) 


이렇게하면, 여러가지 임시파일들이 사라지지않고 우리가 확인해볼 수 있는데,

여기서 소스코드.i 파일을 열어 확인해보시면



이런식으로 str1 부터 str7까지 값이 매크로함수에 의해 들어가게 됨을 알 수 있습니다.


자 그럼 이를 어떻게 응용할 수 있을까요??


이렇게 DEGMEG 함수를 작성합니다.

msg 와 가변인자로 넘기고,

그 뒤를 다음과 같이 표준에러로 뽑는데, 변환명세가 들어왔을때, 받아서 printf() 함수처럼 관리할 수 있는 법이 바로 저기 ##__VA_ARGS__ 를 쓰는 것입니다.


실행시켜보면 위와 같이 결과가 나오게 만들 수 있습니다 :)


거의 도착했습니다.





Comments