조건부 블록 제거를 위한 C 전처리기
C 프로그래밍 영역에서는 정의된 코드를 기반으로 데드 코드를 제거해야 하는 경우가 종종 발생합니다. 또는 정의되지 않은 매크로. 표준 C 전처리기는 제한된 조건부 컴파일 기능을 제공하지만 고급 요구 사항에는 특수 도구가 필요합니다. 이 기사에서는 이러한 요구 사항을 충족할 수 있는 C 전처리기를 살펴봅니다.
코드베이스에 다음과 같은 조건부 블록이 포함되어 있는 시나리오를 고려해보세요.
#ifdef NAME1 #define ALBUQUERQUE "ambidextrous" #else #define PHANTASMAGORIA "ghostly" #endif
원하는 기능을 갖춘 전처리기 '-DNAME1' 또는 '-UNAME1'과 같이 정의되거나 정의되지 않은 매크로를 지정하기 위해 명령줄 인수를 허용합니다. '-DNAME1'을 사용하여 명령을 실행하면 다음과 같은 출력이 생성됩니다.
#define ALBUQUERQUE "ambidextrous"
반면, '-UNAME1'을 사용하여 명령을 실행하면 다음이 생성됩니다.
#define PHANTASMAGORIA "ghostly"
더 복잡합니다. 여러 조건과 중첩된 블록이 있는 시나리오도 정확하게 처리할 수 있습니다. 다음 예를 고려하십시오.
#ifdef USE_VOID #ifdef PLATFORM1 #define VOID void #else #undef VOID typedef void VOID; #endif /* PLATFORM1 */ typedef void * VOIDPTR; #else typedef mint VOID; typedef char * VOIDPTR; #endif /* USE_VOID */
'-DUSE_VOID -UPLATFORM1'을 사용하여 명령을 실행하면 다음과 같은 결과가 출력됩니다.
#undef VOID typedef void VOID; typedef void * VOIDPTR;
마지막으로 중첩 조건과 관련된 예는 다음과 같습니다.
#ifndef DOUBLEPAD #if (defined NT) || (defined OLDUNIX) #define DOUBLEPAD 8 #else #define DOUBLEPAD 0 #endif /* NT */ #endif /* !DOUBLEPAD */
'-UOLDUNIX' 인수를 전달하면 producer:
#ifndef DOUBLEPAD #if (defined NT) #define DOUBLEPAD 8 #else #define DOUBLEPAD 0 #endif /* NT */ #endif /* !DOUBLEPAD */
권장 솔루션
원래 스레드에 제공된 권장 사항을 바탕으로 sunifdef는 강력하고 효과적인 사전 솔루션으로 돋보입니다. -정의/정의되지 않은 매크로를 기반으로 데드 코드를 제거할 수 있는 프로세서. 수천 개의 불필요한 조건부 블록을 제거하여 광범위하게 사용되어 큰 성공을 거두었습니다.
위 내용은 C 전처리기가 정의/정의되지 않은 매크로를 기반으로 데드 코드를 어떻게 제거할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!