programing

왜 클랑은 "||" 안에 "&"이라고 경고합니까?

newsource 2023. 6. 14. 21:54

왜 클랑은 "||" 안에 "&"이라고 경고합니까?

제가 이해하기로는 괄호는 아무런 차이가 없습니다. 그래서 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