Fehler: Verwendung der nicht deklarierten Kennung 'errno_t'

7

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:

%Vor%

Nun, bei /usr/include/sys in errno.h habe ich folgende Zeilen gefunden:

%Vor%

Und bei /usr/include/_types in _errno_t.h habe ich folgendes gefunden:

%Vor%

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:

%Vor%

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?

    
Peter Varo 13.06.2014, 13:51
quelle

1 Antwort

20

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.

    
R.. 13.06.2014, 14:07
quelle