ISO C90 forbids mixed declarations and code in C ISO C90 forbids mixed declarations and code in C c c

ISO C90 forbids mixed declarations and code in C


I think you should move the variable declaration to top of block. I.e.

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

to

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


Up until the C99 standard, all declarations had to come before any statements in a block:

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

C99 allowed for mixing declarations and statements (like C++). Many compilers still default to C89, and some compilers (such as Microsoft's) don't support C99 at all.

So, you will need to do the following:

  1. Determine if your compiler supports C99 or later; if it does, configure it so that it's compiling C99 instead of C89;

  2. If your compiler doesn't support C99 or later, you will either need to find a different compiler that does support it, or rewrite your code so that all declarations come before any statements within the block.


Just use a compiler (or provide it with the arguments it needs) such that it compiles for a more recent version of the C standard, C99 or C11. E.g for the GCC family of compilers that would be -std=c99.