我正在与苹果公司合作ScriptingBridge
框架,并为 iTunes 生成了一个头文件,其中包含几个enum
像这样:
typedef enum {
iTunesESrcLibrary = 'kLib',
iTunesESrcIPod = 'kPod',
iTunesESrcAudioCD = 'kACD',
iTunesESrcMP3CD = 'kMCD',
iTunesESrcDevice = 'kDev',
iTunesESrcRadioTuner = 'kTun',
iTunesESrcSharedLibrary = 'kShd',
iTunesESrcUnknown = 'kUnk'
} iTunesESrc;
我的理解是enum
值必须类似于整数,但这个定义似乎违反了该规则。此外,似乎对待这些enum
值为整数(在NSPredicate
,例如)没有做正确的事情。
我添加了enum
将上面的声明声明为一个空的 C 文件main
函数,并使用它编译i686-apple-darwin9-gcc-4.0.1
。所以,虽然这些类型enum
s 可能不符合 C 标准(正如 Parappa 在下面指出的那样),它们至少被编译为some由 gcc 键入。
那么,该类型是什么,以及如何在格式字符串中使用它?
C99,TC3 内容如下:
6.4.4.4§2:
整数字符常量是一个序列一个或多个用单引号括起来的多字节字符,如“x”。 [...]
6.4.4.4§10:
整型字符常量的类型为 int。包含映射到单字节执行字符的单个字符的整型字符常量的值是解释为整数的映射字符表示形式的数值。包含多个字符(例如“ab”)或包含不映射到单字节执行字符的字符或转义序列的整型字符常量的值是实现定义的。如果整型字符常量包含单个字符或转义序列,则其值是当 char 类型的对象(其值为单个字符或转义序列的值)转换为 int 类型时得到的值。
在大多数实现中,使用最多 4 个一字节字符的整数字符常量是安全的。不过,不同系统之间的实际值可能有所不同(字节顺序?)。
这实际上已经在 ANSI-C89 标准第 3.1.3.4 节中定义:
整数字符常量是一个或多个的序列
用单引号括起来的多字节字符,如“x”或“ab”。 [...]
整型字符常量的类型为 int。的价值
包含映射的单个字符的整数字符常量
转换为基本执行字符集的成员是数值
映射字符的表示值解释为
整数。包含更多内容的整数字符常量的值
多于一个字符,或包含不包含字符或转义序列
在基本执行字符集中表示为
实现定义的。特别是,在其中的实现中
char 类型与有符号 char 具有相同的值范围,即高位
单字符整型字符常量的位位置是
被视为符号位。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)