我见过几个库和一些提供编译器独立类型的C ++头文件,但我不明白为什么它们与编译器无关。

例如:

int Number; // Not compiler Independent

typedef unsigned int U32;
U32 Number2; // Now this is compiler independent

这是真的吗? 如果是这样,为什么? 我不太明白为什么使用typedef意味着Number2的大小在编译器之间是相同的。

===============>>#1 票数:1

我假设您的类型与unsigned int Number相同。

但不,这些完全一样。 两个声明NumberNumber2具有相同的类型。 编译器与其他编译器无关。

但是,使用类似这样的typedef是为了使库的开发人员可以轻松地更改使用U32所有函数使用的整数类型。 例如,如果它们位于一个系统上,其中unsigned int不是32位,而是unsigned long ,则可以将typedef更改为:

typedef unsigned long U32;

实际上,可以使用构建系统根据目标平台有条件地更改typedef

但是,如果您需要一种很好的标准化方法来确保该类型是32位无符号整数类型,我建议使用<cstdint>标头中的std::uint32_t 但是,如果您在没有32位整数类型的计算机上,则不保证存在此类型。 相反,您可以使用std::uint_least32_t ,它将为您提供至少32位的最小整数类型。

===============>>#2 票数:1 已采纳

阐述评论,

命题:使用typedef进行编译器独立性。

理由:平台独立性是一件好事

实施

#ifdef _MSC_VER
    #if _MSC_VER < 1400
    typedef int bar;
    #elif _MSC_VER < 1600
    typedef char bar;
    #else
    typedef bool bar;
#else
#error "Unknown compiler"
#endif

预处理器宏链是typedef的重要部分。

免责声明:我还没编译过来!

===============>>#3 票数:0

如注释中所述,显示的typedef与编译器无关。

如果您希望以编译器独立的方式获得固定大小,则可能需要使用cstdint 此头文件实际上随编译器一起提供,并确保最小大小,但对于较大类型(64位,128位)没有最大值。

如果您想完全确定类型的所有尺寸,则需要进行检查。

  ask by RedShft translate from so

未解决问题?本站智能推荐: