Многосимвольные константы не переносимы;их значения определяются реализацией.Язык даже не гарантирует, что '1v1'
и '2v2'
имеют разные значения.Это вряд ли проблема, но если вам когда-нибудь понадобится поделиться RSGameType
значениями в коде, скомпилированном разными компиляторами, у вас могут возникнуть проблемы.
Полагаю, вы уже знаете обо всем этом.
Но вот решение, на которое не влияет поведение, определяемое реализацией:
#define CHAR3(c0, c1, c2) (((c0)<<16) | ((c1)<<8) | (c2))
#define CHAR4(c0, c1, c2, c3) (((c0)<<24) | ((c1)<<16) | ((c2)<<8) | (c3))
typedef enum RSGameType
{
RSGameTypeUnknown = 0,
RSGameType1v1 = CHAR3('1', 'v', '1'),
RSGameType2v2 = CHAR3('2', 'v', '2'),
RSGameType3v3 = CHAR3('3', 'v', '3'),
RSGameType4v4 = CHAR3('4', 'v', '4'),
RSGameTypeCustom = CHAR4('C', 'u', 's', 't')
} RSGameType;