switchとenum

switch文でenumを使っていると、caseが足りなかったりおかしなのがあったりすると警告を出してくれる。

enum NUM { ONE, TWO, THREE, FOUR };

int
main() {
    enum NUM n = ONE;

    switch(n) {
        case ONE:
        case TWO:
            break;
        case 10:
            break;
    }

    return 0;
}

コンパイル

$ gmake CFLAGS=-Wall enum
cc -Wall    enum.c   -o enum
enum.c: In function 'main':
enum.c:9: warning: enumeration value 'THREE' not handled in switch
enum.c:9: warning: enumeration value 'FOUR' not handled in switch
enum.c:13: warning: case value '10' not in enumerated type 'enum NUM'

便利。

もちろん、defautlがあると警告は出してくれない。なんで、なんでもかんでもdefault付ければ良いというわけでもない。