2015-02-23 47 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