문제

내가 찾는 일부를 C 소스 코드 및 내가 이해하지 못하는 다음과 같은 부분

#if 1

   typedef unsigned short PronId;
   typedef unsigned short LMId;
#  define LM_NGRAM_INT

#else

   typedef unsigned int LMId;
   typedef unsigned int PronId;
#  undef LM_NGRAM_INT

#endif

왜 사람이 하시 #if 1?진실하지 않는 첫 번째 블록이 이제까지 처리할?

도움이 되었습니까?

해결책

예 .. 첫 번째 블록 만 처리됩니다. 누군가가 1을 0으로 변경할 때까지 다른 블록이 컴파일됩니다. 이것은 다른 알고리즘을 테스트하는 동안 코드의 임시 스위치 블록을 임시로 스위치 블록으로 만드는 편리한 방법입니다.

다른 팁

변경하여 컴파일 할 부품을 신속하게 선택할 수 있도록 #if 1 에게 #if 0.

하나의 기본적인 속성의 소프트웨어 컴퓨터 프로그램은 저렴한 수정.

그 이유는 특정 코드를 작성하는 방식으로 만들 것입 수정을 더 쉽습니다.그 이유는 그들이 필요로 다양한 패턴,다음과 같"인터페이스",또는"프록시".

고 그런 이유로 당신은 때로는 참 이상한 구조 #if 1-#else-#endif, 는 유일한 목적의하는 것입니다 쉽게 전환하는 부분의 코드를 컴파일하여,작은 노력이:변화 1 0.

다른 매개 변수 세트를 테스트해야 할 때 코드에 넣습니다. 일반적으로 내 제품은 디버그 환경에서 작업 할 수있는 것과 다른 기본값으로 배송되므로 배송 기본값을 #IF 1에 넣고 #ELSE의 디버그 기본값을 #WARNING과 함께 디버그로 구축하고 있다고 경고합니다. 기본값.

다양한 코드 경로를 실험합니다.

큰 코드 조각을 주석화하는 다른 방법이므로, 편집기 자동 인간화는 들여 쓰기를 중단하지 않을 것입니다 (주석은 코드 블록이 코드가 아닌 텍스트로 들여 쓰기).

실제로 코드 폴딩을 더 쉽게 만들기 위해 Kludge로 사용하고 있습니다. 코드 섹션을 #if 1 ... #endif, 편집자로 접을 수 있습니다. (문제의 코드는 매우 거시적이며 나에 의해 작성되지 않았으므로 엄청난 코드 블록을 관리하는 전통적인 방법은 작동하지 않습니다.)

그것은 또 다른 방법입니다 #사실이면 이전에 다른 기호를 확인한 후 항상 사실이되도록 리팩토링 된 코드의 결과 일 가능성이 높습니다.

더 깨끗한 방법은 아마도 다음과 같은 일을하는 것입니다.

#if ALGO1

#else

#endif

그러나, 당신은 Algo1을 컴파일러 Args에 어딘가에 전달해야합니다 ... 예를 들어, makefile에서는 -dalgo1 = 1을 추가해야합니다 (No 1이 제공되면 1이 가정됩니다). ref : http://www.amath.unc.edu/sysadmin/doc4.0/c-compiler/user_guide/cc_options.doc.html

이것은 더 많은 작업입니다 ... 따라서 일반적으로 빠른 확인을 위해 #if 1이 사용됩니다. 그리고 어떤 경우에는 잊혀지고 뒤에도 남았습니다 :-)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top