Les constantes

Historiquement, les constantes en C étaient déclarées avec la pseudo-instruction #define du préprocesseur. Par exemple #define MAX_INT 65535. Le préprocesseur fera une substitution textuelle et remplacera simplement toutes les occurrences de MAX_INT par 65535. Le principal défaut de cette construction, c’est que la constante n’a pas de type et que la substitution textuelle peut être la source d’erreur difficile à trouver. Considérez l’exemple suivant :

#define MY_CONSTANT 12 + 4
int x = MY_CONSTANT * 2;

On pourrait croire que MY_CONSTANT vaut 16 et que MY_CONSTANT * 2 vaut donc 32, mais comme le préprocesseur fait une substitution textuelle, l’assignation à la variable x devient int x = 12 + 4 * 2; et x vaut donc 20 et non 32!

Si vous devez vraiment utiliser le préprocesseur et la pseudo-instruction #define, assurez-vous alors d’entourer les expressions de parenthèses (par exemple #define MY_CONSTANT (12 + 4)). Avec le C++, nous pouvons déclarer des constantes avec les modificateurs const ou constexpr :

constexpr int32_t kMyConstant = 12 + 4;

le modificateur const est l’équivalent du final de Java et indique que la valeur assignée ne changera pas. Cette valeur peut éventuellement n’être connue que lors de l’exécution du programme (“run-time”). Le modificateur constexpr indique que la valeur est calculée lors de la compilation.

La constante kMyConstant a un type précis et on obtient le résultat attendu si on la multiplie par une autre valeur. Le préfixe k dans le nom de la variable est une pratique tirée du “Google C++ Style Guide”.