Я не ветеран в C или C ++. Я не знаю какtime_t
определяется и разработан.
Несколько постов вроде:
Но эти посты только утверждают, что time_t
или же size_t
, В нем не было четко указано, как и где определены и объявлены time_t или size_t.
я использую WIN8 VS2012 Express C ++. Я искал в библиотеке и обнаружил, что size_t
определяется в crtdefs.h
вместо cstddef
,
size_t
, time_t
? Мы можем позволить sizeof
просто вернись unsigned int
,size_t
?size_t
или же time_t
(может быть, они определены в std
Пространство имен).Я снова искал в библиотеке, и нашел size_t
определяется как typedef _W64 unsigned int size_t
, а также _W64
определяется как __w64
, Здесь, я не могу искать больше о том, где находится __w64
определяется или объявляется.
__w64
тип? Это не указано в стандарте C ++ 11 / C99. Точно так же, когда я искал time_t
, Я нашел __int6
, Но не знает где __int64
происходит от.
__w64
это специфичное для Microsoft расширение, которое «включает предупреждения при компиляции с / Wp64» — оно используется для определения кода, который «опасен», если вы пытаетесь скомпилировать его для 64-битной версии — например, для присвоения 32-битной переменной 32 один бит. например.:
size_t s;
...
unsigned int i;
...
i = s; // 32 bit can't take all 64 bit values - possible problem.
Определение size_t
а также time_t
являются typedef ... size_t;
а также typedef ... time_t;
— они не «исправлены» в компиляторе. Стандарт просто говорит, что они должны быть там (и подходить для системы, на которую ориентирован компилятор). Я думаю, вы найдете это cstddef
включает в себя crtdefs.h
в том или ином месте.
__int64
тип компилятора Microsoft Это определяется самим компилятором. Затем его можно использовать для определения других «типоразмеров», таких как time_t
или же size_t
(с подходящим unsigned
по мере необходимости). Другие компиляторы могут не иметь этого типа, но будет НЕКОТОРЫЙ способ определить 8, 16, 32 и 64-битное целое число. Фактическое происхождение __int64
вероятно, до возникновения long long
, который долгое время (каламбур) не поддерживался Microsoft. Я верю, что это сейчас.
C / C ++ имеет наследие более 20 лет, и теперь оно реализовано на более чем 100 различных архитектурах.
На самом деле, некоторые из них действительно отличаются от x86. На некоторых из них целочисленные регистры 16-разрядные, а адресное пространство и адресные регистры 32-разрядные. У меня есть опыт написания в этих условиях.
Да, в этом случае int/unsigned int
16 бит, и это имеет смысл, в то время как указатель и size_t 32 бит. На х86 это не так, но хорошо …
Это ответ.
size_t НЕ является встроенным типом C / C ++?
Истинный ответ — да и нет. Теоретически, вы можете написать свои собственные заголовочные файлы, такие как crtdefs.h
, И пиши там что хочешь. Компилятор скорее всего будет работать. Но это много работы. Никто не делает это. Как только системные заголовочные файлы станут частью компилятора, тогда size_t
построен в ….