Отключить языковые расширения для определенного блока кода? - PullRequest
4 голосов
/ 08 декабря 2011

Я хотел бы отключить языковые расширения в компиляторе MSVC, но только для определенного блока кода.

Существует опция компилятора , которую можно настроить для отключения языковых расширений для всего модуля перевода (например, для всего файла), но я этого не хочу. В конечном итоге я хочу включить языковые расширения при компиляции операторов #include и других вещей препроцессора, но отключить для моего реального кода.

Есть ли способ отключить языковые расширения для определенного блока кода или использовать #pragma в MSVC 2008?

1 Ответ

1 голос
/ 08 декабря 2011

Это не должно быть возможно, поскольку при включении языковых расширений Visual Studio использует другой алгоритм для компиляции кода, что происходит после расширения препроцессора. Другими словами, невозможно скомпилировать половину файла с расширениями, а другую без.

Позвольте мне проиллюстрировать пример с использованием расширения Variable-Length Argument Lists. Что если функция определена следующим образом в одном из ваших заголовочных файлов:

void myfunc( int x, ... );
void myfunc( int x, char * c )
{ }

Позже в исходном файле вы звоните

char * c = new char;
myfunc(5, c);

В соответствии с ANSI C объявление в заголовочных файлах вообще не имеет смысла, поэтому следует вызывать myfunc с "...", а в соответствии с MSVS следует использовать вторую функцию.

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