You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向参数为uint64_t的函数传递uint32_t是否安全?

向uint64_t参数的函数传递uint32_t的相关问题解答

先看示例代码:

void MyFunction(uint64_t arg) {}

int main(void) {
    uint32_t xyz = 1u;
    MyFunction(xyz);
}

针对问题逐一解答:

1. 是否被C标准明确允许?

是,C标准(如C17/C23的6.3.1.3条款)明确允许该操作。调用函数时,参数会触发隐式转换:当无符号源类型(uint32_t)的秩低于目标类型(uint64_t)时,源值会被转换为目标类型,转换方式为高位补0,结果与原数值完全一致,属于标准定义的明确行为,所有合规编译器都必须支持。

2. 是否安全?

完全安全。uint32_t的所有可能取值都能被uint64_t精确表示——无符号整数从小类型转大类型时,仅在高位填充0,不会出现溢出、截断或值失真的情况,也不会产生任何未定义行为。无论传递的是何种uint32_t值,转换后的uint64_t值和原数值在数学上完全等价。

3. MISRA-C对此有何规定?

以MISRA-C:2012为例:

  • 规则10.1禁止表达式被隐式转换为不同底层类型,但值保留的无符号整数向更大无符号整数类型的转换属于例外情况,这种安全的隐式转换是被允许的。
  • 这类转换符合MISRA的代码安全要求,不存在值丢失、溢出或未定义行为的风险,不会触发MISRA违规警告。

内容的提问来源于stack exchange,提问作者fsdfsdfsdfsdfsdf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 09:19:58