computed goto. The documentation advertises read only relative address. Like this: https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html ``` static const int array[] = { &&foo - &&foo, &&bar - &&foo, &&hack - &&foo }; goto *(&&foo + array[i]); ``` However, this doesn't quite work and is a little flawed. What one wants is: 1. int or int32_t, as stated. 1b. Or a target specific type provided by the compiler that encompasses the largest distance in a function. But in reality that is int/int32_t. Not blow the space unnecessarily on a 64bit integer, if executables and therefore distances within functions are limited to 32bits (I realize, there is a signnedess problem hypothethically, but ultimately I expect an assembler or linker warning for the label math overflow).
2. Syntax that works in C and C++. And is truly const, no dynamic initializer. This is crucial. 3. Preferably without casting. But if I must, ok. 4. Instead of relative to a label, I should be able to use relative to the array itself. Which then only allows a single ampersand. Double might be nice, but whatever works. I think that might save an instruction. It isn't critical. 5. 32bit and 64bit. Crucial. Many combinations do work, but you sometimes have to cast to char* or int or size_t. Sometimes have to narrow. Only sometimes can use the address of the array. Not always valid C and C++. And not all combinations do work. We have code that compiles as C or C++, unless/until we decide to use C++, and I couldn't make it work across the board. But now I'll see if the code is really any better than switch... - Jay