Last active
December 16, 2015 19:38
-
-
Save theonewolf/5486167 to your computer and use it in GitHub Desktop.
switch brain teaser
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <stdio.h> | |
| #include <stdlib.h> | |
| enum option | |
| { | |
| OPT_ONE = 0x01, | |
| OPT_TWO = 0x02, | |
| OPT_THREE = 0x03, | |
| OPT_FOUR = 0x04, | |
| OPT_MAGIC = 0x05 | |
| }; | |
| void test_switch(enum option opt) | |
| { | |
| switch(opt) | |
| { | |
| OPT_ONE: | |
| fprintf(stdout, "OPT_ONE\n"); | |
| break; | |
| OPT_TWO: | |
| fprintf(stdout, "OPT_TWO\n"); | |
| break; | |
| OPT_THREE: | |
| fprintf(stdout, "OPT_THREE\n"); | |
| break; | |
| OPT_FOUR: | |
| fprintf(stdout, "OPT_FOUR\n"); | |
| break; | |
| OPT_MAGIC: | |
| fprintf(stdout, "OPT_MAGIC\n"); | |
| break; | |
| default: | |
| fprintf(stdout, "default, no match found.\n"); | |
| }; | |
| } | |
| int main(int argc, char* argv[]) | |
| { | |
| test_switch(OPT_MAGIC); | |
| return EXIT_SUCCESS; | |
| } |
Author
@ZeeD that's the reason why this was linked to as a "brain teaser" not a "compiler teaser." Although many brains are also good enough for this one it seems :-)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
well... with the right compiler options it doesn't compile.
$ make foo
cc -Werror -Wall -Wextra -Wold-style-definition -Wmissing-declarations -Wredundant-decls -Wmissing-noreturn -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Winline -Wformat-nonliteral -Wformat-security -Wswitch-enum -Wswitch-default -Winit-self -Wmissing-include-dirs -Wundef -Waggregate-return -Wmissing-format-attribute -Wnested-externs -std=c11 -pedantic foo.c -o foo
foo.c: In function ‘test_switch’:
foo.c:16:2: error: enumeration value ‘OPT_ONE’ not handled in switch [-Werror=switch-enum]
switch (opt) {
^
foo.c:16:2: error: enumeration value ‘OPT_TWO’ not handled in switch [-Werror=switch-enum]
foo.c:16:2: error: enumeration value ‘OPT_THREE’ not handled in switch [-Werror=switch-enum]
foo.c:16:2: error: enumeration value ‘OPT_FOUR’ not handled in switch [-Werror=switch-enum]
foo.c:16:2: error: enumeration value ‘OPT_MAGIC’ not handled in switch [-Werror=switch-enum]
foo.c:29:3: error: label ‘OPT_MAGIC’ defined but not used [-Werror=unused-label]
OPT_MAGIC:
^
foo.c:26:3: error: label ‘OPT_FOUR’ defined but not used [-Werror=unused-label]
OPT_FOUR:
^
foo.c:23:3: error: label ‘OPT_THREE’ defined but not used [-Werror=unused-label]
OPT_THREE:
^
foo.c:20:3: error: label ‘OPT_TWO’ defined but not used [-Werror=unused-label]
OPT_TWO:
^
foo.c:17:3: error: label ‘OPT_ONE’ defined but not used [-Werror=unused-label]
OPT_ONE:
^
cc1: all warnings being treated as errors
make: *** [foo] Errore 1
$