일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 지능형
- Deep Learning
- MySQL
- Machine Learning
- 데이터
- 안드로이드
- 가상환경
- C언어
- Video
- 고급C
- IMAGE
- 디버그모드
- php
- 머신러닝
- 서버
- FLASK
- Android
- 정리
- 라즈베리파이
- Python
- 영상분석
- keras
- tracking
- RapidCheck
- Object Detection
- detection
- sw
- Linux
- tensorflow
- Raspberry
- Today
- Total
건프의 소소한 개발이야기
[고급 C] Debug Message 잘 보는 방법 (3) - 매크로함수 정의하여 사용하기 본문
안녕하세요, 건프입니다.
이번에는 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__ 를 쓰는 것입니다.
실행시켜보면 위와 같이 결과가 나오게 만들 수 있습니다 :)
거의 도착했습니다.
' 개발 이야기 > 고급 C 이야기' 카테고리의 다른 글
[고급 C] Debug Message 잘 보는 방법 (4) - 디버그모드 동적으로 정의하기 (1) | 2016.06.18 |
---|---|
[고급 C] Debug Message 잘 보는 방법 (2) - 표준 입력/출력 (0) | 2016.05.01 |
[고급 C] Debug Message 잘 보는 방법 (1) - 미리 정의된 매크로 이용 (0) | 2016.05.01 |