C 대체 토큰

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

C 대체 토큰은 C 언어에서 사용되는 특수 문자를 대체하는 매크로들을 정의하는 헤더 파일인 `iso646.h`에 의해 제공된다. 이 매크로들은 `and`, `or`, `not` 등과 같은 키워드를 사용하여 논리 연산 및 비트 연산을 수행할 수 있게 해준다. C++에서는 이러한 키워드가 이미 예약되어 있어 `iso646.h`를 포함할 필요가 없으며, C++17부터는 `` 헤더가 사용되지 않고 C++20에서는 제거되었다. `iso646.h`는 현재 UTF-8과 같은 문자 인코딩의 발전으로 인해 사용 빈도가 낮다.

C 대체 토큰
개요
설명C 표준 라이브러리 헤더, 일반적인 연산자의 대체 스펠링 제공
헤더 파일iso646.h
도입C95
대체 토큰
and&& (논리 AND)
and_eq&= (비트 AND 대입)
bitand& (비트 AND)
bitor| (비트 OR)
compl~ (비트 NOT)
not! (논리 NOT)
not_eq!= (같지 않음)
or|| (논리 OR)
or_eq|= (비트 OR 대입)
xor^ (비트 XOR)
xor_eq^= (비트 XOR 대입)
사용 예시
조건문if (x bitand 1)는 if (x & 1)과 동일함
논리 연산if (not flag)는 if (!flag)와 동일함
참고 사항
C++C++에서는 이러한 대체 토큰이 키워드로 직접 지원되어 iso646.h 헤더를 포함할 필요가 없음
표준
CC95에서 도입
📚 더 읽어볼만한 페이지
  • C 표준 라이브러리 - 파일 끝
    파일 끝(EOF)은 데이터 소스에서 더 이상 읽을 데이터가 없음을 나타내는 조건이다.
  • C 표준 라이브러리 - C 자료형
    C 자료형은 C 언어에서 데이터 형태를 정의하는 기본 요소로, 다양한 크기와 속성을 가진 산술, 부울 자료형과 구조체, 공용체 등을 제공하며, 컴파일러 및 시스템 아키텍처에 따라 크기와 동작 방식이 달라질 수 있다.

2. 매크로

`iso646.h` 헤더는 아래 표와 같이 11개의 매크로를 정의한다. 각 매크로는 연산자에 해당한다.

👆
좌우로 밀어서 보기
매크로정의
`and``&&`
`and_eq``&=`
`bitand``&`
`bitor``
`compl``~`
`not``!`
`not_eq``!=`
`or```
`or_eq`=`
`xor``^`
`xor_eq``^=`

3. C++에서의 사용

C++에서는 `and`, `or`, `not` 등이 연산자 키워드로 이미 예약되어 있으므로, `iso646.h`를 포함할 필요가 없다. C++98 표준은 C와의 호환성을 위해 `<iso646.h>`와 `<ciso646>` 헤더를 모두 제공했지만, 이 헤더들은 실질적으로 아무런 내용도 포함하지 않았다. 일부 컴파일러(예: 마이크로소프트 비주얼 C++)는 컴파일러 플래그가 설정되어 있지 않으면 이러한 식별자를 사용하기 위해 헤더를 포함해야 했던 적이 있었다. `<ciso646>` 헤더는 C++17에서 더 이상 사용되지 않았고 C++20에서 제거되었으며, `<iso646.h>`는 C와의 호환성을 위해 유지되었다.

4. 사용 예시 (C 언어)

`iso646.h` 헤더는 아래 표와 같이 11개의 매크로를 정의한다.

👆
좌우로 밀어서 보기
매크로정의
`and``&&`
`and_eq``&=`
`bitand``&`
`bitor``
`compl``~`
`not``!`
`not_eq``!=`
`or```
`or_eq`=`
`xor``^`
`xor_eq``^=`


ISO 646 변형 문자 집합으로 C의 기호를 기술할 수 없었던 환경에서 이 헤더를 사용했다. 그러나 현재는 UTF-8과 같은 인코딩 환경이 일반적이므로 이 헤더를 사용할 필요는 거의 없다.

4.1. 조건문

cpp
#include
#include

int main(void)
{
if(((2 + 3) == 5) and ((4 - 3) == 1))
{
puts("SUCCESS");
}
return 0;
}
```

위 코드는 `&&` 연산자 대신 `and` 매크로를 사용한 예시이다. 위 코드는 아래 코드와 동일하다.

```cpp
#include
#include

int main(void)
{
if(((2 + 3) == 5) && ((4 - 3) == 1))
{
puts("SUCCESS");
}
return 0;
}

4.2. 비트 연산

wikitext
iso646.h 헤더는 비트 연산에 사용되는 매크로를 정의한다.

👆
좌우로 밀어서 보기
매크로정의
bitand&
bitor>
compl~


다음은 iso646.h를 이용한 or 연산의 예시이다.

```c
#include
#include

int main(void)
{
if((1 bitor 2) == 3)
{
puts("SUCCESS");
}
return 0;
}
```

위 코드는 `|` (OR) 연산자 대신 `bitor` 매크로를 사용한 예시이다. `bitor` 부분을 `bitand`로 바꾸면 `&` (AND) 연산을 수행할 수 있다. 아래는 `bitand`를 사용한 예시이다.

```c
#include
#include

int main(void)
{
if((1 bitand 2) == 0)
{
puts("SUCCESS");
}
return 0;
}
```

4.3. 대입 연산자

cpp
#include
#include

int main(void)
{
int x = 1;
x or_eq 2;
if (x == 3)
{
puts("SUCCESS");
}
return 0;
}
```

위 코드는 `|=` 연산자 대신 `or_eq` 매크로를 사용한 예시이다. `and_eq`를 사용하면 `&=` 연산을, `xor_eq`를 사용하면 `^=` 연산을 수행할 수 있다.