Как я могу сказать компилятору Visual Studio / Microsoft C разрешить объявления переменных после первого оператора? - PullRequest
15 голосов
/ 30 сентября 2011

У меня есть код, который компилируется в компиляторе GNUARM, но Visual Studio 2010 выдает ошибки.Проблема заключается в объявлении переменных после первого оператора в файле языка C:

main.c

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  int i = 6;
  i = i + 1;
  printf("Value of i is: %d\n", i);
  int j = i * 10; // <-- This is what Visual Studio 2010 complains about.
  printf("Value of j is: %d\n", j);
  return EXIT_SUCCESS;
}

Следующий код компилируется без ошибок:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  int i = 6;
  int j;      // <-- Declaration is now here, valid according to K&R rules.
  i = i + 1;
  printf("Value of i is: %d\n", i);
  j = i * 10; // <-- Moved declaration of j to above.
  printf("Value of j is: %d\n", j);
  return EXIT_SUCCESS;
}

IЯ использую настройки по умолчанию для создания консольного проекта Win32.Когда я устанавливаю свойство «Компилировать как» в «Компилировать как C ++ (/ TP)», я получаю ошибки компиляции в некоторых заголовочных файлах Visual Studio.(Щелкните правой кнопкой мыши по проекту, выберите Свойства Свойства конфигурации C / C ++ Дополнительно ).

Какя могу сказать Visual Studio 2010, чтобы разрешить объявления переменных после первого оператора, например, C ++ или текущий стандарт языка C?

Ответы [ 3 ]

8 голосов
/ 30 сентября 2011

Ты не.Visual C ++ не поддерживает C99.

Вам нужно будет скомпилировать как C ++ (и соответствующим образом обновить код) или следовать правилам C89.

(я не знаю, какие ошибки вы получаете при компиляции с /TP; я могу успешно скомпилировать ваш пример с помощью /TP, если я добавлю #include <stdlib.h> для EXIT_SUCCESS; если вы предоставите более подробную информацию,Я или кто-то еще может помочь.)

6 голосов
/ 15 августа 2014

Начиная с Visual Studio 2013, компилятор Visual C ++ поддерживает объявления переменных в стиле C99. Более подробную информацию можно найти в:

http://blogs.msdn.com/b/vcblog/archive/2013/06/28/c-11-14-stl-features-fixes-and-breaking-changes-in-vs-2013.aspx

2 голосов
/ 30 сентября 2011

Я сделал тот же тест с проектом Visual Studio 2010 по умолчанию, с файлом C и переключателем /TP, и получил ошибку скомпилированных заголовков.Его можно удалить, переименовав stdafx.cpp в stdafx.c или отключив предварительно скомпилированные заголовки для всего проекта или для определенных файлов Си.

Других проблем я не нашел.Однако это эффективно конвертирует язык C в C ++, что, я думаю, не является вашим намерением.Однако C позволяет определять переменную в начале каждого блока {}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...