Lanzar en C es único, muy diferente a otros lenguajes. Tampoco es nunca inteligente.
La conversión en C convierte los valores de un tipo a otro utilizando reglas cuidadosamente definidas. Si realmente necesita saber, lea el estándar. De lo contrario, los puntos principales son:
- La conversión entre tipos enteros preserva el valor, si es posible. Si el destino tiene más bits, esto se está ampliando y generalmente es seguro, pero puede implicar la extensión del signo. Si es más angosto, se perderán los bits.
- La conversión entre tipos de puntero conserva el valor del puntero, pero los resultados a menudo son indefinidos, a menudo no portátiles y a menudo útiles para escenarios avanzados.
- La conversión entre tipos enteros y punteros está bien si el entero es lo suficientemente grande y conserva el patrón de bits (lo que sea que eso signifique). Si el número entero es demasiado pequeño, el resultado no está definido pero no es útil. Como regla, 'largo' es lo suficientemente ancho como para 'nulo *', ¡pero no hay garantías! Los punteros creados de esta manera pueden ser inválidos, en todo tipo de formas interesantes.
- La conversión entre los tipos flotante y entero son conversiones aritméticas definidas por una rutina de biblioteca apropiada (con truncamiento, no redondeo).
- Puede emitir el valor de retorno de una función para anular. Yo nunca he. No hace nada
Algunos lanzamientos se aplican implícitamente, y en algunos de ellos el compilador emitirá una advertencia. ¡Lo mejor es prestar atención a las advertencias!
La definición del diccionario para el reparto se ignora mejor, ya que no es útil. Muchos lanzamientos se describen mejor con los términos conversión o coerción, por lo que vale la pena conocerlos también.
C ++ es MUCHO más complicado, pero no lo preguntaste, ¿verdad?