Функции Microsoft _ являются ли они частью стандарта C ++ сейчас? - PullRequest
6 голосов
/ 06 марта 2009

Я недавно изменил свою IDE на MS Visual Studio 2005, поставляемую с MSVC ++ 6, и получил много предупреждений об устаревании. Вместо того, чтобы игнорировать предупреждение, я начал менять их на эквиваленты _s. Однако потом я узнал, что это были реализации только для Microsoft.

Я где-то читал, что они настаивали на том, чтобы они стали частью стандарта. Это так?

Это хорошая идея использовать эти функции _s? Или я должен использовать что-то еще?

Спасибо.

Ответы [ 5 ]

12 голосов
/ 06 марта 2009

Функции *_s() не являются частью стандарта C, но есть ожидающий «Технический отчет», предлагающий добавить их (я не уверен, что процедуры в TR точно такие же, как Microsoft или они просто похожи).

TR 24731-1: Расширения библиотеки C, часть I: Интерфейсы проверки границ:

Если вы хотите продолжать использовать старые функции, вы можете хранить предупреждения об устаревании, задав макрос _CRT_SECURE_NO_WARNINGS (был _CRT_SECURE_NO_DEPRECATE, который все еще может поддерживаться).

1 голос
/ 14 августа 2010

Вам следует использовать стандартные функции и отключить любые садистские предупреждения, которые Microsoft включила по умолчанию, чтобы отговорить вас от написания кода, соответствующего стандартам. Я серьезно сомневаюсь, что «_s функции» будут когда-либо добавлены в стандарт C (хотя они были предложены), поскольку они являются изобретением одного поставщика и никогда не были реализованы ни одним другим поставщиком. (Привет, давайте включим все POSIX в стандарт C, пока мы на нем ...)

1 голос
/ 06 марта 2009

Насколько я могу судить, они рассматриваются для стандартизации. Предложение составляет TR 24731 .

Что касается того, стоит ли использовать их, я бы сказал, да. Мне не очень нравится, как они отлавливают ошибки, но я верю, что вы можете предоставить им свой собственный обработчик. Если вам нужна кроссплатформенная совместимость, у вас есть два варианта: внедрить их с помощью макросов на платформах, отличных от Windows, или отключить предупреждения об устаревании.

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

1 голос
/ 06 марта 2009

Если вы ориентируетесь на платформу Microsoft, обязательно используйте их. Даже если это не так, вы всегда можете реализовать их самостоятельно, когда (или если) вам потребуется перенести свое программное обеспечение на платформу не от Microsoft.

В худшем случае вы используете несколько #ifdef s для условной компиляции.

1 голос
/ 06 марта 2009

Вы обновили свою IDE, а также обновили библиотеки Microsoft. Честно говоря, вы можете продолжать использовать ваши старые библиотеки, поскольку они продолжают храниться (для обратной совместимости), хотя Microsoft заявляет, что они действительно начнут использовать некоторые из этих старых функций. Я бы сказал, что если вы развиваетесь вперед, вы можете использовать более новые функции; если вы разрабатываете в обратном направлении (или не беспокоитесь о версии), вы можете использовать более старые функции.

...