2016-09-02 2 views
2

Von stdint.h folgendec-Bibliothek definiert von int8_t

#ifndef int8_t 

    typedef signed char int8_t; 
    #define int8_t int8_t 
    #define INT8_MIN (-128) 
    #define INT8_MAX (127) 

#endif 

Was bedeutet die #define int8_t int8_t tun oder definieren?

+3

Es verhindert nur mehrere Einschlüsse der gleichen Definitionen (siehe '#ifndef int8_t' am Anfang?). –

+0

Beiseite: Code könnte eine '#if SCHAR_MIN == -128' verwenden, um die Portabilität zu gewährleisten. – chux

Antwort

1

Es definiert int8_t als ein Makro, dessen Existenz mit #ifndef int8_t getestet werden kann, vermutlich mit der Absicht zu verhindern, dass int8_t zweimal definiert wird.

Ich weiß nicht warum es tut es so. Es wäre sinnvoller, einen einzigen include guard um den gesamten Header <stdint.h> zu verwenden.

(In einer früheren Version dieser Antwort, behauptete ich, dass die Umsetzung nicht-konforme, da es int8_t als Makro definiert so überflüssig macht, aber nicht ungültig N1570 7.1.3 Zitiert:..

Jeder Bezeichner mit Rahmen-Datei in einem der folgenden Subklauseln aufgeführt (einschließlich der künftigen Bibliothek Richtungen) wird für Verwendung als Makronamen und als Bezeichner mit Dateigültigkeitsbereich in der gleichen Namensraum reserviert, wenn einer ihrer verbundenen Kopf ist enthalten

So ist die Kennung int8_t ist für die Verwendung als Makro reserviert, und die Makro-Definition-Implementierung erlaubt ist.)

Welche Implementierung ist dies aus?

Verwandte Themen