在声明结构体对象之前是否可以选择使用 struct 关键字?

问题描述 投票:0回答:3

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

classname objectname;

声明结构体对象也是同样的方法吗?

喜欢

structname objectname;

我发现here一个结构对象声明为

struct Books Book1;

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

struct

c++ c struct
3个回答
27
投票

这是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 *
作为参数。


10
投票

你必须typedef它们才能创建没有struct关键字的对象

示例:

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

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

Book thisBook;

5
投票

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

因此,如果您使用C语言,则需要使用关键字struct,但如果您使用C++编写,则可以跳过此步骤。

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.