programing

여러 정의가 정의되어 있지 않은지 사전 프로세서가 확인합니다.

goodsources 2022. 7. 18. 22:18
반응형

여러 정의가 정의되어 있지 않은지 사전 프로세서가 확인합니다.

사용자가 편집할 수 있는 #defines가 헤더에 있습니다.따라서 사용자가 그것들을 모두 삭제했을 경우의 정의가 존재하는지 확인합니다.

#if defined MANUF && defined SERIAL && defined MODEL
    // All defined OK so do nothing
#else
    #error "User is stoopid!"
#endif

이 방법은 완벽하게 작동합니다. 하지만 여러 정의가 제대로 설정되어 있지 않은지 확인할 수 있는 더 좋은 방법이 있는지 궁금합니다. 예를 들어 다음과 같습니다.

#ifn defined MANUF || defined SERIAL ||.... // note the n in #ifn

또는 아마도

#if !defined MANUF || !defined SERIAL ||....

빈 #if 섹션의 필요성을 제거합니다.

#if !defined(MANUF) || !defined(SERIAL) || !defined(MODEL)

FWIW, @SergeyL의 답변은 훌륭합니다만, 여기 테스트용의 몇개의 변종이 있습니다.논리 또는 논리 및 로의 변경에 주의해 주세요.

main.c에는 다음과 같은 메인 래퍼가 있습니다.

#if !defined(TEST_SPI) && !defined(TEST_SERIAL) && !defined(TEST_USB)
int main(int argc, char *argv[]) {
  // the true main() routine.
}

spi.c, serial.c 및 usb.c에는 다음과 같은 각 테스트코드의 메인랩퍼가 있어요

#ifdef TEST_USB
int main(int argc, char *argv[]) {
  // the  main() routine for testing the usb code.
}

config.h모든 c파일에 포함되는 엔트리는 다음과 같습니다.

// Uncomment below to test the serial
//#define TEST_SERIAL


// Uncomment below to test the spi code
//#define TEST_SPI

// Uncomment below to test the usb code
#define TEST_USB

언급URL : https://stackoverflow.com/questions/17237545/preprocessor-check-if-multiple-defines-are-not-defined

반응형