整数向下转型在运行时遇到错误
void funcfoo(uint8_t len); ......size_t l = strlen(str); funcfoo((uint8_t)l);
funcfoo 必须采用 uint8_t。 此代码编译并运行良好,但会发生什么情况:对于 uint8_t,strlen is > max val ? 它会出现问题。
是否有一种标准方法可以进行向下转型,如果失败,则会在运行时出错。 或者编译器扩展,甚至是一种众所周知的方法。
我知道我可以推出自己的宏来做到这一点。
解决方法:
您可以定义一个宏来打印某些内容。 (只有带符号的无符号数才会调用未定义或实现定义的行为)
#define CASTTO(to, val) (((to)(val) != (val)) ? (printf("!"), (to)(val)) : ((to)(val)))int main(void){ unsigned x; srand(time(NULL)); for(int i = 0; i < 20; i++) { x = rand() &0xfff; printf("%"PRIx8" (x = %x)\n", CASTTO(uint8_t, x), x); } }
本站发布的内容若侵犯到您的权益,请邮件联系站长删除,我们将及时处理!
从您进入本站开始,已表示您已同意接受本站【免责声明】中的一切条款!
本站大部分下载资源收集于网络,不保证其完整性以及安全性,请下载后自行研究。
本站资源仅供学习和交流使用,版权归原作者所有,请勿商业运营、违法使用和传播!请在下载后24小时之内自觉删除。
若作商业用途,请购买正版,由于未及时购买和付费发生的侵权行为,使用者自行承担,概与本站无关。