get/set все же могут значительно снижать производительность
программы, тут и лишние вызовы функций, и нарушение работы
оптимизатора. Самое главное, непонятно ради чего? Вместо extern v;
имеем extern V getV(); и extern setV(V v); В объявлении функций
extern написал специально, что бы показать что он есть, хотя его
можно не писать. У get/set есть свои плюсы, можно делать "отладочную" и "боевую" версию ПО, и брейки на переменную ставить удобнее. Но это про другое.
Использование структуры приводит к чему-то типа
struct {
V1 v1;
V2 v2;
...
} global_context;
И использование в виде global_context.v1 Не понятно в чем отличие от extern
По супер-инклюду можно отдельную ветку открывать, если этот вопрос еще кому-то интересен