Plusieurs fichiers pour un projet (.h .cpp)

Forcément. extern est fait pour cela.
Et le fichier variables.cpp doit inclure variables.h, pour que le compilateur puisse vérifier que les types correspondent.

Ces macros ne sont pas de simples valeurs, c'est du code. L'ajout de () les fait ressembler à un appel de fonction, ce qui est plus parlant.

Et comme dit kamill, ne pas oublier inline.