Während durch einige C-Header-Dateien (speziell stdarg.h
) suchen, bemerkte ich eine sehr eigenartige Linie:Hinzufügen von Null in c Präprozessoranweisung
#if !defined(__STRICT_ANSI__) || __STDC_VERSION__ + 0 >= 199900L
Das seltsame Teil ist die + 0
. Null ist die additive Identität; es ist eine der verschiedenen Mathematik hat Schreiben noop
.
Welchen Zweck hat das Hinzufügen von Null in der obigen Präprozessoranweisung? Ich weiß, dass es all sorts of weird preprocessor magic da draußen gibt, aber das scheint nur lächerlich.
Nicht ganz korrekt. Die Regeln für die Präprozessorbewertung haben Token unbekannter Bezeichner, die mit 0 bewertet wurden. Es wäre also in Ordnung, wenn sie nicht definiert wären. Der Fall, in dem es darauf ankommt, ist, wann es definiert werden würde, aber zu dem leeren Token. –
@JensGustedt: Sie haben Recht, ich habe gerade versucht, meine Antwort in einigen Test-Code zu überprüfen und bemerkte, dass es nicht korrekt ist. Ich hoffe, dass es jetzt richtig ist. –
Verdreht. Ich denke, das + Zeichen wird nur als unärer Operator interpretiert, wenn das Token leer ist. – ApproachingDarknessFish