코드 냄새 56 - 전처리기

우리는 우리의 코드가 서로 다른 환경, 운영 체제에서 다르게 작동하기를 원하므로 컴파일 타임에 결정을 내리는 것이 최선의 결정이 아닐까요?

문제


  • 가독성
  • 조기 최적화
  • 불필요한 복잡성
  • 디버깅

  • 솔루션


  • 모든 컴파일러 지시문을 제거합니다.
  • 다른 동작을 원하는 경우 객체로 모델링하십시오
  • .
  • 성능 저하가 있다고 생각되면 성급한 최적화를 수행하는 대신 진지한 벤치마크를 만드십시오.

  • 샘플 코드



    잘못된




    #if VERBOSE >= 2
      printf("trace message");
    #endif
    

    오른쪽



    if (runtimeEnvironment->traceDebug()){
      printf("trace message");
    }
    
    ## even better with polymorphism and we avoid annoying ifs
    
    runtimeEnvironment->traceDebug("trace message");
    
    

    발각



    이것은 여러 언어로 홍보되는 구문 지시문이므로 감지하기 쉽고 실제 동작으로 대체하기 쉽습니다.

    태그


  • 컴파일러
  • 메타프로그래밍

  • 결론



    추가 복잡성 계층을 추가하면 디버깅이 매우 어려워집니다. 이 기술은 메모리와 CPU가 부족할 때 사용되었습니다. 오늘날 우리는 깨끗한 코드가 필요하고 조기 최적화를 과거에 묻어두어야 합니다.

    Bjarne Stroustrup은 그의 저서 The Design and Evolution of C++에서 몇 년 전에 만든 전처리기 지시문을 후회합니다.

    처지







    더 많은 정보






    %[ http://www.parashift.com/c++-faq-lite/newbie.html#faq-29.8 ]

    %[ https://en.wikipedia.org/wiki/C_preprocessor ]

    #ifdef Considered Harmful

    학점



    사진 제공: CDC on Unsplash


    C++ is designed to allow you to express ideas, but if you don't have ideas or don't have any clue about how to express them, C++ doesn't offer much help.



    Bjarne Stroustrup








    이 기사는 CodeSmell 시리즈의 일부입니다.


    좋은 웹페이지 즐겨찾기