雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

整数向下转型在运行时遇到错误

2024-07-28 34
    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);
        }
    }
更新于:1个月前
赞一波!1

文章评论

全部评论