error C2143: erreur de syntaxe : manquant ';' avant 'type'
Je suis nouveau en programmation C.. s'il vous plaît dites-moi quel est le problème avec ce programme, et pourquoi j'obtiens cette erreur: error C2143: erreur de syntaxe : manquant ';' avant 'type'....
extern void func();
int main(int argc, char ** argv){
func();
int i=1;
for(;i<=5; i++) {
register int number = 7;
printf("number is %d\n", number++);
}
getch();
}
- Je n'ai pas utilisé visual dans au moins 8 ans, mais n'Visuelle limitée du compilateur C de soutien de permettre le mélange de code et les variables? Est la ligne de l'erreur sur la déclaration int i=1; ?? Essayez de le déplacer au-dessus de l'appel à la touche func(); Aussi, je voudrais utiliser extern void func(void);
- Vous n'êtes pas montrer le code complet. L'aide de l'extrait en question est fine et ne devrait pas avoir des erreurs de syntaxe.
- Je crois que c'est le problème: Visual C ne permet pas de mélange des déclarations et, d'une fonctionnalité ajoutée à C en 1999 de la norme ISO, Visual Studio ne prend pas en charge. Vous devriez poster que comme une réponse.
- Vous êtes en manque de l'
#include <stdio.h>
, en plus de la#include
pour ce que l'en-tête définitgetch
(<conio.h>
, je pense). - Juste assez, @KeithThompson, ce que je pensais, mais ça fait un moment. Je ne pense pas que son exemple était censé compiler complètement. Depuis, il ne retourne pas une valeur de main (), soit.
- Pas de retour d'une valeur de
main()
n'est pas illégal. En C89/C90, elle renvoie un statut non défini pour l'environnement. En C99, il est équivalent àreturn 0;
. - J'ai été un peu facétieuse, mais oui.
- Il serait plus facile de faire de l'attribution initiale pour
i
dans lefor
boucle:int i; for (i = 1; i <= 5; i ++) ...
. (Vous pouvez déclarer qu'il n'ainsi si MS pris en charge C99.) - Merci, j'apprécie l'aide. Ça fonctionne maintenant
Vous devez vous connecter pour publier un commentaire.
Je n'ai pas utilisé visual dans au moins 8 ans, mais il semble que Visual limitée de la prise en charge du compilateur C ne permet pas de code mixte et variables. Est la ligne de l'erreur sur la déclaration de
int i=1;
?? Essayez de le déplacer au-dessus de l'appel àfunc();
Aussi, je voudrais utiliser
extern void func(void);
Visual Studio prend en charge uniquement C89. Cela signifie que toutes les variables doivent être déclarées avant toute chose, au sommet d'une fonction.
EDIT: @KeithThompson m'a incité à ajouter une plus techniquement, l'exactitude de la description (et vraiment juste correct où le mien n'est pas dans un sujet). Toutes les déclarations de variables ou de quoi que ce soit d'autre) doit précéder toutes les instructions dans un bloc.
ce:
devrait être idiomatique écrit comme:
puisqu'il n'y a point de déclarer
for
variable de boucle dans le domaine de la fonction.for
bloc et cela devrait résoudre son problème.for
boucle les en-têtes et mélange des déclarations et des en C++. Si vous compilez votre code C (par le nom de votre fichier avec un.c
extension), il ne supporte que le 1989/1990 C standard (avec très peu d'extensions telles que//
commentaires, je crois), -- ce qui signifie que vous ne pouvez pas utiliser la même fonctionnalité qui existent dans les deux C99 et C++.for(int i=1; ...)
qui déclare une variable à l'intérieur de lafor
déclaration n'est pas valide en C89. Essayez de compiler avecgcc -std=c89
ouclang -std=c89
. Si VS soutient que la syntaxe comme une extension de code en C, je ne peux pas dire à coup sûr.//
commentaires. (Bien sûr, il prend en charge toutes ces pour C++.)