Les contraintes

Au moment de l'édition de liens, pour un identificateur donné, n unités de compilation l'auront défini, p l'auront référencé, et q auront demandé une mise dans le common. Les contraintes sont les suivantes :
-
n doit valoir 0 ou 1 : au plus une unité de compilation doit définir un nom ;
-
si n vaut 0, alors q ne peut être nul : il ne peut pas y avoir que des références.
Voyons les choses sous l'angle de ce qui est autorisé. On peut avoir :
-
une définition avec p (évent. 0) références, et q (évent. 0) demandes de mise dans le common ;
-
p (évent. 0) références et q (non 0) demandes de mise dans le common.
Ceci fait beaucoup de possibilités dont deux seulement sont « raisonnables » :
-
une définition avec que des références : on adhère strictement à la méthode des réfs et des défs ;
-
que des demandes de mise dans le common : on adhère strictement à la méthode du common.
Ces deux méthodes sont résumées dans le tableau suivant :
méthode unité de unité de ... unité de
  compilation 1 compilation 2 ... compilation n
réfs défs int i = 0; extern int i; ... extern int i
common int i ; int i ; ... int i ;

Matthieu Moy 2017-02-08