- En
C89
long long
n'existe pas (il a été ajouté àC99
) - En
C++03
(etC++98
)long long
n'existe pas (il a été ajouté dansC++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.
Ce n'est pas 'stdint.h' pour la bibliothèque C ..?, Jetez un oeil à' cstdint'. –
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
@IInspectable Merci, cela devrait être une réponse. J'étais juste intéressé par la raison pour laquelle cela fonctionne. – PcAF