[ CnUnix ] in KIDS 글 쓴 이(By): dalgong (달공아저씨) 날 짜 (Date): 2004년 9월 16일 목요일 오후 04시 37분 46초 제 목(Title): Re: C Macro | 연장이야 쓰기 나름이긴 하겠지만 매크로만이 가지고 있는 문제중 하나는 | | 소스코드를 컴파일러가 넘겨받기 전에 프리프로세서가 변경하는데에 있고, macro가 바로 이걸 위해 존재하는 거죠. | 결국 동작 결과나 디버거 트레이스, 에러 메세지만으로는 | | 그 원인을 찾기가 무척 힘들어진다는데 있지요. 동작결과로 확인이 가능합니다. 여기서 동작 결과른 macro가 만들어 내는 c source code자체 라는게 다를 뿐입니다. | 매크로가 아닌 다른 방법으로 문제를 해결했다면 최소한 의미있는 에러 메세지가 | | 떨어지거나 최소한 디버거상에서 보이는 코드대로 상식적인 동작을 해 줬겠지요. :) nested if를 잘 못 쓴 경우에 어떤 의미 있는 에러 메세지가 나오나요? 컴파일러는 어차피 시킨 일을 할 뿐입니다. 문제는 디버거에서 동작이 보이는 상식적인(?) 디버거가 없기 때문이겠죠. 디버거가 macro expansion을 보여주면서 tracing해 나가는 그런 놈이 있었다면, 간단히 해결 되었겠죠? macro는 컴파일 될 코드자체를 만들어낼 일종의 언어이기 때문에, macro 정의를 디버깅 하실려면, macro의 수행 결과인 코드가 제대로 만들어 졌는지 확인해야 하는 것입니다. 참고로 gcc -E나 editor에서 제공하는 기능들(예: emacs의 C-c C-e)이 있습니다. |