int64_t背后的魔力是什么?

PcA*_*cAF 3 c c++ gcc c89

  • In C89 long long不存在(已添加C99)
  • C++03(和C++98)long long不存在(它被添加C++11)

现在,如果我编译这个:

typedef long long myType;

int main()
{
   myType a;
}
Run Code Online (Sandbox Code Playgroud)

使用(g++ sourceFile.cpp -std=c++03 -pedanticOR 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;
}
Run Code Online (Sandbox Code Playgroud)

即使stdint.h(cstdint仅包含stdint.h并使名称在内部可见std)包含,我也不会收到任何警告

...
typedef long long int64_t;
...
Run Code Online (Sandbox Code Playgroud)

我想知道这是如何工作的.

Dev*_*lar 12

即使stdint.h我也不会收到任何警告......

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