왜 클랑은 "||" 안에 "&"이라고 경고합니까?
제가 이해하기로는 괄호는 아무런 차이가 없습니다. 그래서 Clang이 이것을 기본값으로 경고하는 (코드 선명성을 "향상"시키는 것 외에) 이유가 있습니까?코드를 위해 코드를 추가하는 것을 싫어하기 때문에 괄호를 추가하지 않는 것을 선호합니다.
src/websocket.c:420:43: warning: '&&' within '||' [-Wlogical-op-parentheses]
if (rv == 0 && N != 0 || rv == -1 && errno == ECONNRESET) {
~~ ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
src/websocket.c:420:43: note: place parentheses around the '&&' expression to
silence this warning
if (rv == 0 && N != 0 || rv == -1 && errno == ECONNRESET) {
~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
자연스러운 경향은 왼쪽에서 오른쪽으로 읽는 것이고, 연산자 우선 순위를 잊기 쉽습니다.그렇긴 하지만, 그것은 단지 경고일 뿐이고, 만약 여러분이 여러분이 무엇을 하고 있는지 알고 있고 여러분만의 스타일이 그것을 허용한다면, 그것을 자유롭게 억제하세요.
독자가 C의 연산자 우선 순위 규칙을 매우 잘하지 않는 한, 그것은 단순히 약간 불분명하기 때문이라고 추측합니다.
당신의 표현은 다음과 같습니다.
if (A && B || C && D)
그 이후로&&
보다 우선 순위가 높습니다.||
라는 뜻입니다.
if ((A && B) || (C && D))
그게 당신 말인 것 같은데, 읽을 때는 잘 모르겠어요.
언급URL : https://stackoverflow.com/questions/16939888/why-does-clang-warn-within
'programing' 카테고리의 다른 글
TypeScript에서 불투명 유형을 정의하는 방법은 무엇입니까? (0) | 2023.06.14 |
---|---|
문자열에서 문자 인스턴스 바꾸기 (0) | 2023.06.14 |
문서의 전체 텍스트 범위를 가져오기 위한 VS 코드 확장 API? (0) | 2023.06.14 |
레일에서 STI 하위 클래스의 경로를 처리하는 모범 사례 (0) | 2023.06.14 |
변환이 VUEX의 스토어를 업데이트하지 않음 (0) | 2023.06.14 |