分类 默认分类 下的文章

在 avr gcc 中因为硬件条件的限制,默认情况下 sprintf %f 是不可以使用的;
好像有两种解决方法,一种是修改编译参数,另一种是使用 dtostrf 函数。

函数声明:

char *dtostrf(double __val, char __width, char __prec, char *__s);

大致用法:

char buf[32];
dtostrf( value, 5, 2, buf);

对于修改参数这种方式有点麻烦就不做尝试了。

int64_t在32位系统中是long long int,在64位系统中是long int,所以打印int64_t的格式化方法是:

printf("%ld", value); // 64bit OS 
printf("%lld", value); // 32bit OS

兼容的方法:

#include <inttypes.h>  
printf("%" PRId64 "n", value);  

临时变量不能作为非const引用参数,不是因为他是常量,而是因为c++编译器的一个关于语义的限制。如果一个参数是以非const引用传入,c++编译器就有理由认为程序员会在函数中修改这个值,并且这个被修改的引用在函数返回后要发挥作用。但如果你把一个临时变量当作非const引用参数传进来,由于临时变量的特殊性,程序员并不能操作临时变量,而且临时变量随时可能被释放掉,所以,一般说来,修改一个临时变量是毫无意义的,据此,c++编译器加入了临时变量不能作为非const引用的这个语义限制,意在限制这个非常规用法的潜在错误。