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

0

Я инициализирую простую переменную 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'  

}

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

cl process.c 
  • 0
    Важное замечание: вы не компилируете программу на C ++, вы компилируете программу на C.
Теги:
compiler-errors
visual-studio-2012

2 ответа

6
Лучший ответ

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

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

  • 0
    большое спасибо за помощь ...
  • 0
    ... или переключиться на компилятор, поддерживающий что-то более новое, чем 25-летний стандарт (например, MinGW включает порт GCC).
1

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню