Инициализация переменной в разных полях в окнах дает ошибку

Я инициализирую простую переменную int в моем коде, но она дает некоторые нежелательные ошибки... Если я использую переменную integer (или другой тип данных), в некоторых местах она дает ошибку. Я записываю свой код и помещаю комментарий, где целочисленная переменная показывает ошибку.

#include<stdio.h>
#include<windows.h>

//int i; ///********* no problem ************

int main()
{ 
 //int i; ///********* no problem ************
 STARTUPINFO si;
 PROCESS_INFORMATION pi;
 //int i; ///********* no problem ************
 ZeroMemory(&si,sizeof(si));
 //int i; // error C2143: syntax error : missing ';' before 'type' 
 si.cb=sizeof(si);
 //int i; //error C2143: syntax error : missing ';' before 'type' 
 ZeroMemory(&pi,sizeof(pi));

 //int i; //error C2143: syntax error : missing ';' before 'type' 

 if(CreateProcess("C:\\Windows\\System32\\notepad.exe",NULL,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi))

 {
 //int i; ///********* no problem ************
 printf("process created\n pid is=%d tid is=%d\n",pi.dwProcessId,pi.dwThreadId);

 }
 else
 { 
 //int i; ///********* no problem ************
 printf("process creation error\n");
 }

 // int i; // error C2143: syntax error : missing ';' before 'type' 

}
</windows.h></stdio.h>

Я использую компилятор cl.exe и visual studio 2012. Я компилирую код из командной строки

cl process.c
2 ответа

Компилятор Visual Studio не поддерживает C99, который вы пытаетесь использовать.

Вы должны использовать только C90, т.е. Сохранять объявления переменных в верхней части своей области.


Вы должны объявить все свои переменные сразу после функции {.

Это связано с тем, что Visual Studio поддерживает C89 и C89, запрещает смешанные объявления. В C99 и более поздних версиях переменные могут быть объявлены в любом месте

licensed under cc by-sa 3.0 with attribution.