温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c - When do I need to use the alternative macros for bitwise and logical operators inside the header fil
c compatibility token bitwise-operators logical-operators

c - 什么时候需要在头文件fil中将替代宏用于按位和逻辑运算符

发布于 2020-04-12 11:51:18

我知道在的标头中iso646.h,定义了以下十一个marco常数以提供按位和逻辑运算符的替代描述:

and是的宏&&

and_eq是的宏&=

bitand是的宏&

bitor是的宏|

compl是的宏~

not是的宏!

not_eq是的宏!=

or是的宏||

or_eq 是一个宏 |=

xor是的宏^

xor_eq是的宏^=


但是何时需要使用这些替代宏?

  • 在哪种情况下,我需要对头文件中的按位和逻辑运算符使用替代宏iso646.h

查看更多

提问者
RobertS supports Monica Cellio
被浏览
39
76.2k 2020-02-03 03:00

如果您的编码未实现完整的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