2016-05-21 10 views
3
  • In C89long long existiert nicht (es ist in C99 hinzugefügt wurde)
  • In C++03 (und C++98) long long existiert nicht
(in C++11 hinzugefügt wurde)

Nun, wenn ich diese kompilieren:Was die Magie hinter int64_t ist

typedef long long myType; 

int main() 
{ 
    myType a; 
} 

mit (g++ sourceFile.cpp -std=c++03 -pedantic OR gcc sourceFile.c -std=c89 -pedantic) es Warnung geben, die derzeit Standard nicht long long

jedoch entschieden unterstützt, wenn ich dies (mit gleichen Flags) kompilieren:

#include <stdint.h> //in case of C 
#include <cstdint> //in case of C++ 

int main() 
{ 
    int64_t a; 
} 

Ich werde keine Warnungen auch wenn stdint.h erhalten (cstdint enthält nur stdint.h und machen Namen sichtbar innen std) enthält

... 
typedef long long int64_t; 
... 

ich frage mich, wie das funktionieren kann.

+0

bestellen Ist nicht 'stdint.h' für C-Bibliothek ..?, Werfen Sie einen Blick auf' cstdint'. –

+2

Nur weil ein Sprachstandard keinen bestimmten Datentyp erfordert, bedeutet dies nicht, dass eine bestimmte Implementierung (in diesem Fall GCC) sie nicht implementieren kann. Ich gehe davon aus, dass GCC nicht vor bekannten Dateien warnt (diejenigen, die als Teil der Implementierung ausgeliefert werden). Ich bin mir nicht wirklich sicher, welche Frage du stellst. – IInspectable

+0

@Intspectable Danke, das sollte beantwortet werden. Ich war nur daran interessiert, warum das funktioniert. – PcAF

Antwort

12

Ich werde keine Warnungen erhalten, auch wenn stdint.h ...

Das liegt daran, dass GCC, die standardmäßig nicht generieren Warnungen für System-Header. Sie können es über die Befehlszeilenoption -Wsystem-headers ...