Namespaces
Variants

Alternative operators and tokens

From cppreference.net

C 소스 코드는 ISO 646:1983 불변 문자 집합을 포함하는 모든 8비트 문자 집합으로 작성될 수 있으며, 비ASCII 문자 집합도 가능합니다. 그러나 여러 C 연산자와 구두점에는 ISO 646 코드셋 외부의 문자가 필요합니다: {, }, [, ], #, \, ^, |, ~ . 이러한 기호 중 일부 또는 전체가 존재하지 않는 문자 인코딩(예: 독일의 DIN 66003 )을 사용할 수 있도록 하기 위해 두 가지 방법이 있습니다: 이러한 문자를 사용하는 연산자의 대체 표기법 또는 단일 비ISO 646 문자로 해석되는 두 개 또는 세 개의 ISO 646 호환 문자 조합.

목차

연산자 매크로 (C95)

ISO646 문자가 아닌 문자를 사용하는 연산자에 대한 대체 철자가 있으며, 이는 <iso646.h> 에 매크로로 정의되어 있습니다:

헤더에 정의됨 <iso646.h>
기본형 대체형
&&
and
(연산자 매크로)
&=
and_eq
(연산자 매크로)
&
bitand
(연산자 매크로)
|
bitor
(연산자 매크로)
~
compl
(연산자 매크로)
!
not
(연산자 매크로)
!=
not_eq
(연산자 매크로)
||
or
(연산자 매크로)
|=
or_eq
(연산자 매크로)
^
xor
(연산자 매크로)
^=
xor_eq
(연산자 매크로)

문자 & ! 는 ISO-646에서 불변이지만, 더 제한적인 역사적 문자 집합을 수용하기 위해 이러한 문자를 사용하는 연산자들에 대한 대안이 여전히 제공됩니다.

동등 연산자 == 에 대한 대체 표기법(예: eq )은 존재하지 않습니다. 왜냐하면 문자 = 가 지원되는 모든 문자 집합에 존재했기 때문입니다.

대체 토큰 (C95)

다음 대체 토큰들은 코어 언어의 일부이며, 언어의 모든 측면에서 각 대체 토큰은 철자(스펠링)를 제외하고 기본 토큰과 완전히 동일하게 동작합니다 ( 문자열화 연산자 는 철자를 가시적으로 만들 수 있습니다). 두 글자로 된 대체 토큰들은 때때로 "다이그래프"라고 불리며 % : % : 도 네 글자임에도 불구하고 다이그래프로 간주됩니다).


기본 대체
{ <%
} %>
[ <:
] :>
# %:
## %:%:

트라이그래프 (C23에서 제거됨)

다음 세 문자 그룹(삼중 문자)은 주석과 문자열 리터럴이 인식되기 전에 파싱됩니다 , 그리고 각 삼중 문자는 해당하는 기본 문자로 대체됩니다:

기본 문자 삼중 문자
{ ??<
} ??>
[ ??(
] ??)
# ??=
\ ??/
^ ??'
| ??!
~ ??-

삼중문자가 초기에 처리되기 때문에, // Will the next line be executed?????/ 와 같은 주석은 실제로 다음 줄을 주석 처리하게 되며, "What's going on??!" 와 같은 문자열 리터럴은 "What's going on|" 로 파싱됩니다.

예제

<iso646.h> 헤더의 대체 연산자 표기법과 더불어 디그래프 및 트라이그래프 사용법을 보여줍니다. 명령줄 인수에 공백이 포함된 경우 따옴표로 감싸야 합니다, 예를 들어, "Third World!" .

%:include <stdio.h>
%:include <stdlib.h>
??=include <iso646.h>
int main(int argc, char** argv)
??<
    if (argc > 1 and argv<:1:> not_eq NULL)
    <%
       printf("Hello %s??/n", argv<:1:>);
    %>
    else
    <%
       printf("Hello %s??/n", argc? argv??(42??'42??) : __FILE__);
    %>
    return EXIT_SUCCESS;
??>

가능한 출력:

Hello ./a.out

참고 항목

C++ 문서 에 대한 대체 연산자 표현