#define으로 상수를 정의 하면 전처리기가 처리하기 때문에 디버깅중에 매크로 상수값을 확인할 수 없고
const상수는 컴파일러가 처리하기 때문에 디버깅중에 값을 확인할 수 있는 이유가 무엇때문인지
구체적인 내용을 알고 싶습니다.
사실 따지고 들면 좀 더 복잡할 수도 있지만 엄청 단순화해서 얘기하자면...
내가 작성한 C코드 -> [프리프로세서] -> 컴터가 만든 C코드 -> [C 컴파일러] -> 어셈블리코드 -> [어셈블러] -> 실행파일
이런 흐름이라고 할 수 있는데
프리프로세서는 #으로 시작하는 것들을 처리하는 부분으로 예를 들면 #include 어쩌고 되어 있으면 그 어쩌고를 가지고 와서 그 위치에다가 붙히고 등등 작업을 합니다.
즉 #define이라는건 "내가 작성한 C코드"에는 있는데 "컴터가 만든 C코드"에는 없습니다. #define A 10이라고 한다면 A는 없어지고 10만 있게됩니다. 그러니 A가 대체 뭘 말하는건지 모르게 됩니다.
뭐 물론 요즘은 컴파일러가 좋아졌기 때문에 그 A에 대한 정보도 날리지 않고 디버깅정보로 남기게 해서 디버거로 확인가능하게 할 수 있습니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
사실 따지고 들면 좀 더 복잡할 수도 있지만 엄청
사실 따지고 들면 좀 더 복잡할 수도 있지만 엄청 단순화해서 얘기하자면...
내가 작성한 C코드 -> [프리프로세서] -> 컴터가 만든 C코드 -> [C 컴파일러] -> 어셈블리코드 -> [어셈블러] -> 실행파일
이런 흐름이라고 할 수 있는데
프리프로세서는 #으로 시작하는 것들을 처리하는 부분으로
예를 들면 #include 어쩌고 되어 있으면 그 어쩌고를 가지고 와서 그 위치에다가 붙히고 등등
작업을 합니다.
즉 #define이라는건 "내가 작성한 C코드"에는 있는데 "컴터가 만든 C코드"에는 없습니다.
#define A 10이라고 한다면 A는 없어지고 10만 있게됩니다.
그러니 A가 대체 뭘 말하는건지 모르게 됩니다.
뭐 물론 요즘은 컴파일러가 좋아졌기 때문에
그 A에 대한 정보도 날리지 않고 디버깅정보로 남기게 해서 디버거로 확인가능하게 할 수 있습니다.
댓글 달기