Ich habe einen Funktionszeiger, dessen Funktion als erwartet char *
Argumente erklärt wird.Ist es, möchte ich Speichern Sie einen Zeiger auf eine Funktion, die als char const*
Argumente deklariert wird.Übergeben von `int (*) (char const *)` wobei 'int (*) (char *) `erwartet wird
Ich denke, ich kann entweder einen Wrapper oder eine Besetzung verwenden. Casts scheinen einfacher zu sein, aber kann ich das Ergebnis einer solchen Funktion Pointer Cast legal nennen?
Beispiel-Code unten:
static int write_a(char * X){
return 0;
}
static int write_b(char const* X){
return 0;
}
static int wrapped_write_b(char * X){
return write_b(X);
}
typedef int (*write_fn)(char *);
write_fn a = write_a;
write_fn b = wrapped_write_b;
write_fn b1 = (write_fn)write_b; //is b1 legally callable?
Laut [dieser] (http://Stackoverflow.com/a/559671/669576) ist es UB (glaube ich). Da "const" jedoch nur zur Laufzeit und nicht zur Laufzeit aktiviert wird, glaube ich nicht, dass dies ein Problem sein wird. –
@Danh: Die Besetzung ist vollkommen legal. Der von Ihnen angegebene Link steht überhaupt nicht mit diesem Cast in Zusammenhang. – AnT