Wyobraźmy mam tej funkcji C (i odpowiadający prototypu w pliku nagłówka)Czy jest niezdefiniowanym zachowaniem, aby odrzucić stałość parametru funkcji?
void clearstring(const char *data) {
char *dst = (char *)data;
*dst = 0;
}
Czy jest zachowanie niezdefiniowane w powyższym kodzie odlewania const
dala, czy jest to tylko strasznie złą praktyką programowania ?
Załóżmy nie ma const wykwalifikowanych obiekty wykorzystywane
char name[] = "pmg";
clearstring(name);
Jeśli obsada nie jest UB, myślę, że powinna być :) – pmg
z pewnością masz stopę prosto w celownik strzelby! –
@pmg: jeśli sama obsada byłaby UB, to nie ma sensu, aby język na to pozwalał - kompilator może łatwo wykryć, że 'const' został dodany do obsady, w ten sam sposób, w jaki wykrył, że' char * dst = data; 'jest nielegalne. Oczywiście są pewne bezsensowne rzeczy, które standard dopuszcza z przyczyn historycznych, ale twierdzę, że to nie jest jedna z nich :-) –