#define으로 상수를 정의 하면 전처리기가 처리하기 때문에 디버깅중에 매크로 상수값을 확인할 수 없고
const상수는 컴파일러가 처리하기 때문에 디버깅중에 값을 확인할 수 있는 이유가 무엇때문인지
구체적인 내용을 알고 싶습니다.
사실 따지고 들면 좀 더 복잡할 수도 있지만 엄청 단순화해서 얘기하자면...
내가 작성한 C코드 -> [프리프로세서] -> 컴터가 만든 C코드 -> [C 컴파일러] -> 어셈블리코드 -> [어셈블러] -> 실행파일
이런 흐름이라고 할 수 있는데
프리프로세서는 #으로 시작하는 것들을 처리하는 부분으로 예를 들면 #include 어쩌고 되어 있으면 그 어쩌고를 가지고 와서 그 위치에다가 붙히고 등등 작업을 합니다.
즉 #define이라는건 "내가 작성한 C코드"에는 있는데 "컴터가 만든 C코드"에는 없습니다. #define A 10이라고 한다면 A는 없어지고 10만 있게됩니다. 그러니 A가 대체 뭘 말하는건지 모르게 됩니다.
뭐 물론 요즘은 컴파일러가 좋아졌기 때문에 그 A에 대한 정보도 날리지 않고 디버깅정보로 남기게 해서 디버거로 확인가능하게 할 수 있습니다.
사실 따지고 들면 좀 더 복잡할 수도 있지만 엄청
사실 따지고 들면 좀 더 복잡할 수도 있지만 엄청 단순화해서 얘기하자면...
내가 작성한 C코드 -> [프리프로세서] -> 컴터가 만든 C코드 -> [C 컴파일러] -> 어셈블리코드 -> [어셈블러] -> 실행파일
이런 흐름이라고 할 수 있는데
프리프로세서는 #으로 시작하는 것들을 처리하는 부분으로
예를 들면 #include 어쩌고 되어 있으면 그 어쩌고를 가지고 와서 그 위치에다가 붙히고 등등
작업을 합니다.
즉 #define이라는건 "내가 작성한 C코드"에는 있는데 "컴터가 만든 C코드"에는 없습니다.
#define A 10이라고 한다면 A는 없어지고 10만 있게됩니다.
그러니 A가 대체 뭘 말하는건지 모르게 됩니다.
뭐 물론 요즘은 컴파일러가 좋아졌기 때문에
그 A에 대한 정보도 날리지 않고 디버깅정보로 남기게 해서 디버거로 확인가능하게 할 수 있습니다.