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ć”.