gpt4 book ai didi

c - 在 C 中初始化循环数据。这个有效的 C 代码是否符合任何标准?

转载 作者:太空狗 更新时间:2023-10-29 16:32:29 25 4
gpt4 key购买 nike

我想看看我是否可以初始化一个全局变量来指向它自己:

#include <stdio.h>
struct foo { struct foo *a, *b; } x = { &x, &x };
int main()
{
printf("&x = %p, x.a = %p, x.b = %p\n", &x, x.a, x.b);
return 0;
}

此代码使用 gcc 编译并按预期运行(所有三个指针打印相同)。

我想知道:

  1. 这可靠吗?
  2. 这是标准吗?
  3. 这是可移植的吗?

编辑: 澄清一下,我质疑 x 在它自己的初始化器中的地址的可用性。

最佳答案

这是标准的 C 代码。

强大标准的这一段允许它(强调我的):

(C99, 6.2.1p7) "Structure, union, and enumeration tags have scope that begins just after the appearance of the tag in a type specifier that declares the tag. Each enumeration constant has scope that begins just after the appearance of its defining enumerator in an enumerator list. Any other identifier has scope that begins just after the completion of its declarator."

有关信息,请注意,为了说明 6.2.1p7 的最后一句话,Derek M. Jones 所著的“The New C Standard”一书使用了与您类似的示例:

struct T {struct T *m;} x = /* declarator complete here. */ {&x};

关于c - 在 C 中初始化循环数据。这个有效的 C 代码是否符合任何标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10806365/

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