ISO C90 prohíbe las declaraciones mixtas y el código en C

Declaré una variable de esta manera:

int i = 0; 

Recibo la advertencia:

ISO C90 prohíbe las declaraciones mixtas y el código

¿Cómo puedo arreglarlo?

Creo que deberías mover la statement de variable al principio del bloque. Es decir

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

a

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

Hasta el estándar C99, todas las declaraciones tenían que venir antes de cualquier statement en un bloque:

 void foo() { int i, j; double k; char *c; // code if (c) { int m, n; // more code } // etc. } 

C99 permitió mezclar declaraciones y declaraciones (como C ++). Muchos comstackdores todavía tienen el valor predeterminado de C89, y algunos comstackdores (como el de Microsoft) no son compatibles con C99 en absoluto .

Por lo tanto, deberá hacer lo siguiente:

  1. Determine si su comstackdor es compatible con C99 o posterior; si lo hace, configúrelo para que compile C99 en lugar de C89;

  2. Si su comstackdor no es compatible con C99 o posterior, necesitará encontrar un comstackdor diferente que lo soporte, o reescribir su código para que todas las declaraciones vengan antes de cualquier statement dentro del bloque.

Simplemente use un comstackdor (o proporciónele los argumentos que necesita) para que compile para una versión más reciente del estándar C, C99 o C11. Por ejemplo, para la familia de comstackdores GCC que sería -std=c99 .

Asegúrese de que la variable esté en la parte superior del bloque y, en caso de que la compile con -ansi-pedantic , asegúrese de que se vea así:

 function() { int i; i = 0; someCode(); } 

Para diagnosticar lo que realmente desencadena el error, primero trataría de eliminar = 0

  • Si se produce un error en el error, lo más probable es que la statement vaya después del código.

  • Si no hay error, entonces puede estar relacionado con un estándar C / banderas de comstackción O … algo más.

En cualquier caso, declare la variable al comienzo del scope actual. Puede inicializarlo por separado. De hecho, si esta variable merece su propio scope, delimite su definición en {}.

Si el OP pudiera aclarar el contexto, entonces se produciría una respuesta más dirigida.