Development Tip

if 문에 상수를 먼저 넣는 이유는 무엇입니까?

yourdevel 2020. 12. 3. 20:43
반응형

if 문에 상수를 먼저 넣는 이유는 무엇입니까?


작업중인 하드웨어 인터페이스에 대한 몇 가지 예제 C ++ 코드를 살펴 보았는데 다음 줄을 따라 많은 명령문을 발견했습니다.

if ( NULL == pMsg ) return rv;

나는 사람들이 상수를 우선시하는 것이 좋은 생각이라고 말하는 것을 들었을 것입니다. 그러나 그 이유는 무엇입니까? 당신이 큰 진술을 가지고 있다면 당신이 비교하는 것을 빨리 볼 수 있거나 그것에 더 많은 것이 있는가?


따라서 비교 (==)와 할당 (=)을 혼용하지 않습니다.

아시다시피 상수에 할당 할 수 없습니다. 시도하면 감사자가 오류를 표시합니다.

기본적으로 방어적인 프로그래밍 기술 중 하나입니다. 자신으로부터 자신을 보호하기 위해.


글을 쓰지 않으려면 :

 if ( pMsg = NULL ) return rv;

실수로. 그러나 좋은 컴파일러는 이것에 대해 경고 할 것입니다. 그래서 대부분의 사람들은 읽기 어렵 기 때문에 "상수 우선"방식을 사용하지 않습니다.


단일 = 할당 버그를 중지합니다.

예 :

if ( NULL = pMsg ) return rv;

컴파일되지 않습니다.

if ( pMsg =  NULL) return rv;

컴파일하고 두통을 줄 것입니다.


몇 가지 주석에서 작성한 내용을 명확히하기 위해 C ++ 코드에서이 작업을 수행하지 않는 이유가 있습니다.

누군가 문자열 클래스를 작성하고 캐스트 연산자를 const char*다음에 추가하기로 결정합니다 .

class BadString
{
public:
   BadString(const char* s) : mStr(s) { }

   operator const char*() const { return mStr.c_str(); }

   bool operator==(const BadString& s) { return mStr == s.mStr; }

   // Other stuff...

private:
   std::string mStr;
};

이제 누군가 constant == variable"방어 적"프로그래밍 패턴을 맹목적으로 적용합니다 .

BadString s("foo");

if ("foo" == s) // Oops.  This compares pointers and is never true.
{
   // ...
}

이것은 IMO, 우연한 할당보다 더 교활한 문제입니다. 호출 사이트에서 분명히 잘못된 것이 있음을 알 수 없기 때문입니다.

물론 실제 교훈은 다음과 같습니다.

  1. 자신 만의 문자열 클래스를 작성하지 마십시오.
  2. 특히 (1)을 수행 할 때 암시 적 캐스트 연산자를 사용하지 마십시오.

그러나 때로는 제어 할 수없는 타사 API를 다루고 있습니다. 예를 들어, _bstr_tWindows COM 프로그래밍에서 일반적으로 사용 되는 문자열 클래스에는이 결함이 있습니다.


상수가 처음이면 컴파일러는 상수에 값을 할당하는 것이 불법이 =아니라 실수로 작성하면 경고합니다 ==.


그들은 "할당과 비교의 혼합을 방지하기 위해"라고 말했다.

실제로 나는 그것이 말도 안된다고 생각합니다. 만약 당신이 너무 훈련되어 왼쪽에 상수를 두는 것을 잊지 않는다면, 당신은 분명히 '='와 '=='를 혼동하지 않을 것입니다. ;)


Compilers outputting warnings is good, but some of us in the real world can't afford to treat warnings as errors. Reversing the order of variable and constant means this simple slip always shows up as an error and prevents compilation. You get used to this pattern very quickly, and the bug it protects against is a subtle one, which is often difficult to find once introduced.


I forget the article, but the quote went something like: "Evidently its easier remembering to put the constant first, than it is remembering to use ==" ;))

참고URL : https://stackoverflow.com/questions/2138719/whats-the-reasoning-behind-putting-constants-in-if-statements-first

반응형