101 votes

L'ISO C90 interdit les déclarations et le code mixtes en C

J'ai déclaré une variable de cette façon :

int i = 0;

Je reçois l'avertissement :

La norme ISO C90 interdit les déclarations et les codes mixtes.

Comment puis-je le réparer ?

157voto

kotlinski Points 12815

Je pense que vous devriez déplacer la déclaration de la variable en haut du bloc. Par exemple.

{
    foo();
    int i = 0;
    bar();
}

a

{
    int i = 0;
    foo();
    bar();
}

45voto

John Bode Points 33046

Jusqu'à la norme C99, toutes les déclarations devaient être placées avant les instructions dans un bloc :

void foo()
{
  int i, j;
  double k;
  char *c;

  // code

  if (c)
  {
    int m, n;

    // more code
  }
  // etc.
}

C99 permettait de mélanger les déclarations et les instructions (comme C++). De nombreux compilateurs utilisent toujours C89 par défaut, et certains compilateurs (comme celui de Microsoft) ne supportent pas C99. du tout .

Vous devrez donc faire ce qui suit :

  1. Déterminez si votre compilateur supporte C99 ou plus ; si c'est le cas, configurez-le pour qu'il compile C99 au lieu de C89 ;

  2. Si votre compilateur ne prend pas en charge C99 ou les versions ultérieures, vous devrez soit trouver un compilateur différent qui hace ou réécrivez votre code de manière à ce que toutes les déclarations précèdent les instructions à l'intérieur du bloc.

11voto

Jens Gustedt Points 40410

Il suffit d'utiliser un compilateur (ou de lui fournir les arguments dont il a besoin) tel qu'il compile pour une version plus récente du standard C, C99 ou C11. Par exemple, pour la famille de compilateurs GCC, ce serait -std=c99 .

6voto

Ron Nuni Points 188

Assurez-vous que la variable se trouve dans la partie supérieure du bloc, et au cas où vous le compileriez avec -ansi-pedantic assurez-vous que ça ressemble à ça :

function() {
    int i;
    i = 0;

    someCode();
}

2voto

vmsnomad Points 319

Pour diagnostiquer ce qui déclenche vraiment l'erreur, je commencerais par essayer de supprimer = 0

  • Si l'erreur est déclenchée, il est fort probable que la déclaration se trouve après le code.

  • S'il n'y a pas d'erreur, cela peut être lié à une application de la norme C/des drapeaux de compilation OU ... quelque chose d'autre.

Dans tous les cas, déclarez la variable au début de la portée actuelle. Vous pourrez ensuite l'initialiser séparément. En effet, si cette variable mérite sa propre portée - délimitez sa définition par {}.

Si le PO pouvait clarifier le contexte, alors une réponse plus dirigée suivrait.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X