C语言 什么时候需要在 iso646.h 的头文件中使用按位运算符和逻辑运算符的替代宏?



我知道在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中替换为其三元组版本。

最新更新