MSVC против GCC: объявление переменной в функции - PullRequest
0 голосов
/ 20 июля 2011

Как всем известно, стандарт C требует объявления переменных в верхней части тела функции.

C ++ позволяет объявлять его где угодно, непосредственно перед тем, как он будет использоваться.

MSVC следует стандарту, когдаработа с исходными файлами .c и .cpp.

GCC позволяет объявлять переменные в любом месте тела функции, даже если исходный файл имеет формат .c

. У меня огромное количество файлов .c, которые хорошо компилируются в GCCи не в MSVC из-за этого.Я не могу переименовать их все в .cpp.

Есть ли какой-нибудь простой способ указать компилятору MSVC обрабатывать файл .c как файлы C ++?

Ответы [ 4 ]

4 голосов
/ 20 июля 2011

C89 стандарт требуется. Текущий C99 один не делает. В любом случае, переключатель /TP для обработки всех входных файлов как C ++ и /Tp<file> для обработки выбранного - имейте в виду, что это может ничего не исправить, но также вводит новые ошибки и , это будет искажайте имена, чтобы не мешать взаимодействию.

Лучшим решением было бы просто скомпилировать часть C с GCC.

3 голосов
/ 20 июля 2011

В VisualStudio 2010 перейдите в свойства своего проекта. Перейдите в Свойства конфигурации -> C / C ++ -> Дополнительно

Для «Компилировать как» выберите «Компилировать как код C ++» (/TP).

Это относится ко всем файлам .c и .cpp в проекте.

2 голосов
/ 20 июля 2011

Параметр / TP позволяет компилировать любой файл в виде файла C ++ и / TC в виде файла C-File.Но, к сожалению, это настройка для каждого файла.Так что вам придется установить это для каждого файла.Может быть, вы можете сделать это с помощью небольшого скрипта и проанализировать файл .vcproj и заменить / TC на /TP.

1 голос
/ 20 июля 2011

/Tp

http://msdn.microsoft.com/en-us/library/032xwy55(v=vs.80).aspx

MSVC поддерживает только C89.

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