C ++에서 '및'및 '또는'대안 토큰이 언제 도입 되었습니까?
문제
방금 이것을 읽었습니다 좋은 조각 Reddit에서.
그들은 언급합니다 and
그리고 or
"대체 토큰"입니다 &&
그리고 ||
나는 지금까지 이것들을 정말로 알지 못했습니다. 물론 모두에 대해 알고 있습니다 다이그 그라프와 트리 그래프, 하지만 and
그리고 or
? 언제부터? 이것은 최근 표준에 추가 되었습니까?
방금 Visual C ++ 2008로 확인했으며 구문 오류 이외의 다른 것으로 인식하지 않는 것 같습니다. 무슨 일이야?
해결책
MSVC는 사용하는 경우에만 키워드로 지원합니다. /Za
확장을 비활성화하는 옵션; 이것은 적어도 VC7.1 (vs2003)에서 사실입니다.
포함하여 매크로로 지원할 수 있습니다 iso646.h
.
내 생각에 그들은 기본적으로 키워드를 만들면 너무 많은 기존 코드를 깨뜨릴 것이라고 생각합니다 (그리고 옳은 경우 놀라지 않을 것입니다).
이것은 몇 주 전에 여기 어딘가에있는 질문에서 논의되었지만, 나는 So의 검색이나 Google을 찾을 수 없습니다.
다른 팁
C ++ 11 표준에서 2.6/ Alternative tokens
:
- 일부 연산자 및 구두점에 대한 대체 토큰 표현이 제공됩니다.
- 언어의 모든 측면에서, 각각의 대체 토큰은 철자를 제외하고는 기본 토큰과 동일하게 동일하게 행동한다. 대체 토큰 세트는 표 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 ++ 표준