将枚举值设置为4字节字符串 - 为什么?

psy*_*tik 2 c enums

我在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?)并且通常会使调试变得困难.

那么,是否有任何理由将这些字符串分配给枚举值实际上是有意义的.

Car*_*rum 5

正是因为调试器你会做这样的事情.大多数调试器可以将内存显示为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)

只需查看内存转储就能识别结构,常量等,这非常方便.特别是如果这些结构和/或常量中的一个覆盖了一堆内存,你不希望它......