gpt4 book ai didi

c - 如何强制预处理器在 C/C++ 中使用所需的数据类型?

转载 作者:太空宇宙 更新时间:2023-11-04 04:02:58 25 4
gpt4 key购买 nike

我想使用宏测试 unsigned long 的位大小。有人会认为,如果您指定 0UL,它将评估为 unsigned long,但根据这个简短的示例,事实并非如此。我在 32 位架构上使用 MinGW 编译它,所以 ~0UL 应该得到 0xFFFFFFFF:

#if (((~0UL) >> 31) >> 1) // expected 0, double shift to get around mod 32 limit
#define UL_BIT_SIZE 64
#else
#define UL_BIT_SIZE 32
#endif

printf("%d, %X\n", UL_BIT_SIZE, ((~0UL) >> 31) >> 1);

输出:64, 0

有趣的是,如果我将 UL 更改为 L 或只是跳过后缀,它就会按预期工作。任何人都可以解释这里的问题是什么,原因是什么以及如何解决?

最佳答案

C 预处理器不知道类型或 C 关键字。

预处理器算法是使用 stdint.h 中的最大整数类型完成的,它是 intmax_tuintmax_t,具体取决于操作数的符号。

关于c - 如何强制预处理器在 C/C++ 中使用所需的数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9575024/

25 4 0
文章推荐: Python 输入 : return type with generics like Clazz[T] as in Java Clazz
文章推荐: php - 使用 PHP die() 时回显
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com