Если в switch много case, то не выгоднее ли сделать массив с адресами, на которые будет переходить управление? Можно делать массив из указателей на функции, но это все-таки функции. Есть ли нечто подобное для произвольных точек кода?
Goto - весьма опасная вещь. Ими можно пользоваться, если знаешь, что делаешь. Иначе это может привести к непредсказуемым последствиям: от потери производительности до серьёзных проблем с безопасностью. По мере возрастания сложности структуры программы можно легко запутаться в goto или потерять его. Таким лучше пользоваться только в ассемблере, который называется ещё jump (jmp, br в зависимости от производителя). А так лучше пользоваться switch. Достаточно простой и практичный.