2015-02-23 4 views
-1

Я смотрел на кусок кода here что я буду использовать:Confused о том, как структура работает в этой части кода

#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'. –

+0

@RSahu Почему не просто 'stat sb' то? Почему «структура»? –

+0

Хотя в этом случае все должно работать одинаково для C и C++, вы должны действительно решить, какой из двух тегов вы хотите сохранить! –

ответ

0

это

struct node { int val; node * next; } 

является то, что вы могли бы назвать определение типа «STRUCT стат» это

struct stat sb; 

просто создать на структуру этого типа (который уже определен где-то еще) например, stat.h ;-)

+1

«создает структуру» недостаточно близко. Это переменная инициализация типа struct stat. – zoska

+0

да извините, лексика не была такой хорошей – Guiroux

2

В C структура не является автоматически именем типа, поэтому вам нужно обратиться к имени структуры с struct foo. Аналогичным образом, вам необходимо использовать enum bar или union baz. Люди часто используют typedef, чтобы избежать ввода struct при объявлении экземпляров.

В C++ это ключевое слово необязательно, поскольку структуры, перечисления и объединения (плюс классы) являются типами, но вы все равно можете написать class std::string s = "abc";. Что касается stat, есть как структура, так и функция с этим именем, и для того, чтобы устранить неоднозначность между ними, вам нужно написать struct stat при обращении к структуре.