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

时间:2014-01-06 14:49:56

标签: c++ c struct declaration

我已阅读以下链接中的文章

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

这里作者说,使用follwing是错误的。

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中不起作用;

2 个答案:

答案 0 :(得分:11)

这是C ++和C之间的区别。您引用的作者在使用C ++代码而不是C代码时会谈到C语言。在C中,您必须在声明相应类型的变量之前指定关键字struct,union或enum。

答案 1 :(得分:1)

文章说使用

的用户定义类型
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