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? P>
4 Réponses :
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. P>
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
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. P>
#include code> est une commande de prétraitement comme #define code>. #include code> Indique au compilateur d'inclure le fichier spécifié dans votre code source avant que votre code ne soit compilé. p>
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.
"... 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;