2009-03-06 16 views
6

recientemente he cambiado de IDE para MS Visual Studio 2005 procedente de MSVC++ 6, y yo he recibido una gran cantidad de avisos de obsolescencia. En lugar de ignorar la advertencia, comencé a cambiarlos a los equivalentes. Sin embargo, descubrí que se trataba de implementaciones exclusivas de Microsoft.Las funciones de Microsoft, ¿son parte del estándar C++ ahora?

leí en alguna parte que estaban presionando para que estos a formar parte de la norma. ¿Lo es?

¿Es una buena idea utilizar estas funciones _S? ¿O debería usar algo más?

Gracias.

+2

Sí.Debido a que Microsoft se han cubierto de gloria con el desastre de las normas OOXML, estoy seguro de ISO está cayendo sobre sí mismos con el fin de incorporar todas sus cosas en el estándar de C++ :-) – paxdiablo

+0

No puedo decir si esto es sarcasmo o no. .. :( – krebstar

+0

más humor que el sarcasmo Disculpas Mi mujer estaría de acuerdo con usted en que mi sentido del humor es a veces extraña – paxdiablo

Respuesta

12

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 las mismas que las de Microsoft o si es simplemente similar).

TR 24731-1: Extensiones de la Parte I C Biblioteca: las interfaces de los límites de comprobación:

Si desea seguir utilizando las funciones que pueda mantener la desaprobación advertencias tranquilas mediante la definición de la macro _CRT_SECURE_NO_WARNINGS (ha _CRT_SECURE_NO_DEPRECATE que todavía podrían ser compatible).

+0

Solo para apoyar, _CRT_SECURE_NO_DEPRECATE funciona en algunos como strncpy, etc., mientras que para otros como fopen() necesita #pragma warning (disable: 4996)) Se supone que usted podría definir _CRT_SECURE_NO_WARNINGS pero no funcionó para mí .. – krebstar

+0

Esas funciones '_s' son ahora parte de C1X anexo K. – kennytm

+0

Y son sin duda una mejora en la interfaz de MS, que es por lo tanto no conforme. Aunque no es una gran mejora, y su utilidad está muy en debate. – Deduplicator

1

ha actualizado el IDE y también mejoró sus bibliotecas de Microsoft. Francamente, puede seguir utilizando 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 anteriores. Diría que si estás desarrollando hacia adelante puedes usar las funciones más nuevas; si se está desarrollando hacia atrás (o si no está preocupado por cuál es la versión), es posible que desee utilizar las funciones anteriores.

+0

Gracias, tal vez solo use la macro _CRT_SECURE_NO_WARNINGS .. – krebstar

1

Si se orienta la plataforma de Microsoft, por todos los medios usarlos. Incluso si no lo está, siempre puede implementarlos usted mismo cuando (o si) necesite transferir su software a una plataforma que no sea de Microsoft.

peor de los casos es que se terminan usando unos #ifdef s compilar condicionalmente.

1

Están siendo considerados para la normalización, por lo que yo soy capaz de decir. La propuesta es TR 24731.

En cuanto a si es una buena idea usarlas, yo diría que sí. No me gusta mucho la forma en que atrapan errores, pero creo que puedes proporcionarles tu propio controlador. Si necesita compatibilidad multiplataforma, tiene dos opciones: implementarlas con macros en plataformas que no sean Windows o desactivar las advertencias de desactivación.

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

+4

El problema es que MS hizo la etapa de introducir unilateralmente las funciones como si fueran un estándar y "desaprobación" las funciones de "C" que se encontraban en el estándar al mismo tiempo. Me parece otra forma de obligarte a permanecer con sus herramientas. –

+0

Eso es excesivamente escéptico. Hicieron una pequeña mejora interna de las funciones de la biblioteca estándar de C y rodaron en sus comunicados públicos, así como someterlo a la estandarización. Si fue una estratagema deliberada para aumentar su cuota de mercado, ¿por qué intentar estandarizarla? –

1

Debe utilizar las funciones estándar y desactivar cualquier advertencias sádica Microsoft ha activado por defecto para disuadirlo de la escritura de código en estándares conformes. Tengo serias dudas de las "funciones _S" volverá a ser añadidos a C estándar (a pesar de que se han propuesto), ya que son una invención de un solo proveedor y nunca han sido aplicadas por cualquier otro proveedor. (Hey, vamos a incorporar todas POSIX en el estándar de C, mientras estamos en ello ...)

Cuestiones relacionadas