code

논리 연산자의 서면 버전

codestyles 2020. 9. 19. 11:13
반응형

논리 연산자의 서면 버전


이것은 내가 본 유일한 장소 and, or그리고 notC ++의 실제 운영자로 나열. NetBeans에서 테스트 프로그램을 작성할 때 구문 오류가있는 것처럼 빨간색 밑줄이 표시되고 웹 사이트가 잘못되었다고 생각했지만 예상대로 컴파일 및 실행 되었기 때문에 잘못된 것은 NetBeans입니다.

나는 !선호되는 것을 볼 수 not있지만 and&& 의 가독성은 or문법적 형제보다 더 큰 것 같습니다. 이러한 버전의 논리 연산자가 존재하는 이유와 아무도 사용하지 않는 이유는 무엇입니까? 이것이 진정으로 유효한 C ++입니까, 아니면 언어에 포함 된 C와의 일종의 호환성입니까?


그것들은 헤더의 C에서 시작되었습니다 <iso646.h>. 그 당시에는 &&(예를 들어)에 필요한 기호를 입력 할 수없는 키보드가 있었기 때문에 헤더에는 #define(우리의 예에서)로 정의 and하여 이를 수행하는 데 도움이되는 's가 포함 되었습니다 &&. 물론 시간이 지남에 따라 덜 사용되었습니다.

C ++에서는 대체 토큰 으로 알려진 것이되었습니다 . 호환 컴파일러에서 이러한 토큰을 사용하기 위해 아무것도 포함 할 필요 없습니다 (예 : C 헤더의 C ++ 버전 <ciso646>이 비어 있음). 대체 토큰은 철자를 제외하고 일반 토큰과 같습니다. 그래서 구문 분석 중 and입니다 정확히 같은 &&이 같은 일을 철자의 단지 다른 방법입니다.

사용에 관해서는 거의 사용되지 않기 때문에 사용하는 것이 도움이되는 것보다 더 놀랍고 혼란스러운 경우가 많습니다. 나는 그것이 정상이라면 읽기가 훨씬 쉬울 것이라고 확신하지만 사람들은 너무 익숙 &&하고 ||다른 것은 산만 해집니다.

편집 : 그러나 이것을 게시 한 이후로 사용량이 약간 증가했습니다. 나는 여전히 그들을 피합니다.


유용성 (키보드 / 디스플레이 버전의 문자 지원)과 일반적인 가독성을 위해 존재하지만 요즘 더 두드러지는 또 다른 이유가 있습니다. 거의 답변 없음 여기 , 여기 , 또는 주요 대답 여기우리 중 많은 사람들이 기호 버전보다 단어 버전을 선호하는 핵심 이유 (및 다른 언어에서 사용하는 주요 이유) : 버그를 설명합니다. 단어 버전 간의 차이점은 매우 눈에.니다. 기호 버전 간의 차이는 훨씬 적으므로 버그를 비교적 훨씬 더 많이 유혹 할 수 있습니다. "x | y"는 "x || y"가 아니라 더 큰 표현에 포함될 때 많은 사람들이 차이를 놓치십시오. 이는 할당 대 같음 연산자의 일반적인 우발적 혼합과 유사합니다. 이런 이유로 나는 단어 버전을 선호하기 위해 기호 버전을 포기했습니다 (쉽지 않았습니다). 나는 누군가가 벌레를 유혹하는 것보다 오래된 것에 대한 우리의 사랑 때문에 그들에게 이중을가하도록하고 싶습니다.


C ++에서는 실제 키워드입니다. C에서는 <iso646.h>. http://web.archive.org/web/20120123073126/http://www.dinkumware.com/manuals/?manual=compleat&page=iso646.html을 참조 하십시오 .


and&&++ 기능적으로 C에서 동일합니다. andor운영자는 진정으로 유효한 C ++ 및 언어 표준의 일부입니다.

구체적인 예를 들어 다른 답변에 대해 자세히 설명하려면 "가독성"외에 다른 이유 and&&있습니다. 논리적 AND가 의미하는 바인 경우 "and"를 명시 적으로 철자하면 미묘한 버그의 가능성이 제거됩니다.

이걸 고려하세요:

int x = 3;
int y = 4;

// Explicitly use "and"
if (x and y) {
    cout << "and: x and y are both non-zero values" << endl;
}

// Using "&&"
if (x && y) {
    cout << "&&: x and y are both non-zero values" << endl;
}

// Oops! I meant to type "&&"!
if (x & y) {
    cout << "&: x and y are both non-zero values" << endl;
}
else {
    cout << "How did I get here?" << endl;
}

세 가지 if 문은 모두 컴파일되지만 마지막 문은 완전히 다르고 의도하지 않은 것을 의미합니다!

If you always use and when you mean logical AND, you can never accidentally type a single "&" and have your code compile successfully and run with mysterious results.

Another good exercise: Try leaving off a character of "and" by accident and see what happens. ;)

참고URL : https://stackoverflow.com/questions/2376448/the-written-versions-of-the-logical-operators

반응형