Imagínese que tengo esta función C (y el prototipo correspondiente en un archivo de cabecera)¿Es un comportamiento indefinido desechar la consistencia de un parámetro de función?
void clearstring(const char *data) {
char *dst = (char *)data;
*dst = 0;
}
¿Hay un comportamiento no definido en el código anterior, fundición de la const
distancia, o es sólo una práctica terriblemente mala programación ?
Supongamos que no hay objetos const cualificado utilizan
char name[] = "pmg";
clearstring(name);
Si el yeso no es UB, creo que debería ser :) – pmg
¡sin duda tiene su pie de lleno en la mira de escopeta! –
@pmg: si el elenco en sí fuera UB, entonces no tiene sentido que el lenguaje lo permita, es bastante fácil para un compilador detectar que 'const' ha sido agregado en un molde, de la misma manera que detecta que' char * dst = data; 'es ilegal. Obviamente, hay algunas cosas inútiles que el estándar permite por razones históricas, pero afirmo que este no es uno de ellos :-) –