Hier ist mein toter einfacher Dummy-Code:
%Vor%Was diesen Fehler überraschenderweise aufwirft:
%Vor% Ich begann den Spuren zu folgen : Wenn der Compiler die <...>
inclusions sieht, sieht er zuerst /usr/include
, wo ich natürlich errno.h
file gefunden habe. Tatsächlich hat es neben dem Lizenzkommentar eine Zeile:
Nun, bei /usr/include/sys
in errno.h
habe ich folgende Zeilen gefunden:
Und bei /usr/include/_types
in _errno_t.h
habe ich folgendes gefunden:
So sieht es aus, es ist da, und es ist ein Alias des Integer-Typs und ein Teil von errno.h
- so wie es sein sollte.
Warum ist es dann nicht enthalten? Warum der Compiler den nicht deklarierten Bezeichnerfehler auslöst?
Vielen Dank im Voraus!
RELEVANTE INFO:
%Vor% Die Makrovariable __STDC_WANT_LIB_EXT1__
wird in /usr/include/sys
in cdefs.h
in den folgenden Zeilen definiert:
UPDATE:
Wie @PaulR im Kommentarabschnitt gesagt hat: Wenn ich das -std=c11
-Flag lösche, kompiliert es. Was genauso überraschend ist wie der Fehler, wenn die Flagge eingefügt wurde. Also erweitere ich diese Frage mit einer Unterfrage:
Ist nicht errno_t
Teil des C11-Standards oder warum ist er nicht enthalten, wenn der Standard für den Compiler angegeben ist?
errno_t
ist kein Standardtyp; es ist Teil des optionalen Anhangs K, der in ISO C11 enthalten ist, und zwar nur wegen eines bestimmten Anbieters, der den Standard ignoriert und sabotiert hat.
Da Anhang K errno_t
als int
definiert, ist der Typ des errno
-Objekts int
, und alle Fehlercodes sind int
, verwenden Sie einfach int
in Ihren Programmen. Es ist viel portabler als eine optionale Funktion, die wahrscheinlich nicht unterstützt wird.
Tags und Links c include clang compiler-construction errno