2012-02-26 5 views
1
#include <stdio.h> 

enum {AA, BB, CC} s; 

int main() 
{ 
s = 4; 
printf("%d\n",s); 
return 0; 
} 

Компилятор не дает никаких предупреждений и отпечатков 4. Что происходит за сценой? Is s рассматривается как тип int?Использование целого числа в качестве значения перечисления

+0

Соответствующий http://stackoverflow.com/questions/366017/what-is-the-size-of-an-enum-in-c – Bruce

ответ

3

Конкретный тип перечисления специфичен для реализации, но часто это int. Так что да, в этом случае s, вероятно, int. Из C спецификации:

Каждый перечислимого типа, должны быть совместимы с char, подписанную целого типа, или без знака целого типа. Выбор типа определяется реализацией, но должен быть способен представлять значения всех членов перечисления. Перечислимый тип является неполным до тех пор, пока не будет }, который завершает список объявлений перечислителя.

Так что в вашем случае, 4, конечно, работать, так как она помещается в char и в любом знаком или без знака целого типа на любой машине, я когда-либо слышал.

+0

Как найти конкретный тип. Я использую gcc. – Bruce

+1

Проверьте документацию gcc, я думаю. Вы можете использовать 'sizeof' для получения базовой линии. –

+0

Спасибо! Он говорит, 4 байта .. – Bruce

Смежные вопросы