Ich möchte einen Funktionszeiger so initialisieren, dass er null ist. Welche dieser beiden Möglichkeiten wird bevorzugt?

void (*Pointer)(void) = NULL;

Oder

void (*Pointer)(void) = (void (*)(void))0;
1
Stack Over 22 Dez. 2015 im 20:31

2 Antworten

0 ist implizit in einen beliebigen Zeigertyp konvertierbar. Es hängt jedoch davon ab, wie Ihr Compiler NULL implementiert.

In Ihren Code können Sie einfach schreiben

void (*Pointer)(void) = 0;, aber es ist nicht portabel, also schreibe void (*Pointer)(void) = NULL;

3
Angelus Mortis 22 Dez. 2015 im 17:52

NULL ist als Nullzeigerkonstante definiert. Eine Nullzeigerkonstante kann verwendet werden, um einen beliebigen Zeiger (Datenzeiger oder Funktionszeiger) auf einen Nullzeiger des richtigen Typs zu initialisieren, sodass die Zuweisung von NULL in Ordnung ist.

0 funktioniert auch, da 0 auch eine Nullzeigerkonstante ist. Dies gilt auch für 0L (13 * 12-156) und viele andere Möglichkeiten. NULL wird bevorzugt, da es Ihre Absicht zeigt, einen Nullzeiger zuzuweisen.

Die Zeile darunter ist nur unnötige Arbeit.

1
gnasher729 22 Dez. 2015 im 17:37