msl*_*lot 3 c portability arduino
我在一个业余时间项目,为Arduino Duemilanove制作一些服务器代码,但在我在控制器上测试这个代码之前,我在自己的机器上测试它(基于OS X的macbook).我正在使用某些地方,我担心这会在代码编译并在Arduino Duemilanove上运行时出现奇怪的错误,因为Arduino处理整数为2个字节,而我的macbook处理整数为4个字节.我不是一个核心的C和C++程序员,所以我有点担心一个有经验的程序员如何处理这种情况.我应该使用typedef来限制代码,该typedef包含我自己的限制为2的字节和int的定义吗?或者还有另一种方法吗?
pho*_*oky 11
你最好的选择是使用stdint.h
标题.它定义了明确引用变量的符号和大小的typedef.例如,16位无符号整数是a uint16_t
.它是C99标准的一部分,因此几乎无处不在.看到:
http://en.wikipedia.org/wiki/Stdint.h
C标准将int定义为一个足够大的签名类型,至少保存-32768和32767之间的所有整数 - 实现可以自由选择更大的类型,任何现代32位系统都将选择32位整数.但是,正如您所见,一些嵌入式平台仍然使用16位整数.我建议使用uint16_t
或者uint32_t
如果你的arduino编译器支持它; 如果没有,请使用预处理器宏自行键入这些类型.