gpt4 book ai didi

c - 强制转换/赋值中不兼容的结构类型?

转载 作者:太空狗 更新时间:2023-10-29 14:56:38 26 4
gpt4 key购买 nike

这是 this question 的后续行动.

我试图避免使用显式 typedef 通过这样的强制转换将一个数组复制到另一个数组:

#include <stdio.h>

int main(void)
{
int i;
int dst[] = { 10, 20, 30 }, src[] = { 1, 2, 3 };

*(struct{int _[3];}*)dst = *(struct{int _[3];}*)src;

for (i = 0; i < 3; i++) printf("%d\n", dst[i]);
return 0;
}

使用 gcc 我得到 arrcpy.c:8: error: incompatible types in assignment,但是使用 Open Watcom 它编译得很好(并且按我预期的那样工作,打印 1 到 3)。

gcc 的行为是否符合标准?如果是,相关章节是什么?我不明白为什么两个相同的类型定义 struct{int _[3];} 在 gcc 眼中不相同(或不兼容)。

编辑:我很清楚这是一种糟糕的编码风格。问题是关于另一件事。我很好奇 gcc 的行为背后是否有逻辑依据,是否合法。

最佳答案

gcc 行为是正确的,类型是两个不相关的未命名 结构。这些结构中的每一个,虽然具有相同的内存布局,但具有不同的名称。如果您真的想这样做,请使用 typedef。

关于c - 强制转换/赋值中不兼容的结构类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7883459/

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