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 quesi (a) si (b) {...}; else {...} code> est une erreur de syntaxe (else code> sans correspondancesi code>).@Adamrosenfield Sont votre connaissance de tout autre construct, comme
if-ele code>,do-tandis que code> ettry-attraper code> où le point-virgule après la corde peut être illégal?