CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ 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)이 있습니다.
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.