Настройка Visual C ++ Studio / Express на строгий режим ANSI - PullRequest
7 голосов
/ 18 марта 2011

Я обычно программирую и компилирую под Linux с флагами gcc и -ansi;но я был вынужден выполнять работу в Visual C ++, и всякий раз, когда я компилирую свой код C, я получаю все предупреждения Microsoft, такие как

'fscanf': эта функция или переменная может быть небезопасной.Попробуйте вместо этого использовать fscanf_s.

Я получаю их, несмотря на следующие шаги на сайте MSDN Developer для настройки проекта ANSI C, но все вызовы _s ("secure") не являются ANSI C!

Какие-либо предложения по переводу Visual C ++ Studio в строгий режим только ANSI?

Спасибо.

Ответы [ 3 ]

6 голосов
/ 18 марта 2011

Как уже упоминалось в другом ответе, #define 'ing _CRT_SECURE_NO_WARNING будет учитывать конкретные предупреждения, которые вы упомянули в своем вопросе.

Если вы действительно ищете режим только для ANSI, самым близким является переключатель /Za . Внутри Visual Studio IDE вы можете найти его в диалоговом окне свойств проекта (в разделе Свойства конфигурации | C / C ++ | Язык | Отключить языковые расширения ).

Обратите внимание, что практически все приложения Windows создаются с включенными расширениями компилятора Microsoft; например, я не думаю, что вы даже сможете использовать заголовки Windows SDK с установленным /Za. Если ваш код действительно строгий ANSI, вы должны быть в порядке. Если у вас есть несколько специфичных для Windows компонентов в проекте, который в основном является строгим ANSI, вы, вероятно, можете изолировать эти источники и создавать только эти отдельные исходные файлы с /Za unset.

4 голосов
/ 18 марта 2011

Эти предупреждения можно подавить, определив _CRT_SECURE_NO_WARNING

. Перейдите в «Настройки процесса» -> «Препроцессор» и добавьте _CRT_SECURE_NO_WARNING

. Это не заставляет компилятор соответствовать ANSI.Просто подавляет использование предупреждений ... * s

2 голосов
/ 18 марта 2011

Один из способов подавления определенных предупреждений - добавить в источник что-то вроде следующего.

#if defined( _WIN32 )
#pragma warning(disable:4996)
#endif
...