gpt4 book ai didi

c - 在没有变量的情况下访问返回 union 的字段是否合法?

转载 作者:太空狗 更新时间:2023-10-29 17:24:58 24 4
gpt4 key购买 nike

<分区>

我有一个返回 union 类型的函数。标准 (C99) 是否允许直接从调用访问返回值的字段,而无需将值复制到变量。这里有一个例子来说明我的意思:

union thinga { int integ; char arr[4]; };

union thinga f(void)
{
union thinga t = {.integ = 1};
return t;
}
int main(void)
{
printf("thinga is %d\n", f().integ);
}

是否允许调用字段f().integ?在我的示例中,它是一个 union,但问题与 struct 相同。我问这个问题,因为我清楚地记得 Solaris 上的 gcc 3.3 不喜欢这种结构并且会像 hell 一样发出警告。它的问题是它必须在内部生成一个不可见的变量才能访问 structunion 的字段。较新的编译器似乎不介意这种构造,但我想知道是否存在隐藏的陷阱(即我没有想到的 undefined bevaviour

编辑:好吧,看起来我设计的例子有点太简单了,正如评论者 2501 注意到的,通过提供数组链接衰减到范围外对象的指针,让我们看看如果我稍微改变一下我们是否处于相同的情况我的代码。

 union thinga f(const char *val)
{
union thinga t = {.integ = 0};
t.arr[0] = val[0];
return t;
}

int main(void)
{
printf(" thinga.integ=%d .arr=%s\n", f("1").integ, f("1").arr);
}

这种情况是否与arrays that are not lvalues and sequence point restriction中给出的相同?和 Undefined behavior: when attempting to access the result of function call ? (返回的值显然是实现依赖(endiannes),但这不是这里的问题)。

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