使用标记名称创建结构变量

Creating struct variable using the tag name

本文关键字:创建 结构 变量      更新时间:2023-10-16

我在以下链接中阅读了一篇文章

http://www.embedded.com/electronics-blogs/programming-pointers/4024450/Tag-vs-Type-Names

在这里,作者说,使用羽翼是错误的。

struct s
{
--
};
s var;

但是在我的示例代码中,它运行良好。

  1 #include<iostream>
  2 using namespace std;
  3
  4 struct s
  5 {
  6    int sd;
  7 };
  8 s v;
  9
 10
 11
 12 int main()
 13 {
 14
 15    v.sd=10;
 16    cout<<v.sd;
 17    return 0;
 18 }

编辑:

实际区别是什么?为什么它在 C++ 中工作而在 C 中不起作用;

这是 C++ 和 C 之间的区别。你引用的作者在你使用C++代码而不是C代码时谈到了C。在 C 中,您必须在声明相应类型的变量之前指定关键字结构、联合或枚举。

文章说,用户定义类型使用

struct s {
   ...
};

定义标记名称s 。要命名实际类型,您可以编写struct s(C 或 C++)或class s(仅限 C++),但C++使这两个关键字都是可选的(并且几乎从未实际使用过)。因此,每当你用C++编写s时,它实际上被解释为正确的类型,而在 C 中,关键字必须命名类型

长话短说:在C++中,struct sclass ss的写作没有区别,它们的意思都是一样的。

为了定义 C/C++ 共享标头中的类型名称s,通常写入

typedef struct {
   ...
} s;

然后,s 类型可以在 C 和 C++ 中使用,而无需编写 struct