gpt4 book ai didi

c - 将指向同一 union 成员​​的两个指针传递给函数是否违反严格的别名规则?

转载 作者:行者123 更新时间:2023-12-04 12:31:10 26 4
gpt4 key购买 nike

<分区>

注意:学习严格的别名规则。请耐心等待。

代码示例(t935.c):

#include <stdio.h>

int f(int* pi, double* pd)
{
*pi = 13;
*pd = 7E-323;
return *pi;
}

int main(void)
{
union { int i; double d; } u;
printf("%d\n", f(&u.i, &u.d));
return 0;
}

调用:

$ gcc t935.c -Wall -Wextra -std=c11 -pedantic  && ./a.exe
14

$ gcc t935.c -Wall -Wextra -std=c11 -pedantic -O2 && ./a.exe
13

$ gcc t935.c -Wall -Wextra -std=c11 -pedantic -O2 -fno-strict-aliasing && ./a.exe
14

问题:将指向同一 union 成员​​的两个指针传递给函数是否违反了严格的别名规则?

问题源自Unions and type-punning .

UPD20210901

what would happen if the union type was defined at global scope?

对于“union u is defined at global scope”(实际上是 file 范围)的情况,gcc 和 clang 显示的结果与上面报告的 gcc 相同。

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