C erreur: Attendu expression avant de l'int
Quand j'ai essayé le code suivant, je reçois le message d'erreur mentionné.
if(a==1)
int b =10;
Mais la suite est syntaxiquement correct
if(a==1)
{
int b = 10;
}
Pourquoi est-ce?
- Postez votre erreur. Votre code est bon d'aller, sauf si vous êtes accédant à "b" hors de portée.
- J'ai mentionné l'erreur dans le titre. Aussi, même si b n'est pas utilisé n'importe où ailleurs dans le code, l'erreur vient toujours en place.
- Oh...Mon mauvais 🙂
- Aussi, il y a quelques différences entre le C et le C++ qui est le mieux résolu par aller directement à la documentation. L'examen de mon répondre concernant le
while
boucle, dans lequel j'ai lutté avec la même erreur de compilation.
Vous devez vous connecter pour publier un commentaire.
C'est en fait une assez intéressante question. Ce n'est pas aussi facile qu'il y paraît au premier abord. Pour référence, je vais être en fondant cet arrêt de la dernière C11 grammaticales de la langue définie dans N1570
Je suppose que la contre-intuitif partie de la question est: si c'est correct C:
alors pourquoi n'est-ce pas aussi C correct?
Je veux dire, une ligne conditionnelle
if
déclaration doit être fine avec ou sans croisillons, droit?La réponse se trouve dans la grammaire de la
if
déclaration, tel que défini par la norme. Les parties pertinentes de la grammaire que j'ai cité ci-dessous. Brièvement: laint b = 10
ligne est un déclaration, pas un déclaration, et de la grammaire pour laif
déclaration nécessite une déclaration après la condition qu'il teste. Mais si vous vous joignez à la déclaration d'accolades, il devient une déclaration et tout se passe bien.Et juste pour le plaisir de répondre à la question complètement -- cela n'a rien à voir avec la portée. Le
b
variable qui existe à l'intérieur de cette étendue sera inaccessible de l'extérieur, mais le programme est syntaxiquement correct. Strictement parlant, le compilateur ne doit pas jeter une erreur sur elle. Bien sûr, vous devez être la construction avec-Wall -Werror
de toute façon 😉while
boucle, dans lequel j'ai lutté avec la même erreur de compilation.if ( expression ) statement
), tandis que le vôtre traite avec son contrôle de la expression. Dans le cas de cette réponse, le C et le C++ grammaires sont identiques.{ }
-->définit l'étendue,
if(a==1) { int b = 10; }
dit, vous définissez int b, pour {}- cette portée. Pouril n'y a aucune portée. Et vous ne serez pas en mesure d'utiliser
b
n'importe où.En C89, la variable ne peut être définie en haut d'un bloc.
if
doit être suivie d'une déclaration, cependant un corset-ci-joint la liste des déclarations et compte comme une déclaration.