/* switch.c Tanya Amert, Fall 2023 How do switch statements get represented in x86-64? Compile for debugging via gdb: gcc -g -Og -o switch switch.c Run with one command-line argument (which case): ./switch 3 */ #include #include int switch_f(int val) { int result = 0x314; switch (val) { case 0: result -= 1; break; case 1: result *= 2; break; /* no case 2 -- default instead */ case 3: result += 4; /* fall through to case 4 */ case 4: result -= 0xa0; break; /* no case 5 -- default instead */ case 6: result *= 3; break; default: result += 0x10f; break; } return result; } int if_f(int val) { int result = 0x314; if (val == 0) { result -= 1; } else if (val == 1) { result *= 2; } else if (val == 3) { result += 4; result -= 0xa0; } else if (val == 4) { result -= 0xa0; } else if (val == 6) { result *= 3; } else { result += 0x10f; } return result; } int main(int argc, char *argv[]) { if (argc != 2) { printf("You need to give a number.\n"); exit(0); } // Convert the input number to an int int val = atoi(argv[1]); int result = switch_f(val); printf("Result: %d\n", result); return 0; }