int64_t背后有什么魔力

What's the magic behind int64_t

现在如果我编译这个:

typedef long long myType;

int main()
{
   myType a;
}

with (g++ sourceFile.cpp -std=c++03 -pedantic OR gcc sourceFile.c -std=c89 -pedantic) 它会警告当前选择的标准不支持 long long

但是,如果我编译它(使用相同的标志):

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

int main()
{
    int64_t a;
}

即使 stdint.hcstdint 仅包含 stdint.h 并使名称在 std 中可见)包含

,我也不会收到任何警告
...
typedef long long int64_t;
...

我想知道这是怎么回事。

I won't get any warnings even if stdint.h...

这是因为默认情况下 GCC 不会为系统 headers 生成警告。您可以通过命令行选项 -Wsystem-headers...

命令它这样做