if(...) { ... } It seems in the above case a ; is optional,when is a semicolon after } necessary in c/c++?
3 Réponses :
class A {}; // same for `struct enum E {}; // enum class (c++0x) int a[] = {1,2}; // array or object initialization
tout rationnel derrière tout cela?
@cpuer Ce n'est pas une justification mais struct {int i; } S; code> est significatif en C et C ++. Lorsque vous n'avez pas besoin de l'objet (s) (ici,
s code>), alors le
; code> reste.
@CPuer: Pour la classe Classe Code> et
Enum CODE> Exemples, j'ai expliqué dans les commentaires sur la réponse d'Ernest. Pour les initialisations de tableau ou d'objet, vous avez besoin d'un point-virgule simplement parce qu'ils sont des déclarations et toutes les déclarations sont terminées par
; code> s :)
@cpuer, comme @LUC a dit, puisque dans C ++ code> Vous pouvez déclarer des objets / des pointeurs après la déclaration
Classe / STRIT / ENUM CODE> Déclaration. Mettre un
; code> aide l'analyseur à saisir le nom code> code> pour déclarer n'importe quel objet. Depuis la fonction /
Espace de noms 'ne sont pas de type; le code>; `après eux n'est pas obligatoire.
N'oubliez pas un do { ...} tandis que (...); code>
Un point-virgule en soi est une déclaration vide em>, et vous pouvez ajouter des extraités n'importe où une déclaration est légale. Il serait donc légal de mettre un point-virgule juste après les accolades suivant votre si code>, bien qu'il ne soit pas lié au
si code> du tout. Le seul endroit où je peux penser où un point-virgule est requis em> juste après une cordette après une déclaration de classe en C ++. P>
Pourquoi ; code> est requis après la déclaration de classe mais non après la déclaration de fonction? L'analyseur C ++ ne peut pas l'analyser sans le
; code> dans ce cas?
@CPuer: Parce que vous pouvez déclarer des instances sur le site de définition. Par exemple: struct abc {int foo; Barre int; } exemple; code> crée une variable nommée
exemple code> de type
abc code>.
Un point-virgule après une corail de fermeture est manadiatoire s'il s'agit de la fin de la déclaration em>. S'il s'agit de la fin de la déclaration de bloc em>, aucun point-virgule n'est nécessaire et si l'on utilise, il fait une déclaration supplémentaire em>, qui peut être illégale si c'est le milieu d'un Les points-virgules sont requis de nombreux endroits pas em> après une attelle proche (à la fin de toute déclaration, à l'exception d'une déclaration de bloc, à la fin de toute déclaration, même s'il n'y a pas de si code> -
ele code> ou un
est code> -
tandis que code> (ou un
essayez code> -
attrape code> en C ++) p>
} < / code>, dans un
pour code> clause, etc., mais généralement les accolades ne sont impliquées dans aucun de ceux-ci. P>
Un do-tandis que code> a besoin d'un demi-point à la fin!
@RubenVB: Si vous essayez de mettre un ; code> après le
} code> dans un
faire code> -
pendant code> boucle, vous " ll obtenir une erreur de syntaxe.
Mais il est nécessaire après la finale ) code>.
@Adamrosenfield Sont votre connaissance de tout autre construct, comme if-ele code>,
do-tandis que code> et
try-attraper code> où le point-virgule après la corde peut être illégal?
Semicolon Il n'y a pas de facultatif. Ce
si (a) si (b) {...} else {...} code> signifie une chose, tandis que
si (a) si (b) {...}; else {...} code> est une erreur de syntaxe (
else code> sans correspondance
si code>).
@Adamrosenfield Sont votre connaissance de tout autre construct, comme
if-ele code>,
do-tandis que code> et
try-attraper code> où le point-virgule après la corde peut être illégal?