我在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'
};

这是我第一次看到这种情况-我假设编译器将等于字符串的32位整数等效值分配给枚举值。我想不出一个很好的理由,为什么这比使用简单的整数更可取。在调试器中看起来很丑陋(如何分辨这些值中的哪个对应于1919247481?),并且通常使调试变得很困难。

因此,将这样的字符串分配给枚举值实际上有意义吗?

最佳答案

正是由于调试器,您才可以这样做。大多数调试器可以将内存显示为ASCII,如下所示:

00000000: 12 34 56 78 90 12 45 67 12 34 56 78 89 ab cd ef .4Vx..Eg.4Vx....

仅通过查看内存转储就可以识别结构,常量等,这非常方便。特别是如果这些结构和/或常量之一覆盖了一大堆内存,您就不希望它...。

关于c - 将枚举值设置为4字节字符串-为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2542010/

10-10 06:41