我已阅读以下链接中的文章
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中不起作用;
答案 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 s
,class s
或s
没有区别,它们都是相同的。
为了在C / C ++共享头中定义类型名s
,通常会写
typedef struct {
...
} s;
然后类型s
可以在C和C ++中使用,而无需编写struct
。