2010-08-25 6 views
1

Visual Studio 2008 n'attrape pas les erreurs de syntaxe. par exemple: Tpc_feed(void); compile bien. ceci: Tpc_feed(void);;;;;;; se compile bien, mais ce Tpc_feed(void) attrape une erreur. Les points-virgules supplémentaires ne sont-ils pas des erreurs de syntaxe? Je suis sur Windows 7 32 bits et VS C++ 2008Visual Studio 2008 ne rencontre pas d'erreur de syntaxe

+0

Les règles de grammaire requièrent le point-virgule. Les points-virgules consécutifs impliquent des lignes vides de code, qui sont ignorées par le compilateur. – Rahul

Répondre

7

Techniquement, c'est une erreur de syntaxe, mais la plupart des compilateurs le permettent de toute façon. GCC l'autorise même par défaut, sauf si vous compilez avec -pedantic.

Dans tous les cas, c'est contre la norme donc vous devriez vous débarrasser des extras.

+0

Je sais que je devrais me débarrasser d'eux, mais pourquoi les compilateurs le permettent-ils? – TheFuzz

+1

Qui sait? Les compilateurs ne sont pas parfaits. Ce n'est probablement pas une haute priorité à corriger parce que (1) n'a aucun effet sur les programmes corrects, et (2) il est facile de deviner l'intention du codeur quand il tape comme ça. – zildjohn01

1

Sans un type de retour, aucun d'entre eux ne devrait compiler en C++. En supposant qu'un type de retour est ajouté, les points-virgules supplémentaires sont autorisés sur les déclarations de fonction de membre, mais si les déclarations sont en dehors d'une classe/struct, elles sont interdites. Je ne crois pas que VC++ ait un drapeau pour les contraindre à être marqués comme des erreurs.

Edit: En fait (revenir en arrière et les choses revérifier), un point-virgule inutile est autorisé suite à une fonction membre définition, mais je pense que vous avez raison, et il n'a pas le droit suite à une fonction membre déclaration.

+0

son constructeur de classe, donc ne compile-t-il pas en C++? – TheFuzz

+0

Oh, d'accord - oui, un ctor n'a pas besoin de (et en fait, ne peut pas) spécifier un type de retour. Mes excuses. –

0

Comme d'autres l'ont déjà dit, ce n'est pas un C++ valide. La raison pour laquelle beaucoup de compilateurs soutiennent qu'il est de toute façon qu'il permet de créer des macros un peu plus facile/plus intuitive, considérez ceci:

// Declares a function, and because the semicolon belongs to the declaration, the macro adds it 
#define MY_FUNCTION_DECL(returnType, arguments) returnType myFunction arguments; 

// Calling macros looks like functions, the semicolon looks natural 
MY_FUNCTION_DECL(void, (int, int, int)); // There are two semicolons now 

Cet exemple est un peu bizarre que je l'ai fait en ce moment, mais il devrait représenter l'idée derrière accepter plus de points-virgules comme valides.

Questions connexes