Schnitt heute mehr Details impliziert noch erwünscht sind .
Mark hat es richtig gemacht. Das Suffix "L" ist lang. -1L ist also eine lange -1.
Meine bevorzugte Art und Weise zu testen, unterscheidet sich von Marks und ist eine Frage der Präferenz nicht Güte.
if (err >= 0L)
success
else
error
Nach allgemeiner Gewohnheit mag ich nicht nach expliziten -1 suchen. Wenn ein -2 jemals in der Zukunft erscheint, wird mein Code wahrscheinlich nicht brechen.
Seit ich C benutze, habe ich am Anfang von C bemerkt, dass die meisten Bibliotheksroutinen int Werte 0 für Erfolg und -1 für Fehler zurückgegeben haben. Die meisten.
NULL wird normalerweise nicht durch ganzzahlige Funktionen zurückgegeben als NULL ein Zeigerwert ist. Neben dem Aufeinanderprallen von Typen hängt ein großer Grund dafür, NULL nicht zurückzugeben, von etwas Geschichte ab.
Die Dinge waren nicht sauber zurück, als C erfunden wurde, und vielleicht nicht einmal auf kleine heute Systeme. Das Original K & R C garantierte nicht, dass NULL Null wäre, wie es normalerweise bei CPUs mit virtuellem Speicher der Fall ist. Auf kleinen "realen Speicher" -Systemen kann die Null eine gültige Adresse sein, die es notwendig macht, dass "ungültige" Adressen zu einem anderen vom Betriebssystem abhängigen Ort bewegt werden. Solch würde wirklich von der CPU akzeptiert werden, nur nicht im normalen Schema der Dinge generiert. Vielleicht eine sehr hohe Speicheradresse. Ich kann sogar ein verstecktes Array namens extern const long NULL[1];
sehen, das erlaubt, dass NULL die Adresse dieses ansonsten unbenutzten Arrays wird.
Damals sahen Sie eine Menge von if (ptr != NULL)
Anweisungen anstelle von if (ptr)
für Leute, die ernsthaft über das Schreiben von tragbarem Code sind.
Ok, ich habe es. Wie bekomme ich dann die Situation, in der ftell -1L zurückgibt? --- if (ftell (fp) == -1L) {}? oder wenn (ftell (fp) == -1) {}? – bogatyrjov
@Jevgeni, bearbeitet, um Ihnen ein Beispiel zu geben –
Also, wenn L lang darstellt, welche Zeichen repräsentieren andere Typen? Gibt es eine verwandte Referenz im Netz? – bogatyrjov