Quelle est la différence entre les constantes de macro et les variables constantes en C?

Dupliquer possible:
«Const statique» vs «#define» en C

J’ai commencé à apprendre le C et je ne comprenais pas bien les différences entre les macros et les variables constantes.

Qu’est-ce qui change quand j’écris,

#define A 8 

et

 const int A = 8 

?

Les pré-processeurs gèrent les macros – le pré-processeur effectue le remplacement du texte dans votre fichier source, en remplaçant toutes les occurrences de ‘A’ par le littéral 8.

Les constantes sont gérées par le compilateur. Ils ont l’avantage supplémentaire de la sécurité de type.

Pour le code compilé actuel, avec tout compilateur moderne, la différence de performance entre les deux devrait être nulle.

Les constantes définies par macro sont remplacées par le préprocesseur. Les «variables» constantes sont gérées comme des variables régulières.

Par exemple, le code suivant:

 #define A 8 int b = A + 10; 

Semblerait au compilateur réel comme

 int b = 8 + 10; 

Cependant, ce code:

 const int A = 8; int b = A + 10; 

Apparaîtrait comme:

 const int A = 8; int b = A + 10; 

🙂

En pratique, la principale chose qui change est la scope: les variables constantes obéissent aux mêmes règles de scope que les variables standard en C, ce qui signifie qu’elles peuvent être restreintes, voire redéfinies, au sein d’un bloc spécifique, sans fuites – elle ressemble au code local. vs situation globale des variables.

Tu peux écrire

 #define A 8 int arr[A]; 

mais non

 const int A = 8; int arr[A]; 

si je rappelle les règles correctement.

D’une part, le premier amènera le préprocesseur à remplacer toutes les occurrences de A par 8 avant que le compilateur ne fasse quoi que ce soit, tandis que le second n’implique pas le préprocesseur.