Расширение GCC / Clang / MSVC для указания размера перечисления C? - PullRequest
2 голосов
/ 28 мая 2011

Есть ли какая-либо функция расширения для указания размера C enum на каждом компиляторе?

  • GCC
  • Clang
  • MSVC

Ответы [ 2 ]

2 голосов
/ 28 мая 2011

С GCC вы не можете указать точную длину, но вы можете сделать так, чтобы она занимала самую короткую длину из -fshort-enums. Пример:

#include <stdio.h>

typedef enum
{
    f1, f2
} foo;

int main()
{
    printf("%i\n", sizeof(foo));
    return 0;
}

Компиляция:

gcc program.c -fshort-enums

Выход:

1

Однако, если вы когда-нибудь захотите сделать ссылку на что-либо, вы должны убедиться, что тот, кто смотрит на ваши заголовки, также использует -fshort-enums, иначе он не будет совместим с ABI (и вы увидите несколько действительно забавных ошибок).

0 голосов
/ 28 мая 2011

C ++ 11 представил стандартизированный способ сделать это, но так как это C, вам придется согласиться на более простой метод создания последнего перечисления INT_MAX или достаточно большого значения, чтобы только типВы можете удерживать его (это то, что делает DirectX SDK).К сожалению, нет способа принудительно установить максимальный размер (по крайней мере, без расширений, специфичных для компилятора).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...