문제

방금 이것을 읽었습니다 좋은 조각 Reddit에서.

그들은 언급합니다 and 그리고 or "대체 토큰"입니다 && 그리고 ||

나는 지금까지 이것들을 정말로 알지 못했습니다. 물론 모두에 대해 알고 있습니다 다이그 그라프와 트리 그래프, 하지만 and 그리고 or? 언제부터? 이것은 최근 표준에 추가 되었습니까?

방금 Visual C ++ 2008로 확인했으며 구문 오류 이외의 다른 것으로 인식하지 않는 것 같습니다. 무슨 일이야?

도움이 되었습니까?

해결책

MSVC는 사용하는 경우에만 키워드로 지원합니다. /Za 확장을 비활성화하는 옵션; 이것은 적어도 VC7.1 (vs2003)에서 사실입니다.

포함하여 매크로로 지원할 수 있습니다 iso646.h.

내 생각에 그들은 기본적으로 키워드를 만들면 너무 많은 기존 코드를 깨뜨릴 것이라고 생각합니다 (그리고 옳은 경우 놀라지 않을 것입니다).

이것은 몇 주 전에 여기 어딘가에있는 질문에서 논의되었지만, 나는 So의 검색이나 Google을 찾을 수 없습니다.

다른 팁

C ++ 11 표준에서 2.6/ Alternative tokens:

  1. 일부 연산자 및 구두점에 대한 대체 토큰 표현이 제공됩니다.
  2. 언어의 모든 측면에서, 각각의 대체 토큰은 철자를 제외하고는 기본 토큰과 동일하게 동일하게 행동한다. 대체 토큰 세트는 표 2에 정의되어 있습니다.

표 2- 대체 토큰

alternative primary | alternative primary | alternative primary
--------------------+---------------------+--------------------
   <%          {    |    and         &&   |    and_eq      &=
   %>          }    |    bitor       |    |    or_eq       |=
   <:          [    |    or          ||   |    xor_eq      ^=
   :>          ]    |    xor         ^    |    not         !
   %:          #    |    compl       ~    |    not_eq      !=
   %:%:        ##   |    bitand      &    |

실제로 질문에 대답하려면 :

그들은 첫 번째 C ++ 표준으로 정의되었습니다.

C ++ 표준을 참조하십시오. 위원회 초안 #2는 무료로 제공됩니다 ftp://ftp.research.att.com/dist/c+std/wp/cd2/body.pdf, 비록 무자비하고, 오래되지 않았으며, 몇 곳에서 부분적으로 부정확하지만. 구체적으로 2.5 절에서 대체 토큰, 다음은 정의되어 있습니다.

Alternative Primary
<%          {
%>          }
<:          [
:>          ]
%:          #
%:%:        ##
and         &&
bitor       |
or          ||
xor         ^
compl       ~
bitand      &
and_eq      &=
or_eq       |=
xor_eq      ^=
not         !
not_eq      !=

솔직히 말하지만, 나는 그들 중 누구도 본 적이 없습니다. and, or, 그리고 not, 그리고 그때까지도 드물다. 이들은 기본적으로 일반 C 코드에서 C ++에서만 허용되지 않습니다. C에서 사용하려면 #define 그들 자신은 매크로로, 또는 #include 헤더 <iso646.h>, 위의 모든 것을 제외한 모든 것을 정의합니다 <% >% <: :> %: %:%: 매크로로서 (C99 표준의 7.9 절 참조).

나머지 부분에 대해 배우는 것이 놀랄 수도 있습니다.

and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq

목록 C ++ 키워드.

최근 버전의 GCC가 이러한 키워드를 지원한다고 생각합니다.

질문은 오래되었지만, 나는 그것을 다소 완전한 답을 제공하고 싶다. 대체 토큰은 이미 현재 철회 된 C ++ 98의 일부였다 (ISO/IEC 14882 : 1998, C ++의 최초의 ISO 표준이라고 생각합니다. 그 자체로는 증거가 아니지만 (그리고 나는 C ++ 98 용 ISO 사본을 소유하고 있지 않음), 다음은 링크입니다. C ++ 섹션을 참조하십시오.

다른 답변에서 언급했듯이 MSVC 컴파일러는 위반 중입니다. lex.digraph 표준의 섹션 /ZA 플래그는 지정되지 않았습니다.

GNU 컴파일러 G ++에는 이들이 있지만 MS VC ++에 대해 잘 모르겠습니다.

코드 파일의 상단에이를 넣어 동일한 기능을 얻을 수 있습니다.

#define and &&
#define bitor |
#define or ||
#define xor ^
#define compl ~
#define bitand &
#define and_eq &=
#define or_eq ^=
#define xor_eq ^=
#define not !
#define not_eq !=

이것은 좀 다소 해킹되지만 효과가 있어야합니다.

그들은 14 페이지의 새로운 C ++ 표준에 대한 작업 용지에 있습니다.C ++ 표준

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top