Компилятор C, используемый Visual Studio 2017, более или менее совместим с C99.
В C99 переменные могут быть объявлены в другом месте, в начале области, как в C ++.
Таким образом, этот фрагмент кода является допустимым C99, но он недействителен C89:
int foo(void)
{
printf("Hello. ");
int bar = 2;
printf("Bar = %d\n", bar);
}
Это допустимо C89:
int foo(void)
{
int bar = 2;
printf("Hello. ");
printf("Bar = %d\n", bar);
}
Более подробная информация здесь: https://en.wikipedia.org/wiki/ANSI_C#C89