11
votes

Pourquoi inclure-t-on les lignes non finies avec un point-virgule?

Lorsque, y compris les bibliothèques c, la ligne ne se termine pas par un point-virgule, tandis que d'autres déclarations font. Quelle est la raison derrière cela?

c

0 commentaires

4 Réponses :


18
votes

Même raison #define Macros NE PAS - Ils sont pour le préprocesseur, qui élargit des choses comme inclut et définit avant que le compilateur approprié prend le dessus.


3 commentaires

Un peu plus de définition - le pré-processeur fonctionne avant que le compilateur ne soit exécuté et remplace du texte. Une déclaration de #include est remplacée par le contenu du fichier référencé. A #define est entré dans une table de recherche, puis lorsque la définition est vue dans le code, elle est remplacée par la valeur stockée, etc., vous pouvez en fait utiliser un autre pré-processeur au lieu de la norme, mais peu Les gens le font dans le monde réel.


N'est-ce pas aussi le préprocesseur qui fait la continuation de la ligne funky comme \ et concaténant des littéraux de chaînes brisés?


@Justjeff: voir Stackoverflow.com/questions/1476892/... ; Concaténation de littéraux de chaîne est effectué en traduction Phase 6 entre prétraitement (phase 4) et analyse / compilation sémantique (phase 7), vous êtes donc libre de le faire dans le pré-processeur ou le compilateur; Les lignes de jonction le long de la traction arrière se déroulent dans la phase 2 avant que le préprocesseur approprié ne devienne au travail



10
votes

Les lignes commençant par un # ne font pas partie du langage C lui-même, elles sont des instructions pour un pré-processeur. Quand il a été conçu pour la première fois, les semi-couches n'était pas nécessaire.


0 commentaires

4
votes

#include est une commande de prétraitement comme #define . #include Indique au compilateur d'inclure le fichier spécifié dans votre code source avant que votre code ne soit compilé.


1 commentaires

J'ai réparé le formatage de vous; Lorsque vous tapez une réponse, vous pouvez consulter l'aperçu sous la zone de texte pour voir à quoi cela ressemblera. # est un formatage de char, vous devez donc la protéger d'une manière ou d'une autre.



7
votes

"... tandis que d'autres déclarations font".

Premièrement, Directives de préprocesseur em> ne sont pas déclarations em>. déclaration em> est une entité qui existe uniquement au niveau syntaxtique / sémantique. Les directives de préprocesseur sont traitées à des étapes relativement anticipées de la traduction, avant que toute analyse de la syntaxe ne commence, donc à ce stade, il n'y a pas encore de "déclaration". Et, pour cette raison, il n'y a pas de justification significative à la demande de mettre fin à la directive code> #include code> avec un point-virgule. Si les directives de préprocesseur par définition occupent toute la ligne, ce qui signifie qu'ils sont déjà terminés par un caractère nouveau. Tout terminateur supplémentaire serait redondant. P>

Deuxièmement, toutes les "autres déclarations" ne finissent pas avec le point-virgule. Une instruction composée, par exemple, ne P>

i = 5;

{ /* <- compound statement begins here... */
  i = 10;
} /* <- ... and ends here. Note: no semicolon */

i = 15;


0 commentaires