gpt4 book ai didi

c - 查找 off_t 大小

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

我们一直在使用 trick从 autotools 复制以确定 off_t 大小以及我们是否需要定义 _FILE_OFFSET_BITS=64。然而,这个技巧似乎在最近的 gcc (>= 4.6) 中失败了。这是代码:

#include <sys/types.h>

int main(int argc, char **argv)
{
/* Cause a compile-time error if off_t is smaller than 64 bits */
#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
int off_t_is_large[ (LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1 ];
return 0;
}

从我的 debian/amd64 和 debian/ppc 安装中我得到了(而不是编译时错误):

$ gcc-4.6 -O0 -m32 -o valid.o valid.c 
valid.c: In function ‘main’:
valid.c:7:3: warning: left shift count >= width of type [enabled by default]
valid.c:7:3: warning: left shift count >= width of type [enabled by default]
valid.c:7:3: warning: left shift count >= width of type [enabled by default]
valid.c:7:3: warning: left shift count >= width of type [enabled by default]

所以我的问题是,我能否简单地将这段代码替换为以下代码:

#include <sys/types.h>

int main(int argc, char **argv)
{
/* Cause a compile-time error if off_t is smaller than 64 bits */
int off_t_is_large[ sizeof(off_t) >= 8 ? 1 : -1 ];
return 0;
}

(额外)问题:这是 gcc 中的回归,还是初始代码仅依赖于损坏的功能?

最佳答案

子表达式 (off_t) 1 << 62)6.5.7p3发生冲突:

    "[...] If the value of the right operand is [...] greater 
than or equal to the width of the promoted left operand,
the behavior is undefined."

ref

关于c - 查找 off_t 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22664658/

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