C 대체 토큰
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
C 대체 토큰은 C 언어에서 사용되는 특수 문자를 대체하는 매크로들을 정의하는 헤더 파일인 `iso646.h`에 의해 제공된다. 이 매크로들은 `and`, `or`, `not` 등과 같은 키워드를 사용하여 논리 연산 및 비트 연산을 수행할 수 있게 해준다. C++에서는 이러한 키워드가 이미 예약되어 있어 `iso646.h`를 포함할 필요가 없으며, C++17부터는 `
더 읽어볼만한 페이지
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 헤더를 포함할 필요가 없음 |
표준 | |
C | C95에서 도입 |
2. 매크로
`iso646.h` 헤더는 아래 표와 같이 11개의 매크로를 정의한다.[13][2] 각 매크로는 연산자에 해당한다.[10]
매크로 | 정의 | |
---|---|---|
`and` | `&&` | |
`and_eq` | `&=` | |
`bitand` | `&` | |
`bitor` | ` | |
`compl` | `~` | |
`not` | `!` | |
`not_eq` | `!=` | |
`or` | ` | ` |
`or_eq` | =` | |
`xor` | `^` | |
`xor_eq` | `^=` |
C++에서는 `and`, `or`, `not` 등이 연산자 키워드로 이미 예약되어 있으므로, `iso646.h`를 포함할 필요가 없다.[3] C++98 표준은 C와의 호환성을 위해 `<iso646.h>`와 `<ciso646>` 헤더를 모두 제공했지만, 이 헤더들은 실질적으로 아무런 내용도 포함하지 않았다.[4][5] 일부 컴파일러(예: 마이크로소프트 비주얼 C++)는 컴파일러 플래그가 설정되어 있지 않으면 이러한 식별자를 사용하기 위해 헤더를 포함해야 했던 적이 있었다.[6][7] `<ciso646>` 헤더는 C++17에서 더 이상 사용되지 않았고 C++20에서 제거되었으며,[8] `<iso646.h>`는 C와의 호환성을 위해 유지되었다.[9]
`iso646.h` 헤더는 아래 표와 같이 11개의 매크로를 정의한다.[13]
3. C++에서의 사용
4. 사용 예시 (C 언어)
매크로 정의 `and` `&&` `and_eq` `&=` `bitand` `&` `bitor` ` `compl` `~` `not` `!` `not_eq` `!=` `or` ` ` `or_eq` =` `xor` `^` `xor_eq` `^=`
ISO 646 변형 문자 집합으로 C의 기호를 기술할 수 없었던 환경에서 이 헤더를 사용했다.[11] 그러나 현재는 UTF-8과 같은 인코딩 환경이 일반적이므로 이 헤더를 사용할 필요는 거의 없다.
4. 1. 조건문
cpp
#include
#include
int main(void)
{
if(((2 + 3) == 5) and ((4 - 3) == 1))
{
puts("SUCCESS");
}
return 0;
}
```
위 코드는 `&&` 연산자 대신 `and` 매크로를 사용한 예시이다.[13] 위 코드는 아래 코드와 동일하다.
```cpp
#include
#include
int main(void)
{
if(((2 + 3) == 5) && ((4 - 3) == 1))
{
puts("SUCCESS");
}
return 0;
}
4. 2. 비트 연산
wikitextiso646.h
헤더는 비트 연산에 사용되는 매크로를 정의한다.[13]
매크로 | 정의 |
---|---|
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` 매크로를 사용한 예시이다.[13] `and_eq`를 사용하면 `&=` 연산을, `xor_eq`를 사용하면 `^=` 연산을 수행할 수 있다.
참조
[1]
웹사이트
CppCon 2017: Panel "Grill the Committee"
https://www.youtube.[...]
[2]
웹사이트
Rationale for International Standard - Programming Languages - C
http://www.open-std.[...]
2010-10-17
[3]
서적
Design and Evolution of C++
Addison-Wesley Publishing Company
1994-03-29
[4]
서적
C++ in a Nutshell
O'Reilly Media
[5]
서적
C++17 Standard Library Quick Reference
Apress
[6]
서적
C++11 for Programmers
Pearson Education
[7]
웹사이트
Logical AND Operator: &&
https://docs.microso[...]
2021-12-27
[8]
웹사이트
[9]
간행물
Clarifying the status of the "C headers"
https://www.open-std[...]
ISO/IEC JTC1 SC22 WG21
2021-06-11
[10]
문서
ルネサンスのページ
http://tool-support.[...]
[11]
문서
IBMのciso646の記事
https://www.ibm.com/[...]
[12]
Microsoft
https://docs.microso[...]
[13]
웹인용
Rationale for International Standard - Programming Languages - C
http://www.open-std.[...]
2010-10-17
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com