Czy sizeof (enum) == sizeof (int) zawsze?

Czy sizeof (enum) == sizeof (int) zawsze?

Czy jest to zależne od kompilatora?Czy to źle powiedzieć, ponieważ kompilator jest zoptymalizowany pod kątem długości słów (wyrównanie pamięci), tzn. Y int jest rozmiarem słowa na konkretnym kompilatorze? Czy to oznacza, że ​​nie ma kary za przetwarzanie, jeśli używam wyliczeń, ponieważ byłyby one wyrównane słowem?Czy nie jest lepiej, jeśli umieściłem wszystkie kody powrotu w enumie, ponieważ nie martwię się o wartości, które otrzymuje, tylko nazwy podczas sprawdzania typów zwracanych. W takim przypadku wont #DEFINE będzie lepszy, ponieważ zaoszczędzi pamięć.

Jaka jest zwykła praktyka? Jeśli muszę przetransportować te typy powrotów przez sieć i trzeba wykonać pewne przetwarzanie na drugim końcu, to co wolisz enums / # definiuje ints / const.

EDYCJA - Po prostu sprawdzanie w sieci, ponieważ kompilator nie łączy symbolicznie makr, jak ludzie następnie debugują, porównują wartość całkowitą z plikiem nagłówkowym?

Z odpowiedzi - dodam poniższy wiersz, ponieważ potrzebuję wyjaśnień -

„Jest więc zdefiniowany w implementacji i sizeof (enum)może być równy sizeof (char), tj. 1. ”

Czy nie oznacza to, że kompilator sprawdza zakres wartości w wyliczeniach, a następnie przypisuje pamięć. Nie sądzę, oczywiście, że nie wiem. Czy ktoś może mi wyjaśnić, czym jest „może być”.

questionAnswers(5)

yourAnswerToTheQuestion