IF 문에서 Xcode 3.1 컴파일러가 할당 연산자에 대해 경고하는 방법은 무엇입니까?
-
05-07-2019 - |
문제
문서와 인터넷을 최대한 검색하려고 시도했지만 할당 연산자가 IF 문에 사용되는 경우 Xcode 컴파일러가 경고를 발행 할 수 없었습니다.
나는 Realbasic에서 왔는데, 이런 종류의 비교를 입력하는 매우 강한 습관이 있습니다.
if x = 5 then ...
물론 C에서는 구문이 x를 지정하여 5의 값을 지정한 다음 결과를 테스트하여 0이 아닌지 확인하고 "올바른"연산자는 다음과 같습니다.
if (x == 5) { ... }
IF 비교에 할당이있을 경우 컴파일러가 경고 할 수 있어야한다는 몇 가지 언급을 발견했지만 Xcode 3.1/GCC에서 켜는 방법을 찾을 수 없습니다. 나는 찾았다 -pedantic
옵션이지만 경고를 생성하지 않은 것 같습니다.
"=="대신 "="로 판명 된 버그를 추적하는 데 두 번 상당한 시간을 보냈기 때문에 경고의 도움을 원합니다.
대신이 작업을 수행 할 수 있다는 것을 알고 있습니다 (컴파일러 오류가 발생할 수 있음) :
if (5 = x) { ... }
... 그러나 그것은 뿌리 깊은 코딩 습관도 변화해야합니다. 그것은 서투르고 뒤로 보인다는 것은 말할 것도 없습니다.
감사!
해결책 2
Ennuikiller의 답변의 링크는 내가 필요한 것을 이끌었습니다.
다음은 앞으로이 내용을 찾을 수있는 사람을위한 조금 더 많은 정보입니다.
컴파일러 경고는 "교정기와 괄호가 누락 된"또는 -wparenthes입니다.
Xcode에서 현재 대상에 대한 정보를 선택하여 경고가 켜집니다.
마침내 알았 듯이 iPhone Simulator SDK는 ~ 아니다 이 컴파일러 옵션을 표시하십시오.
SDK를 iPhone 장치로 전환하면 GCC 4.2 경고 섹션이 표시되며 여기에는 "교정기 누락 및 괄호"가 포함됩니다.
iPhone 장치 SDK에서 해당 옵션을 켜면 Similator로 다시 전환하면 "사용자 정의"빌드 설정이 추가되었음을 보여줍니다.
GCC_WARN_MISSING_PARENTHESES
= "예".IF 문에 과제가 실제로 원하는 경우 경고를 피하기 위해 괄호를 두 배로 늘릴 수 있습니다.
(이중 1 분기 예제 :)
if ((x = 5)) { ... }
경고는 매력처럼 작동하지만 Apple의 표준을 싫어합니다.
if (self = [super init]) { ... }
나는 아마도 그와 같은 것을 떠날 것입니다. 그러나 프로젝트에서 엄청난 양의 양을 끝내면 괄호를 두 배로 늘리거나 할당을 별도의 줄로 나눕니다.
감사!
다른 팁
당신은 내가 생각하는 -월 옵션을 찾고 있습니다.
int main(void) {
int x = 5;
if ( x=5) {
}
return 0;
}
$ g++ -pedantic x.cc
$ g++ -Wall x.cc
x.cc: In function ‘int main()’:
x.cc:7: warning: suggest parentheses around assignment used as truth value
이것 링크 Xcode GUI를 통해 옵션을 활성화하는 방법을 설명합니다