在声明结构对象之前使用struct关键字是可选的吗?

时间:2016-10-03 19:01:49

标签: c struct

要声明一个类对象,我们需要格式

classname objectname;

声明结构对象是否相同?

喜欢

structname objectname;

我发现here声明为

的结构对象
struct Books Book1;

其中Books是结构名称,Book1是其对象名称。那么在声明结构对象之前是否需要使用关键字struct

3 个答案:

答案 0 :(得分:6)

这是C和C ++之间的差异之一。

在C ++中,当您定义一个类时,您可以使用带或不带关键字class(或struct)的类型名称。

// Define a class.
class A { int x; };

// Define a class (yes, a class, in C++ a struct is a kind of class).
struct B { int x; };

// You can use class / struct.
class A a;
struct B b;

// You can leave that out, too.
A a2;
B b2;

// You can define a function with the same name.
void A() { puts("Hello, world."); }

// And still define an object.
class A a3;

在C中,情况有所不同。类不存在,相反,有结构。但是,您可以使用typedef。

// Define a structure.
struct A { int x; };

// Okay.
struct A a;

// Error!
A a2;

// Make a typedef...
typedef struct A A;

// OK, a typedef exists.
A a3;

遇到与函数或变量同名的结构并不罕见。例如,POSIX中的stat()函数将struct stat *作为参数。

答案 1 :(得分:3)

你必须 typedef 来制作没有 struct 关键字的对象 例如:

typedef struct Books {
     char Title[40];
     char Auth[50];
     char Subj[100];
     int Book_Id;
} Book;

然后,您可以定义一个没有 struct 关键字的对象,如:

Book thisBook;

答案 2 :(得分:1)

即可。对于 C 语言,您需要明确地给出变量的类型,否则编译器将抛出错误: ' Books'未声明的 。(在上述情况下)

因此,如果您使用 C 语言,则需要使用关键字 struct ,但如果您在 C ++ 中编写此内容,则可以跳过此选项。

希望这有帮助。