2011-07-26 3 views
10

가능한 중복 :
What is the difference between these (bCondition == NULL) and (NULL==bCondition)?C++에서 NULL! = value의 의미는 무엇입니까?

나는 C++ 코드의 조각을 통해 진행되었다 난 그냥 궁금 해서요

if (NULL != threadInfo) 
{ 
    ... 
    ... 
} 

같은 코드를 통해 온 어떤 차이가있다 표현을 사용하는 사이

if (threadInfo != NULL) 
{ 
    ... 
    ... 
} 

위의 내용. 첫 번째 읽기는 "NULL이 ThreadInfo와 같지 않으면"이고 두 번째 것은 "threadInfo가 NULL과 같지 않은 경우"입니다. 나에게 두 번째 것은 더 의미가있다.

+1

시도해 보았을 때 어떤 차이가 있습니까? – marto

+4

c/C++에서'if (Constant == variable)'의 많은 부분을 볼 수 있습니다. 왜냐하면 두 번째 = off 상태로두면 컴파일 오류가 발생하고, 왼손잡이 식을 일정하게 지정하려고하기 때문입니다. 어쩌면 비슷한 것일까 요? – asawyer

+0

차이가 없다. 방정식 일 뿐이다. 변수와 값 대신에 단지 2 개의 값 ('if (true == true)')으로 더 많이보아야한다. – Sander

답변

14

아니요, 차이는 없습니다. ==의 경우 약간의 차이가있을 수 있습니다. 문제는 실수로 == 대신 =을 쓰면 컴파일러가 첫 번째 경우에 오류를 줄 것입니다.

if (threadInfo = NULL) //always false. The compiler will give you a warning at best 

if (NULL = threadInfo) //Compiler error 

나는 개인적으로 연습을 싫어하고 정상적인 인간의 언어가 아닌 요다 언어로 읽을 수있는 코드를 작성하는 것이 좋습니다 생각합니다.

+6

+1, 분명히 읽기 쉽지 않으며 절대적으로 이득이 없습니다. '=='대신에'='를 타이핑하고 그것에 대해 경고하기 위해 * nothing *을 사용한다면, 더 큰 문제가있을 수도 있습니다. – rid

+1

템플릿 코드가 많은 양의 거짓 긍정을 생성하기 때문에 경고는 쓸모가 없습니다. –

2

차이는 없습니다. 당신이 오타를 만들고 NULL = ...이라고 쓰면 코드가 컴파일되지 않을 것이라는 점에서 NULL != ...을 쓰는 것이 중요합니다. ... = NULL이 있으면 유효한 할당 일 수 있으며 오류가 눈에 띄지 않을 수 있습니다 (그러나 대부분의 컴파일러가이를 감지하고 경고합니다). 누군가가 한 번 시도한 insert a backdoor into the Linux kernel using this technique.

또한 대부분의 사람들은 그렇게 코딩하지 않습니다.

0

일반적으로 규칙으로 사용되며 별개의 의미는 없습니다.

할당이 lvals에 발생하고 NULL을 할당 할 수 없기 때문에 또는 threadInfo != NULL 버그를 의미 할 때 threadInfo = NULL을 보호합니다.

if (threadInfo = NULL) 
{ 
    ... 
    ... 
} 

그리고 어떤 사람들은 확인하기 위해 컴파일러 스위치를 사용하는 방법을 모른다 : 더 자세히 들어

는,이 차이는 첫 번째 옵션은 다음과 같이 잘못 입력 할 수없는 경우를 제외하고,없는

4

operator !=을 오버라이드하는 유형이고 해당 클래스의 소유자가 두 인수가 서로 바뀌는 대/소문자를 처리하는 대칭 자유 함수를 제공하지 않은 경우 차이가있을 수 있습니다 (필요가있을 수 있음). 그 프로그래머를 해고하십시오).

그렇지 않으면 맛이 좋습니다. 아마도 if(answer == 42) 대신 if(42 == answer)을 쓰는 사람들이 선호 할 것입니다. 이것은 당신이 equals check 대신 할당 연산자를 잘못 입력하는 것을 방지합니다. 그러나 현대 컴파일러가 그렇게 할 때 경고하기 때문에이 접근법이 무엇을 제공하는지 논쟁의 여지가 있습니다.

+0

하지만 차이점은 'NULL! = threadInfo'는 컴파일되지 않습니다. 왜냐하면 int에는 threadInfo 유형에 대해 연산자! =가 없으므로 컴파일되지 않습니다. threadInfo가 포인터 유형이라면 차이가있을 수 있다고 생각하지 않습니까? –

+0

@Douglas : 'threadInfo_TYPE'과 동일한 네임 스페이스에 정의 된 자유 함수 'operator! = (int, threadInfo_TYPE)'가있을 수 있습니다.이 경우에는 Koenig Lookup으로 인해 자동으로 고려됩니다. – Jon

7

그것은 안전을 위해, 그래서 실수

threadInfo = NULL 

대신 들어

threadInfo == NULL 

의 쓰지 않는다! =가이 작업을 수행 할 필요 없다, 그러나 일치합니다.

+5

회전. 컴파일러. 경고. 에. : | – GManNickG

+1

컴파일러 경고가 표시됩니다. 그러나, 나는 다른 사람들이하고 있기 때문에 뭔가하고있는 것의 이유를 알고 있습니다. 방금 이유를 말했어 .- 그게 유효한 건데. 내가 경고를해서는 안된다는 말은하지 않았다. –

0

둘 다 똑같습니다. 이 그렇게 규칙을 코딩 Yoda

if (value=NULL) // assignment instead of == operator 
{ 
} 
1

차이라고합니다 : 그것은으로 타이핑 실수를 방지하는 데 사용 된 스타일의 규칙이다.

if (NULL != threadInfo) 

이러한 논리의 관점에서 정확하게 일치 있습니다

if (threadInfo != NULL) 

에 해당하고

if (threadInfo) 
0

이다.

두 번째는 더 직관적인데, 첫 번째가 더 안전하다고 보일 때 (threadInfo = NULL)을 잘못 쓰면 버그가 발생할 수 있습니다.

0

Null은 메모리에있는 참조이며 아무것도 액세스 할 수있는 주소가 없습니다.

이렇게하면 특정 개체에 값이 있거나 없는지 확인하기 위해 null 뒤에 비교할 수 있습니다.

0

차이가 없습니다. 그러나 을 작성하는 경우 NULL = someVar을 쓰는 것을 잊어 버리면 두 번째 =을 입력하는 것을 잊어 버릴 수 있습니다.

관련 문제