c - c中的 "struct <name_1> <name_2>"是什么?

标签 c object variables struct

C代码中有一行:

struct name_1 name2;

这行是什么意思?

我对上一行的理解是 name_1 是结构的名称,name2 是对象变量。然而 name_1 应该在某处定义,但我找不到 name_1 的定义。

所以我的问题是;有没有这样的东西,我们可以拥有一个未在任何地方定义的结构对象。

最佳答案

在文件范围内,这是名为 name2 的变量的定义,其类型为 struct name_1。如果之前没有声明 struct name_1;,那么这一行也声明了该类型。

作为一个没有初始化器和存储类说明符的文件范围变量定义,这是一个 tentative definition .暂定定义可能有不完整的类型,只要类型在文件末尾完成即可,例如:

#include <stdio.h>

struct foo bar;

void f();

int main()
{
    printf("%p\n", (void *)&bar);
    f();

    // cannot do this
    // printf("%d\n", bar.x);
}

struct foo { int x; };

void f()
{
    bar.x = 5;
}

不过,这种代码并不常见。如果您在实际代码中看到 struct foo bar;,则很可能 struct foo 之前已在您忽略的某个地方定义。

关于c - c中的 "struct <name_1> <name_2>"是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50849627/

相关文章:

c# - 如何在堆栈跟踪转储中获取变量值?

c++ - 来自 math.h 的 pow 错误

c - 如何复制具有 const unsigned char * 类型的值?

Javascript 从对象中获取相应的键/值

javascript - 动态更改受类函数影响的类变量

android - 在 react-native 中从 java 代码访问 java 变量到 javascript 代码

从 RepeatMasker 开发人员编译 COSEG 时出现 C "undefined reference to"错误

c - memmove 实际上是 "move"一 block 内存并在源头留下零吗?

Windows 8 中的 XML 序列化

java - 字符串变量可能尚未初始化