10
votes

C macro / # définir l'indentation?

Je suis curieux de savoir pourquoi je vois presque toutes les macros C formatés comme ceci: xxx

ou ceci: xxx

mais jamais ceci: xxx

(d'ailleurs, l'opérateur = ne semble que compter les deux premiers comme corrects.)

est Cela en raison de problèmes de portabilité entre compilateurs ou est-ce juste une pratique standard?


0 commentaires

4 Réponses :


5
votes

IIRC, les préprocesseurs plus anciens C nécessitaient le # comme le premier caractère de la ligne (même si je n'ai jamais rencontré celui qui avait cette exigence).

Je n'ai jamais vu votre code comme votre premier exemple. J'ai généralement écrit des directives de préprocesseur comme dans votre deuxième exemple. J'ai constaté que cela interfère visuellement avec l'indentation du code réel (pas que j'écris en C plus).

Le manuel de préprocesseur GNU C dit:

Les directives de prétraitement sont des lignes dans votre programme qui commence par '#'. WhitSpace est autorisé avant et après le '#'.


2 commentaires

Et il y a l'irritation supplémentaire (comme l'OP mentionné dans la question) que les éditeurs ont souvent leur propre idée de la manière dont les blocs conditionnels préprocesseurs doivent être indentés (ou non).


L'ancien compilateur VAX C (CIRCA 1986) lancerait une erreur si une directive de préprocesseur n'avait pas le dans la première colonne.



7
votes

J'ai vu cela fait tous les trois manières, il semble être une question de style, pas de syntaxe

Bien que le deuxième exemple est généralement le plus courant, j'ai vu des cas où le premier (ou le troisième) est utilisé pour distinguer plusieurs niveaux de #Ifdefs. Parfois, la logique peut devenir profondément imbriquée et la seule façon de la comprendre en un coup d'œil est d'utiliser une empreinte beaucoup comme celle-ci est une pratique courante d'indenter les blocs de code entre {et}.


0 commentaires

1
votes

Les directives de préprocesseur sont des lignes incluses dans nos programmes qui ne sont pas réellement des relevés de programme, mais des directives pour le préprocesseur. Ces lignes sont toujours précédées d'un signe de hachage (#). Whitespace est autorisé avant et après le '#'. Dès qu'un personnage de nouvelle ligne est trouvé, la directive de préprocesseur est considérée comme une fin.

Il n'y a pas d'autre règle aussi loin que la norme de C / C ++ concernée, il reste donc la question de style et de lisibilité, j'ai vu / écrit des programmes que dans la deuxième manière que vous avez posté, bien que le troisième semble plus lisible.


0 commentaires

3
votes

Pour préférence, j'utilise le troisième style, à l'exception des gardes inclus, pour lesquels j'utilise le deuxième style.

Je n'aime pas le premier style du tout - je pense à #define comme étant une instruction de préprocesseur, même si ce n'est vraiment pas ce n'est pas, c'est un # suivi de l'instruction de préprocesseur définir . Mais depuis que je pense de cette façon, il semble tort de les séparer. Je m'attends à ce que des éditeurs de texte écrits par des personnes qui préconisent ce style auront un bloc d'indentement / un tiret qui fonctionne sur le code écrit dans ce style. Mais je détesterais à le rencontrer à l'aide d'un éditeur de texte qui n'a pas.

Il n'y a pas de point ponte aux préprocesseurs antiques où le numéro doit être le premier caractère de la ligne, à moins que vous ne puissiez également énumérer le haut de votre tête toutes les autres différences entre ces implémentations et la norme C, afin d'éviter le D'autres choses que vous pourriez éventuellement faire pour ne pas soutenir. Bien sûr, si vous travaillez véritablement avec un compilateur pré-standard, assez juste.


0 commentaires