我在Mac OS SDK中看到了与此类似的代码:
enum {
kAudioFileStreamProperty_ReadyToProducePackets = 'redy',
kAudioFileStreamProperty_FileFormat = 'ffmt',
kAudioFileStreamProperty_DataFormat = 'dfmt',
kAudioFileStreamProperty_FormatList = 'flst',
kAudioFileStreamProperty_MagicCookieData = 'mgic',
kAudioFileStreamProperty_AudioDataByteCount = 'bcnt',
kAudioFileStreamProperty_AudioDataPacketCount = 'pcnt',
kAudioFileStreamProperty_MaximumPacketSize = 'psze',
kAudioFileStreamProperty_DataOffset = 'doff',
kAudioFileStreamProperty_ChannelLayout = 'cmap',
kAudioFileStreamProperty_PacketToFrame = 'pkfr',
kAudioFileStreamProperty_FrameToPacket = 'frpk',
kAudioFileStreamProperty_PacketToByte = 'pkby',
kAudioFileStreamProperty_ByteToPacket = 'bypk',
kAudioFileStreamProperty_PacketTableInfo = 'pnfo',
kAudioFileStreamProperty_PacketSizeUpperBound = 'pkub',
kAudioFileStreamProperty_AverageBytesPerPacket = 'abpp',
kAudioFileStreamProperty_BitRate = 'brat'
};
Run Code Online (Sandbox Code Playgroud)
这是我第一次看到这个 - 我假设编译器将字符串的32位整数等同于枚举值.我不能想到为什么这可能比使用简单整数更受欢迎.它在调试器中看起来很可怕(你怎么知道这些值中的哪一个对应1919247481
?)并且通常会使调试变得困难.
那么,是否有任何理由将这些字符串分配给枚举值实际上是有意义的.
正是因为调试器你会做这样的事情.大多数调试器可以将内存显示为ASCII,例如:
00000000: 12 34 56 78 90 12 45 67 12 34 56 78 89 ab cd ef .4Vx..Eg.4Vx....
Run Code Online (Sandbox Code Playgroud)
只需查看内存转储就能识别结构,常量等,这非常方便.特别是如果这些结构和/或常量中的一个覆盖了一堆内存,你不希望它......