gpt4 book ai didi

C编程: testing oversized shift

转载 作者:太空宇宙 更新时间:2023-11-04 00:06:42 24 4
gpt4 key购买 nike

负的和过大的位移位是未定义的行为。但是我需要在我的代码的许多地方进行正/负转换,所以我为此编写了一个通用函数:

uint64_t shift_bit(uint64_t b, int i)
{
// detect oversized shift
assert(-63 <= i && i <= 63);
return i >= 0 ? b << i : b >> -i;
}

这会处理负面变化。但是超大类次呢?

是否允许 C 编译器优化掉 assert()(或者用 assert(true) 替换它,它具有同样的效果)。

有没有办法绕过它编码?

PS:请仅将您的答案基于标准保证的内容,而不是基于您的特定编译器所做的事情。我的程序需要 100% 可移植,因为它会针对许多不同的平台和许多不同的编译器进行编译。

最佳答案

assert() 在发布时被替换为“无”。

#ifdef NDEBUG
#define assert(exp) ((void)0)
#else
#define assert(exp) /*implementation*/
#endif

关于C编程: testing oversized shift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21212522/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com