programing

비교 시 변수 앞에 상수를 두는 이유는 무엇입니까?

skycolor 2023. 10. 14. 09:59
반응형

비교 시 변수 앞에 상수를 두는 이유는 무엇입니까?

저는 우리 코드의 일부에서 다음과 같은 구문을 잠시 알아차렸습니다.

if( NULL == var){
   //...
}

아니면

if( 0 == var){
  //...
}

그리고 비슷한 것들.

이 글을 쓴 사람이 왜 일반적인 것이 아닌 이 표기법을 선택했는지 설명해 주실 수 있나요?var == 0way)?

스타일의 문제인가요, 아니면 어떻게든 성능에 영향을 미치는가요?

다음과 같은 실수를 피하기 위한 메커니즘입니다.

if ( var = NULL ) {
  // ...
}

만약 당신이 변수 이름을 오른쪽에 두고 쓴다면 컴파일러는 특정한 실수를 잡을 수 있을 것입니다.

if ( NULL = var ) {  // not legal, won't compile
  // ...
}

물론 등호 양쪽에 변수 이름이 표시되고 어떤 사람들은 이 스타일이 매력적이지 않다고 생각한다면 이것은 작동하지 않을 것입니다.

편집:

Evan이 코멘트에서 언급한 것처럼, 만약 당신이 경고를 활성화한다면, 괜찮은 컴파일러라면 누구든지 이것에 대해 경고할 것입니다. 예를 들어,gcc -Wall는 다음과 같은 내용을 제공합니다.

warning: suggest parentheses around assignment used as truth value

컴파일러에서 항상 경고를 활성화해야 합니다. 이것이 오류를 찾는 가장 저렴한 방법입니다.

마지막으로, Mike B가 지적했듯이, 이것은 스타일의 문제이며 프로그램의 성과에 영향을 미치지 않습니다.

잘못 입력한 경우

if ( var = NULL )

대신에

if ( var == NULL )

그러면 컴파일러 경고만 나옵니다.순서를 반대로 하면:

if ( NULL == var )

그러면 컴파일러 오류가 발생할 것입니다.

if ( NULL = var )

개인적으로 그런 식으로 쓰여진 코드를 읽는 것을 싫어하고, 코딩을 시작한 첫 해에 단 한 번만 그런 실수를 했습니다.=)

결과: 사용해 보십시오.const할 수 있는 한

const int val = 42;

if (val = 43) {
    ...
}

컴파일하지 않습니다.

피하려면

if (var = NULL)

벌레를

Joel On Software의 말을 인용하여 게릴라 인터뷰 가이드:

가끔 C 프로그래머가 (0==strlen(x))를 써서 상수를 == 왼쪽에 놓는 것을 볼 수 있습니다. 이것은 정말 좋은 징조입니다.이는 ==와 =를 혼동하여 너무 많이 쏘이고 그 함정을 피하기 위해 새로운 습관을 배우도록 강요했다는 것을 의미합니다.

(저는 이 "베스트 프랙티스"의 팬이 아닙니다.)

참고로, 저는 C에게 새로운 프로그래머들에게 "="을 "get"으로, "=="을 "=="을 동등하게 읽도록 훈련시키면, 그 자체로 이러한 많은 버그로부터 여러분을 구해줄 것이라고 가르친 것을 수년에 걸쳐 지켜왔습니다.그러면 당신은 읽습니다.

if( x = 0){

"만약 x가 0을 얻는다면" 그리고 그것은 이상하게 들리기 시작합니다.

저는 개인적으로.

if (!x) {

언급URL : https://stackoverflow.com/questions/370366/why-put-the-constant-before-the-variable-in-a-comparison

반응형