2017-11-23 19 views
3

비교 연산자 대신 할당 연산자를 잘못 사용할 수있는 위치에 경고를 플래그로 표시해야하는 C++ 컴파일러 프로젝트를 수행하고 있습니다. 내가 a10 경우에만 사실 싶어 반면 if 성명에서 항상 true을 초래할 것이다 (a = 10) 경우 .e.g 을 변수 a10로를 확인하기 위해, if 성명에서 비교를하는 동안 때때로 우리는 잘못 입력합니다. 내가 생각할 수있는 사례 중 일부는 다음과 같습니다비교 연산자 대신 잘못 할당 연산자를 사용할 수있는 곳 = Vs ==

  1. if(var = a), 논리적으로는 if(var==a)
  2. while(var = a)
  3. for(;var=a;)
  4. do{}while(var=a)
  5. var=a? "some XYZ": "some ABC"

당신이 날 도와주세요 수 있어야한다 더 많은 경우와 함께 사용자가 ==을 사용하게되어 실수로 =이 사용 된 논리 오류가 발생할 수 있습니까?

+2

할당 대신 비교가 사용 된 경우는 다른 점은 어떻습니까? 나는 몇 번 봤어. –

+0

"문제"에 관해서는, 몇몇 컴파일러가이를 감지하고 그것에 대해 경고 할 수 있습니다. 그리고 그러한 문제 (그리고 더 많은 것들)를 탐지 할 수있는 많은 통계 분석 도구가 있습니다. –

+6

내가 너라면 이걸로 내 시간을 낭비하지 않을 것이다. 때로는 문자열 복사 관용법과 같이 루프 조건문으로 할당을 원할 수도 있습니다. 때로는 일반적으로 과제를 쓸 때 비교를 원합니다. 이럴 (IMHO) 사람들은 그 차이를 드럼에 담아 야합니다. – Bathsheba

답변

5

내가 최근에 가로 지른 고약한 것은 assert (a=b)입니다. 주장이 주장하는 가정이 둘이 이미 동등하다는 가정이 있기 때문에 매우 불쾌한 이유가 있기 때문에 성명서는 무해한 것 같습니다. 그러나 그렇지 않은 경우 디버그 빌드가 릴리스 빌드와 기능적으로 다르기 때문에 불쾌한 디버깅 세션을 설정합니다.

+1

이것은 하나의 순수한 악이다. –

+1

글쎄, assert에서 할당을 사용하는 것은 항상 잘못된 것이다. –