2016-05-21 1 views
3
  • En C89long long n'existe pas (il a été ajouté à C99)
  • En C++03 (et C++98) long long n'existe pas (il a été ajouté dans C++11)

maintenant, si je compile ceci:Quelle est la magie derrière int64_t

typedef long long myType; 

int main() 
{ 
    myType a; 
} 

avec (g++ sourceFile.cpp -std=c++03 -pedantic OU gcc sourceFile.c -std=c89 -pedantic) il donnera avertissement que la norme actuellement choisie ne supporte pas long long

Cependant, si je compile ce (avec les mêmes drapeaux):

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

int main() 
{ 
    int64_t a; 
} 

Je ne vais pas tous les avertissements même si stdint.h (cstdint comprend juste stdint.h et faire des noms visibles à l'intérieur std) contient

... 
typedef long long int64_t; 
... 

Je me demande comment cela peut fonctionner.

+0

Ce n'est pas 'stdint.h' pour la bibliothèque C ..?, Jetez un oeil à' cstdint'. –

+2

Ce n'est pas parce qu'une norme de langage n'exige pas la présence d'un type de données particulier qu'une implémentation donnée (GCC dans ce cas) ne peut pas l'implémenter. Je suppose que GCC ne met pas en garde contre les fichiers bien connus (ceux qui sont livrés dans le cadre de la mise en œuvre). Je ne suis pas vraiment sûr de la question que vous posez. – IInspectable

+0

@IInspectable Merci, cela devrait être une réponse. J'étais juste intéressé par la raison pour laquelle cela fonctionne. – PcAF

Répondre

12

Je ne vais pas tous les avertissements, même si stdint.h ...

C'est parce que GCC, par défaut, ne génère pas d'avertissement pour les en-têtes du système. Vous pouvez le commander via l'option de ligne de commande -Wsystem-headers ...