Quels sont les caractères valides pour les noms de macro?
Sont de style C les noms de macro soumis aux mêmes règles de nommage que les identifiants? Après un compilateur de mise à niveau, il est maintenant émettant cet avertissement pour une application legacy:
warning #3649-D: white space is required between the macro name "CHAR_" and its replacement text
#define CHAR_& 38
Cette ligne de code est la définition d'une valeur ASCII constante pour une esperluette.
#define DOL_SN 36
#define PERCENT 37
#define CHAR_& 38
#define RT_SING 39
#define LF_PAR 40
Je suppose que cette définition (et non pas référencé par un code, autant que je puis dire) est défectueux et doit être remplacé par quelque chose comme "CHAR_AMPERSAND"?
Vous devez vous connecter pour publier un commentaire.
Noms de Macro doit seulement contenir des caractères alphanumériques et traits de soulignement, c'est à dire
'a-z'
,'A-Z'
,'0-9'
, et'_'
, et le premier caractère ne doit pas être un chiffre. Certains préprocesseurs également permis le signe dollar'$'
, mais vous ne devriez pas l'utiliser; malheureusement, je ne peux pas citer le C standard puisque je n'ai pas une copie de celui-ci.De la La documentation de GCC:
clang
permet à beaucoup de "fou" caractères.. même si j'ai eu du mal à trouvertoutbeaucoup de rime ni raison - comme à pourquoi certains sont autorisés, et d'autres sont pas. Par exemple..encore
Qui sait. J'adorerais... mais Google a donc pas de moi, jusqu'à présent. Toute réflexion sur le sujet, serait appréciée™️.
Vous avez raison, les mêmes règles s'appliquent pour la macro et les identificateurs d'autant que les noms sont concernés: les caractères valides sont [A-Za-z0-9_].
Il est d'usage courant d'utiliser des noms en MAJUSCULE pour les différencier des macros à partir d'autres identificateurs de variables et le nom de la fonction.
Les mêmes règles qui spécifient des identificateurs valides pour les noms de variables s'appliquent aux noms de macro avec l'exception que les macros peuvent avoir le même nom que des mots clés. Les caractères valides en identifiant les noms suivants
digits
etnon-digits
et ne doit pas commencer par un chiffre.non-digits
inclure les lettres majuscules A-Z, les lettres minuscules a-z, le trait de soulignement, et toute la mise en œuvre défini caractères.