У меня есть ощущение, что это может быть связано с синтаксисом C, но я начал свою жизнь программирования с C++, поэтому я не уверен.
В основном я видел это:
struct tm t;
memset( &t, 0, sizeof(struct tm) );
Меня немного смущает этот синтаксис, так как обычно я ожидаю, что приведенное выше будет выглядеть так:
tm t;
memset( &t, 0, sizeof(tm) );
В чем разница между ними и почему вместо них используется первый?
Обновлять
Структура tm
, о которой я говорю, находится в wchar.h
, и ее определение выглядит следующим образом:
struct tm {
int tm_sec; /* seconds after the minute - [0,59] */
int tm_min; /* minutes after the hour - [0,59] */
int tm_hour; /* hours since midnight - [0,23] */
int tm_mday; /* day of the month - [1,31] */
int tm_mon; /* months since January - [0,11] */
int tm_year; /* years since 1900 */
int tm_wday; /* days since Sunday - [0,6] */
int tm_yday; /* days since January 1 - [0,365] */
int tm_isdst; /* daylight savings time flag */
};
struct
s,union
s иenum
s находятся в отдельном пространстве имен, которое используется вместо обычного пространства имен при поиске имен за этими ключевыми словами. Такие имена никогда не могут конфликтовать с другими именами в C, и такие имена никогда не будут найдены, за исключением случаев, когда они следуют за одним из этих ключевых слов. C++ имеет специальные правила для разрешения конфликтов и их разрешения, но только в случае возникновения конфликта. 11.10.2011struct
определен в другомstruct
, его имя такое же, как если бы оно было определено вне инкапсулирующегоstruct
. Таким образом, в C++struct A { struct B {}; };
определяет две структуры:A
иA::B
. В C++ он также определяет две структуры:struct A
иstruct B
. 11.10.2011struct
области видимости для структур. (Однако область действия по-прежнему существует.) 12.10.2011