이런식의 디버그 메세지 처리가 성능에 영향을 줄까요?
글쓴이: chocokeki / 작성시간: 화, 2018/04/17 - 9:38오전
안녕하세요
임베디드 환경에서 C언어로 개발을 하고 있습니다
arm-gcc 컴파일러를 사용하고 있구요
디버그 메세지를 시리얼(uart) 포트로 출력하고 있는데요 워낙 시리얼이 느리니 딜레이가 생겨 다음과 같은 방법을 사용하고 있습니다
#define debug_on 1 #if debug_on #define debug_printf printf #else #define debug_printf #endif
debug_printf("%s, %u\n", __func__, __LINE__);
이 방법의 단점은 아시다시피 debug_on을 0으로 설정할 때 컴파일러에서 경고 메세지가 나온다는 점인데요
그래서 머리를 굴려 다음과 같은 방법을 사용했습니다
#define debug_on 1 #if debug_on #define debug_printf printf #else #define debug_printf null_printf #endif inline void null_printf(char *msg, ...) { return ; } ;
이렇게 했더니 일단 warning은 모두 사라졌는데요 궁금한 점이 생겼습니다
이전에는 c문법이 의미없는 것으로 판단해서 print하는 구문 자체가 호출되지 않는데 반해
이후에는 null_printf까지 일단 모든 인자들을 넣고 빼고 return 하는 작업까지도 할 것 같아서 그 부분이 아쉬워서요
이 부분이 아예 빌드될 때 제외되게 하는 뾰족한 방법이 있을까요??
아니면 컴파일러가 return ;로 아무 것도 안 하는 것을 똑똑하게 판단해서 최적화로 제외했을까요??
Forums:
음 ..
- #define debug_printf
+ #define debug_printf(...) (void)0
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
오마이갓...감사합니다
오마이갓...감사합니다
#ifdef DEBUG
---------------
Happy Hacking!
-
-
---------------
Happy Hacking!
댓글 달기