C++ 如何确保数据类型在C+中的大小与所需大小相同+;

C++ 如何确保数据类型在C+中的大小与所需大小相同+;,c++,types,arduino,arduino-uno,arduino-ide,C++,Types,Arduino,Arduino Uno,Arduino Ide,在C/C++中,有没有一种简单的方法可以确保不同平台和体系结构中的数据类型保持相同的大小 在C++中,假设我已经编写了一个假设的、简单的程序: #include <iostream> int foo; int main(void) { std::cout<<"Size of foo is "<<sizeof(foo)<<" bytes."<<std::endl; return 0; } 在我的Arduino UNO

在C/C++中,有没有一种简单的方法可以确保不同平台和体系结构中的数据类型保持相同的大小

在C++中,假设我已经编写了一个假设的、简单的程序:

#include <iostream>

int foo;

int main(void)
{
    std::cout<<"Size of foo is "<<sizeof(foo)<<" bytes."<<std::endl;
    return 0;
}
在我的Arduino UNO板上,这只返回2(与我的机器上的
short
大小相同)

是否可以创建(最好是跨平台的)标头或声明,以确保数据类型的大小为特定大小,从而不会遇到精度问题或非常大的数字问题

理想情况下,这不仅适用于Arduino板,也适用于其他紧凑型MCU(如PicKit)

我对Arduino和整个Arduino IDE都比较陌生,所以如果我遗漏了一些非常简单的东西,请原谅。

是的。使用
中定义的,通常为以下之一:

int8_t
int16_t
int32_t
int64_t
uint8_t
uint16_t
uint32_t
uint64_t

对于不同的用例,还有其他的方法。它们是从C++ 11提供的。

< P>一个合理的现代C++实现应该有头<代码> >代码>,它提供<代码>国际nt>代码>代码> uTnnnt,其中代码> n< /代码>为8, 16, 32和64。使用这些定义良好的类型可以保证代码可以按照您的意愿编译和运行,也可以不编译,这样您就不会遇到“我的代码没有达到我对32位整数的期望”的问题。为了实现超级便携性,您可以使用`int_


在没有
的系统中,您可以使用一些合适的
typedef
实现相同的功能,例如基于什么编译器(例如
)(如果定义了(uuuu GCC_uuu)和&define(uuu i386_uu)…
或者一些人做了一个文件骗局,对各种预期类型的大小进行采样,然后生成正确的
typedef
行。

@Dieter:谢谢你清理了垃圾。有什么原因你不能使用宽度特定的类型
int8\u t
int16\u t
等吗?@shuttle87:这些类型不是非标准的吗?它们是从C++11开始是e标准的。我很确定这些都是非标准的。这些不都是
unistd.h
库的一部分吗?你是对的,它们在C++11之前是非标准的。谢谢你澄清这一点。但是,我不确定它是否能与Arduino IDE(C++98)一起工作@MasonWatmough如果您有C++11之前的编译器,请在头文件中定义一个typedef,为您使用的平台选择正确的类型。
int8_t
int16_t
int32_t
int64_t
uint8_t
uint16_t
uint32_t
uint64_t