Існує більш чистий спосіб лише з одним заголовком, тому його простіше підтримувати. У заголовку з глобальними змінними префікс кожної декларації має ключове слово (я використовую загальне), тоді лише в одному вихідному файлі включіть його так
#define common
#include "globals.h"
#undef common
та будь-які інші вихідні файли, подібні до цього
#define common extern
#include "globals.h"
#undef common
Просто переконайтеся, що ви не ініціалізуєте жодну зі змінних у файлі globals.h, інакше компоновник все одно скаржиться, оскільки ініціалізована змінна не розглядається як зовнішня навіть за ключовим словом extern. Файл global.h виглядає подібним до цього
#pragma once
common int globala;
common int globalb;
etc.
здається, працює для будь-якого типу декларації. Не використовуйте звичайне ключове слово на #define, звичайно.