Sind NULL und 0 in C vollständig äquivalent?

8

Gibt es "harte" Gründe dafür, NULL anstelle von 0 in C89 / C99 + zu verwenden und sie ohne einen zweiten Gedanken an tiefgreifende Bedenken bezüglich der Einhaltung von Standards auszutauschen, selbst im Code mit sehr obskuren Aspekten von C.

>

Ich bin besorgt über "harte" Dinge wie Normenkonformität, Portabilität, undefiniertes Verhalten, unerwartet unterschiedliche Interaktionen mit unerwarteten Ecken der Sprache, ob der (hypothetische) Supercomputer Meggard Gargantubrain Segmentierter Speicher wahrscheinlich seinen magischen Rauch usw. freisetzen würde Sie ersetzen eines für das andere.

Es gibt bereits eine ähnliche Frage auf dieser Seite über C ++, aber ich mache mir keine Sorgen um C ++. Ich glaube, dies ist einer der Bereiche, in denen sich C ++ - Verhalten wahrscheinlich von C unterscheidet.

Die Probleme von Stil und Absicht und, obwohl wichtig, denken nicht, dass es am Thema oder nützlich ist, sie in einem Q & amp; A-Forum zu diskutieren.

Die Antworten, die ich und andere gefunden haben, beziehen sich in erster Linie auf das Testen und die Zuweisung (die wir häufig sehen und für die es sicher ist, sie austauschbar zu verwenden). Ich frage, ob überhaupt etwas gedacht werden muss, um willkürlich komischen, aber normkonformen Code, den Sie gefunden haben, zu übernehmen und syntaktisch NULL für 0 zu ersetzen (oder umgekehrt, wenn die 0 ein Zeiger ist), ob das nun ist oder nicht eine weise Sache, stilistisch zu tun. Es ist schwer, Beispiele für unerwartete Interaktionen zu geben, aber zum Beispiel fangen uns Function Pointer oft auf, vielleicht sizeof, ....

Ich habe die relevanten Standards Abschnitte gelesen, die beschreiben, wie sich 0 und NULL verhalten, könnte jemand mir mit der Auswirkung davon auf solchen Austausch von Zeiger-Konstante 0 und NULL in obskuren Fällen helfen? Oder versichere mir, dass es keine gibt.

    
Dan Sheppard 25.02.2015, 11:24
quelle

1 Antwort

5

Machen Sie die Absichten Ihres Codes klar.

NULL für einen Zeiger.

0 , 0u , 0l usw. für eine ganze Zahl.

0.0 oder 0. oder .0 für ein Double.

0.0f oder 0.f oder .0f für einen Float.

'nil' für ein Nullzeichen.

In Objective-C, %code% für ein Nullobjekt.

    
gnasher729 25.02.2015 11:26
quelle

Tags und Links