Pregunta

Hace poco cambié mi IDE a MS Visual Studio 2005 proveniente de MSVC ++ 6 y recibí muchas advertencias de desaprobación. En lugar de ignorar la advertencia, comencé a cambiarlos por sus equivalentes. Sin embargo, luego descubrí que estas eran implementaciones sólo para microsoft.

Leí en algún lugar que estaban presionando para que estos se convirtieran en parte del estándar. ¿Lo es?

¿Es una buena idea usar estas funciones _s? ¿O debería usar otra cosa?

Gracias.

¿Fue útil?

Solución

Las funciones * _s () no son parte del estándar C, pero hay un 'Informe Técnico' pendiente que propone que se agreguen (no estoy seguro si las rutinas en el TR son exactamente iguales a los de Microsoft o si son simplemente similares).

TR 24731-1: Extensiones a la parte I de la biblioteca C: Interfaces de verificación de límites:

Si desea continuar usando las funciones anteriores, puede mantener las advertencias de desaprobación en silencio definiendo la macro _CRT_SECURE_NO_WARNINGS (era _CRT_SECURE_NO_DEPRECATE que aún podría ser compatible).

Otros consejos

Usted actualizó su IDE y también actualizó sus bibliotecas de Microsoft. Francamente, puede continuar usando sus bibliotecas antiguas a medida que se mantienen (por compatibilidad con versiones anteriores), aunque Microsoft ha dicho que realmente comenzarán a eliminar algunas de estas funciones más antiguas. Yo diría que si está avanzando, puede usar las funciones más nuevas; Si está desarrollando hacia atrás (o no se preocupa por la versión), es posible que desee utilizar las funciones anteriores.

Si estás apuntando a la plataforma de Microsoft, por supuesto, úsalos. Incluso si no lo está, siempre puede implementarlos cuando (o si) necesita transferir su software a una plataforma que no sea de Microsoft.

El peor de los casos es que terminas usando algunos #ifdef s para compilar de forma condicional.

Por lo que puedo decir, están siendo considerados para la estandarización. La propuesta es TR 24731 .

En cuanto a si es una buena idea usarlos, diría que sí. No me gusta mucho la forma en que detectan los errores, pero creo que puede proporcionarles su propio controlador. Si necesita compatibilidad entre plataformas, tiene dos opciones: implementarlas con macros en plataformas que no sean Windows o desactivar las advertencias de desaprobación.

Después de hacer una revisión a través de una base de código grande, determiné que es casi imposible lograr que todos los programadores usen correctamente las funciones estándar de la biblioteca de C para la manipulación de cadenas, por lo que todo lo que se pretende corregir es una adición bienvenida.

Debe usar las funciones estándar y deshabilitar las advertencias sádicas que Microsoft ha activado de forma predeterminada para evitar que escriba un código que cumpla con los estándares. Dudo seriamente las " _s funciones " siempre se agregarán al estándar C (aunque se han propuesto) ya que son un invento de un solo proveedor y nunca han sido implementados por ningún otro proveedor. (Hey, incorporemos todo POSIX al estándar C mientras estamos en ello ...)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top