2010-10-04 12 views

Odpowiedz

13

W C99 należy użyć wartości stdbool.h, która definiuje bool, true i false.

W przeciwnym razie wszystko, co masz, jest w porządku. Użycie samej enum może być nieco prostsze, ale jeśli naprawdę chcesz zaoszczędzić miejsce, to co działa.

+2

Prawdopodobnie jego platforma ma 'sizeof() == sizeof any_enum_t (int)'. – Potatoswatter

+0

@Potato: Ach, racja. Po prostu nie sądzę, że może warto. Naprawdę nie jest to strata, więc. (Jeśli się nie mylę, przy okazji, to konkretne wyliczenie musi mieć ukryty typ "int".) – GManNickG

+0

Moje C jest zardzewiałe, ale myślę, że wymaganiem 'int' jest C++ 03-ism. Ponieważ ABI x86-64 również mówi to samo, nie ma jednak dużej różnicy. – Potatoswatter

1

Myślę, że jest w porządku, ładne i czyste.

3

Wadą typedef char bool; jest to, że jeśli kompilujesz z implementacją C99 i zawiera się <stdbool.h>, kończy się to jako typedef char _Bool;, co jest błędne. Ponadto, jeśli kiedykolwiek próbowałeś skompilować kod jako C++, masz problemy (to niekoniecznie jest problem, ale może być).

Prawdopodobnie lepiej byłoby użyć <stdbool.h>, jeśli twoja implementacja je zapewnia lub użyć innej nazwy dla tego typu, np. BOOL.

5

Krótka odpowiedź brzmi: jest w porządku. Jest to szczególnie dobre, jeśli musisz tworzyć duże tablice z nich, chociaż byłbym skłonny po prostu użyć wbudowanego C99 .

Od pytania "czy jest jakikolwiek minus ..." Przypuszczam, że mogłem zauważyć, że były ważne maszyny, które w rzeczywistości nie miały instrukcji ładowania znaków. (The Cray i początkowa DEC Alpha przychodzą na myśl.) Maszyny w przyszłości mogą nagle po raz kolejny przejść do minimum.

Zawsze będzie szybko załadować standardowy typ integralny.

To będzie zawsze zawsze szybki, aby załadować pojedynczy znak.


1. Patrz C99 6.2.5. Jest wbudowany typ _Bool. Następnie, jeśli podłączysz <stdbool.h> (patrz C99 7.16), otrzymasz alias, im bardziej wdzięcznie nazwie bool i zdefiniujesz dla true i false. Jeśli użyjesz tego, zderzy się z twoim typem, ale jestem pewien, że byłoby to łatwe.

0

Sugerowałbym użycie bitu do reprezentowania wartości true lub false, a nie postaci. Postać używa 8 bitów. Możemy ustawić 1 na true, a na 0 na false z zaledwie 1 bitem. Będzie to bardziej efektywne pod względem pamięci, a także spełni cel. (np) flaga char: 1;

referencyjny: http://en.wikipedia.org/wiki/Bit_field

+1

Pamięć wydajna nie musi oznaczać lepiej. Dostęp do bitów może być dość powolny i niepotrzebnie skomplikowany. – GManNickG

+0

Używanie Bool jest lepsze, zgadzam się. Jest to również 1 bit. Ale czy możesz wyjaśnić, dlaczego jest powolny? Jestem nowicjuszem !! – sethu

+0

@GMan: jeśli potrzebujesz dużej liczby wartości boolowskich indeksowanych przez liczby całkowite, pewnie jest to bitowa tablica. Jeśli jest to tylko jedna wartość, użycie 'int' lub C99' bool' jest całkowicie w porządku. Nie widzę powodu, aby używać 'char'. –

Powiązane problemy