2010-05-23 9 views
9

Soy novato en C y acabo de enterarme de que atoi está en desuso en favor de strtol, etc.Lista de funciones C obsoletas?

¿Dónde puedo encontrar una lista de funciones C obsoletas?

+3

Pertinente: http://stackoverflow.com/questions/1253053/cs-bad-functions-vs-their-good-alternatives – kennytm

+1

¿Quién dice que atoi está en desuso? No está en mi máquina; no informa errores, pero a veces eso está bien. – crazyscot

+7

'atoi()' no está en desuso; es solo que ahora hay mejores opciones disponibles en la biblioteca estándar C –

Respuesta

2

Hay una diferencia entre inseguro y obsoleto. atoi() no es seguro, sin embargo, gcc no le dirá que deje de usarlo porque es peligroso. Usando gets() produces a different result :) YCMV (su compilador puede variar).

En general, si una función puede fallar y no es posible verificar el error, no la use. Si una función le permite escribir en una región de memoria sin poder pasar un límite de tamaño, no la use.

Este último es más fácil de determinar solo por el prototipo de función. Sin embargo, si está consciente de lo que está haciendo, rápidamente se dará cuenta de que no tiene forma de saber si lo que obtuvo de atoi() fue realmente la representación de cadena del resultado que un usuario acaba de ingresar en la línea de comando.

Esta lógica no es para nada exclusiva de la biblioteca C estándar. Encontrarás muchos códigos de la biblioteca, algunos de ellos buenos. Ninguna lista puede reemplazar los hábitos de codificación aprendidos y defensivos.

+0

gcc probablemente asuma que está tratando con una implementación indulgente de la biblioteca C. Conceptualmente, 'atoi' y' gets' son igualmente malos; ambos dan como resultado ** un comportamiento indefinido ** a menos que tenga un control estricto sobre las entradas que recibirán. –

+0

'gets' fue la primera y única función en desuso (en C99 TC3). Más tarde fue eliminado por completo en C11. Entonces, en este punto, hay * no * funciones obsoletas en el lenguaje. (También hay una referencia al uso de ungetc al principio de un archivo binario en desuso en C99 (ahora es un comportamiento indefinido). No pude encontrar una versión de C90 con la que comparar, así que no sé qué solía hacer.) – Ray

Cuestiones relacionadas