【Xcode】Multi-character character constant

在AVAudioSession.h头文件中,发现如下定义:

/* values to use for setting overrideOutputAudioPort property */
typedef NS_ENUM(NSUInteger, AVAudioSessionPortOverride)
{
AVAudioSessionPortOverrideNone    =0,
AVAudioSessionPortOverrideSpeaker ='spkr'

} NS_AVAILABLE_IOS(6_0);

使用'spkr'进行了赋值,根据enum的类型,'spkr'表示某一无符号整数,但是这种语法很奇怪,因为一般在使用字符型值时,我们使用的是单个字符,如's'.在其他语言里,有用单引号表示字符串的,不在此论述。

作者用NSLog对'spkr'做了简单输出。

......

{

.......

NSLog("%d",'spkr');

}

控制台打印的结果是:1936747378

没有报任何的警告,觉得很奇怪。接着,我们来看看'ss'的值。

NSLog("%d",'ss');

打印的结果是:29555

但是这次报了警告:Multi-character character constant.

综上所述,编译器应该是对'spkr'等(可能还有其他的)系统特定的多字符的字符常量进行了优化,不会出现警告,但平时使用过程中,应该遵守一般准则,使用单个字符。

--------------------割------------------------

看了这篇文章,发现正确的解释应该是:在C99中,多字符的字符常量表示int,也就是说是合法的。只是llvm编译器会报Multi-character character constant.

你可能感兴趣的:(【Xcode】Multi-character character constant)