我知道在iso646.h
的标头中,定义了以下十一个marco常量,以提供按位运算符和逻辑运算符的替代描述:
and
是&&
的宏。
and_eq
是&=
的宏。
bitand
是&
的宏。
bitor
是|
的宏。
compl
是~
的宏。
not
是!
的宏。
not_eq
是!=
的宏。
or
是||
的宏。
or_eq
是用于|=
的宏
xor
是^
的宏。
xor_eq
是^=
的宏。
但是我什么时候需要使用这些替代宏?
- 在什么情况下,我需要在
iso646.h
的头文件中对按位和逻辑运算符使用替代宏?
如果您的编码没有实现完整的 ASCII 曲目,则应使用它:
C 语言从 ASCII 代码集派生其曲目。 不幸的是,ASCII 曲目不是所有其他常用字符集的子集,欧洲的普遍做法也不是实现所有 ASCII,而是将其整理序列的某些部分用于特殊的国家字符。
解决办法是国际商定的汇辑,据此可以界定C的国际代表性。 ISO 定义了这样一个标准:ISO 646 描述了 ASCII 的不变子集。
C 使用的 ASCII 曲目中没有的字符在 ISO 646 曲目中不存在的是:
# [ ] { } | ~ ^
取自ANSI C基本原理,[2.2.1.1 三元组序列]
正如@chqrlie所指出的,这是1980年代需要考虑的一个重要问题,但在今天却不那么重要了。
这也是引入三元组的原因(在同一部分中进一步解释(。因此,当使用非 ASCII 编码时,宏将在iso646.h
中替换为其三元组版本。