programing

C++는 전처리기 기호를 정의하지 않고 디버그 기호로 컴파일하는지 여부를 확인합니다.

cafebook 2023. 10. 15. 17:53
반응형

C++는 전처리기 기호를 정의하지 않고 디버그 기호로 컴파일하는지 여부를 확인합니다.

저는 이와 같은 것을 사용해 왔습니다.

int main(int argc, char *argv[])
{

#ifdef DEBUG
    printf("RUNNING DEBUG BUILD");
#else
    printf("Running... this is a release build.");
#endif
...

그러나 디버그 빌드를 위해 -DEBUG로 컴파일해야 합니다.GCC는 내가 확인할 수 있는 자체 전처리기 매크로를 정의하는 것과 같이 디버그 기호(-g 플래그)로 컴파일할 때를 결정할 수 있는 방법을 제공합니까?

대답은 아니오입니다.일반적으로 이러한 매크로(DEBUG, NDEBUG, _DEBUG)는 활성화된 구성(DEBUG/Release)에 따라 IDE/make 시스템에 의해 설정됩니다.다음과 같은 답변이 도움이 될 수 있다고 생각합니다.

C #디버그 인쇄를 위한 매크로 정의

-DNDEBUG는 일반적으로 어디에서 발생합니까?

_DEBUG 대 NDEBUG

제가 찾던 답은 본질적으로 아담이 댓글로 올린 것이라고 생각합니다.

컴파일러의 작업은 전처리를 포함하지 않으며, 실제로 컴파일러는 코드화되는 전처리기가 처리하지 않는 전처리기 스위치를 초크 처리합니다.

따라서 코드를 분기하는 방법은 전처리기를 활용해야 하기 때문에 컴파일러가 어떤 코드를 얻을 때쯤이면 이미 하나 또는 다른 하나(디버그 코드 또는 릴리스 코드)가 되므로 이 단계에서 (전처리기 이후) 제가 질문한 것을 수행하는 것은 불가능합니다.

따라서 코드를 전달하기 위한 별도의 프로세스로 프리프로세서가 설계되는 것은 직접적인 결과입니다.

언급URL : https://stackoverflow.com/questions/5223299/c-determine-if-compiling-with-debug-symbols-without-defining-a-preprocessor-sy

반응형