MV Studio Express 2012, компилятор си не разрешает объявлять переменные вне начала функции - C (СИ)

Узнай цену своей работы

Формулировка задачи:

компилятор си не разрешает объявлять переменные вне начала функции. по googlu 99 версия компилятора. вопрос? как это исправить в MV Studio 2012.+ У меня MV Studio Express 2012: пишу на си. вопрос? как сделать так, что-бы объявлять переменные и константы, а также их инициировать, не только в начале функции, как того требует стандарт C99, может где настройки какие. может другой компилятор нужен? заранее спасибо.

Решение задачи: «MV Studio Express 2012, компилятор си не разрешает объявлять переменные вне начала функции»

textual
Листинг программы
#define _CRT_SECURE_NO_WARNINGS
 
#include <windows.h></windows.h>
#include <stdio.h></stdio.h>
//#include <stdlib.h></stdlib.h>
//#include <string.h></string.h>
 
int main()
{   
 
 HANDLE hFile;                              // я могу объявить переменные в начале функции
 BOOL Boolean=TRUE;
 DWORD lpNumberOfBytesWrite;
 int error, size;
 char *Psf;
 char strNameFile[128];
 char strPatchFile[132]={"C:\\"};
 
 printf("C:\\");
 
 scanf("%132s", strNameFile); 
 strcat(strPatchFile, strNameFile);
 
 
 hFile=CreateFile(strPatchFile,              // адрес строки имени файла 
                    GENERIC_READ,            // режим доступа
                    0,                       // режим совместного использования файла 
                    NULL,                    // дескриптор защиты 
                    OPEN_ALWAYS,             // параметры создания 
                    FILE_ATTRIBUTE_NORMAL,   // атрибуты файла 
                    NULL);
                    
 if (hFile == INVALID_HANDLE_VALUE)
    { 
     printf("Could not open file.");
     return 0;
    }
 
 
                                                int i;       // но здесь происходит ошибка
 
 
 
 
 size=GetFileSize(hFile,        // идентификатор файла
                   NULL);       // адрес старшего слова для 
                                // размера файла
 error=GetLastError();
 printf("error: %d \n", error);
 
 Psf=(char*)malloc(size*sizeof(char));
 
 Boolean=ReadFile(hFile,               // идентификатор файла 
                    Psf,               // адрес записываемого блока данных 
                 size*sizeof(char),    // количество байт, которые 
                                       // необходимо записать
             &lpNumberOfBytesWrite,    // адрес слова, в котором 
                                       // будет сохранено количество записанных байт 
                    NULL);             // адрес структуры типа OVERLAPPED
 
 CloseHandle(hFile);
 
 //**********************************************************************************
 
 hFile=CreateFile("C:\\text.txt",            // адрес строки имени файла 
                    GENERIC_WRITE,           // режим доступа
                    0,                       // режим совместного использования файла 
                    NULL,                    // дескриптор защиты 
                    CREATE_ALWAYS,           // параметры создания 
                    FILE_ATTRIBUTE_NORMAL,
                    NULL);
                   
 if (hFile == INVALID_HANDLE_VALUE) 
    { 
     printf("Could not open file.");
     return 0;
    }
 
 Boolean=WriteFile(hFile,          // идентификатор файла 
                     Psf,          // адрес записываемого блока данных 
             size*sizeof(char),    // количество байт, которые 
                                   // необходимо записать
         &lpNumberOfBytesWrite,    // адрес слова, в котором 
                                   // будет сохранено количество записанных байт 
                    NULL);         // адрес структуры типа OVERLAPPED 
 
//******************************************************************************
 
 printf("size file: 0x%X\npointer: 0x%X \n\n",lpNumberOfBytesWrite,Psf);
 free(Psf);
 
 size=GetFileSize(hFile, NULL);
 error= GetLastError();
 
 if(Boolean==TRUE)
    printf("TRUE \nerror: %d \nsize file: %d \n\n",error,size);
 else
    printf("FALSE \nerror: %d \nsize file: %d \n",error,size);
 
 CloseHandle(hFile);
 
 system("pause>>void");
 return 0;
}

Объяснение кода листинга программы

  1. #define _CRT_SECURE_NO_WARNINGS - это директива препроцессора, которая отключает некоторые предупреждения, которые могут быть полезны при отладке кода, но могут вызывать ошибки компиляции. Эта директива позволяет компилятору игнорировать определенные предупреждения.
  2. HANDLE hFile; - это переменная типа HANDLE, которая используется для хранения дескриптора файла. Дескриптор файла - это уникальный идентификатор файла, который используется операционной системой для управления файлом.
  3. BOOL Boolean=TRUE; - это переменная типа BOOL, которая инициализируется значением TRUE. Тип BOOL может иметь только два значения: TRUE и FALSE.
  4. DWORD lpNumberOfBytesWrite; - это переменная типа DWORD, которая используется для хранения количества байт, которые были записаны в файл.
  5. int error, size; - это переменные типа int, которые используются для хранения ошибок и размера файла соответственно.
  6. char *Psf; - это переменная типа char *, которая используется для хранения указателя на блок памяти, который будет использоваться для чтения и записи данных в файл.
  7. char strNameFile[128]; - это переменная типа char, которая используется для хранения строки имени файла, который будет открыт.
  8. char strPatchFile[132]={C:\}; - это переменная типа char, которая используется для хранения строки пути к файлу, который будет открыт.
  9. printf(C:\); - это функция printf, которая используется для вывода строки C:\\ в консоль.
  10. scanf(%132s, strNameFile); - это функция scanf, которая используется для чтения строки имени файла из консоли.
  11. strcat(strPatchFile, strNameFile); - это функция strcat, которая используется для добавления строки strNameFile в конец строки strPatchFile.
  12. hFile=CreateFile(strPatchFile, GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - это функция CreateFile, которая используется для создания или открытия файла. В данном случае, файл strPatchFile будет открыт для чтения.
  13. if (hFile == INVALID_HANDLE_VALUE) - это условие, которое проверяет, является ли дескриптор файла hFile недействительным. Если это так, то выводится сообщение об ошибке и функция main возвращает значение 0.
  14. size=GetFileSize(hFile, NULL); - это функция GetFileSize, которая используется для получения размера файла.
  15. error=GetLastError(); - это функция GetLastError, которая используется для получения последнего кода ошибки, который был установлен операционной системой.
  16. Psf=(char*)malloc(size*sizeof(char)); - это функция malloc, которая используется для выделения памяти для блока данных. В данном случае, блок памяти будет выделен для строки, которая будет содержать содержимое файла.
  17. Boolean=ReadFile(hFile, Psf, size*sizeof(char), &lpNumberOfBytesWrite, NULL); - это функция ReadFile, которая используется для чтения данных из файла в блок памяти.
  18. CloseHandle(hFile); - это функция CloseHandle, которая используется для закрытия файла.
  19. hFile=CreateFile(C:\text.txt, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - это функция CreateFile, которая используется для создания или открытия файла. В данном случае, файл C:\\text.txt будет открыт для записи.
  20. Boolean=WriteFile(hFile, Psf, size*sizeof(char), &lpNumberOfBytesWrite, NULL); - это функция WriteFile, которая используется для записи данных в файл из блока памяти.

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

Оцени полезность:

7   голосов , оценка 3.714 из 5