2015-02-23 49 views
-1

我一直在寻找一段代码here我是要去使用:困惑结构是如何工作的这段代码

#include <sys/stat.h> 

struct stat sb; 

if (stat(pathname, &sb) == 0 && S_ISDIR(sb.st_mode)) 
{ 
    ...it is a directory... 
} 

我想,如果我要使用它,我也许应该明白它能做什么。我的问题是关于行

struct stat sb; 

这是什么意思?我知道struct在宣布它的感觉就像

struct node { int val; node * next; } 

,所以我感到困惑,为什么有结构声明后2个令牌。

+2

它创建'struct stat'的一个实例。 – 2015-02-23 15:49:19

+0

@RSahu为什么不只是'stat sb'呢?为什么'struct'? – 2015-02-23 15:51:05

+0

尽管在这种情况下,对于C和C++来说,所有的东西都应该是一样的,你应该确定你想要保留的两个标签中的哪一个! – 2015-02-23 15:51:31

回答

0

struct node { int val; node * next; } 

是你可以调用什么类型的定义“结构统计” 这

struct stat sb; 

只需创建一个该类型的结构(其已经被定义在别处) 例如在stat.h ;-)

+1

“创建结构”不够接近。这是'struct stat'类型的变量初始化。 – zoska 2015-02-23 16:42:20

+0

对不起,词汇并不好 – Guiroux 2015-02-23 18:18:15

2

在C中,结构不是自动的类型名称,所以你必须引用结构名称与struct foo。同样,您需要使用enum barunion baz。人们经常使用typedef来避免在声明实例时输入struct

在C++中,该关键字是可选的,因为结构,枚举和联合(加上类)是类型,但仍然可以编写class std::string s = "abc";。关于stat,有一个结构和一个名称的函数,为了消除这两者之间的歧义,当引用结构时,您需要编写struct stat