c++ - variable - typedef struct bool c




컴파일러:조건이 항상 true/false 인 경우 (2)

나는 내 자신의 질문에 답하는 것을 좋아하지 않는다. 왜냐하면 나는 네 도움 없이는 그것을 이해하지 못할 것이기 때문이다.

어쨌든 첫 번째 옵션은 다음을 사용하는 것입니다.

#if DEBUG == true
#endif

또는

#ifdef DEBUG
#endif

컴파일러는 #if / #ifdef에있는 코드를 얻지 못합니다 (전처리 기가 제거합니다). 따라서이 코드 부분에 문제가있는 경우 DEBUG가 false 로 설정되거나 전혀 정의되지 않은 경우 아무도 알 수 없습니다 thanks @ Klaus).

두 번째 옵션 :

#define DEBUG false    

...

if (DEBUG)
{
  ...
}

더 새로운 컴파일러는 조건이 거짓이면 'if'블록을 제거하거나 'if'문을 제거하고 조건이 참이면 본문을 남겨 두어야합니다.

그래서 나는 프로그래머가 응용 프로그램의 요구 사항을보다 잘 해결할 수 있다고 말한다.

첫 번째 접근법은 코드가 바이너리에 포함되지 않도록해야하는 경우 더 좋습니다.

두 번째 방법은 컴파일러가 프로그램을 컴파일 할 때마다 전체 코드를 검사하도록하려는 경우 더 좋습니다.

이 답변이 마음에 드시면 투표하십시오. 누구도 더 나은 답변을 제공하지 않으면 동의 할 것입니다.

조건부 컴파일러에 대해서 생각해 봅니다. Arduino 용 응용 프로그램을 프로그래밍 중이므로 가능한 빨리 응용 프로그램이 필요합니다.

내 코드에는 다음과 같은 것이있다.

#define DEBUG false    

...

if (DEBUG)
{
  String pinName;
  pinName = "Pin ";
  pinName += pin;
  pinName += " initialized";
  Serial.println(pinName);
}

컴파일러에 이진 파일의 코드 (블록의 코드)가 포함되어 있지 않은지 궁금합니다. 조건은 항상 거짓이므로 프로그램이 절대 실행되지 않습니다.

그리고 다른 쪽에서. DEBUG가 사실이라면? Arduino가 조건을 테스트합니까 아니면 컴파일러가 이진 파일에 if의 본문 만 포함합니까?

이 사이트는 https://gcc.gnu.org/onlinedocs/gcc-3.0.2/cpp_4.html #if 지시어에 관한 것이므로 "normal"대신이 지시문을 사용하도록 코드를 다시 작성할 수 있습니다. 그러나 나는 그것을 다시 써야하는지 아니면 시간 낭비인지 알고 싶다.


모든 중간 최적화 컴파일러는 컴파일 타임에 조건이 항상 false로 판단 할 수있는 경우 if 문 내부의 전체 코드를 제거합니다. 비슷하게, 조건이 항상 참인 경우, 하프 문장 컴파일러는 검사 자체를 건너 뜁니다.

실제로 이것은 다음과 같은 "컴파일러 스위치"와 완전히 동일합니다.

#define DEBUG


#ifdef DEBUG
...
#endif

#ifdef 가있는 "컴파일러 스위치"구문은 다른 C 프로그래머에게 의도를 명확하게 보여주기 때문에 선호하는 것입니다. 그러나 이것은 코딩 스타일의 문제 일뿐입니다. 원래의 코드와 동일한 이진 파일이됩니다.





arduino