Должен ли я всегда включать stddef.h, если я использую sizeof и size_t
Если я использую оператор sizeof
и использую size_t
в своем коде, обязательно нужно включить stddef.h
? Я не включил stddef.h
, и мой код компилируется без предупреждения как с MVS2008, так и с Borland С++ BuilderX.
Спасибо большое...
Ответы
Ответ 1
sizeof()
, будучи похожим на вызов функции, на самом деле является оператором и частью ядра языка. Нет необходимости.
size_t
определяется в разных заголовках: stddef.h
, string.h
, stdlib.h
и stdio.h
. Включение любого из них достаточно, чтобы использовать size_t
в вашем коде.
Ответ 2
Нет, вы можете включить заголовок, который, в свою очередь, включает stddef.h
Определение size_t должно быть предоставлено ссылочной части кода, включив заголовочный файл stdlib.h. На самом деле большинство реализаций не не определили его буквально в этом файле, но вместо этого sub включают файл stddef.h, например, стандартный библиотека компилятора GNU C. Прямое включение stddef.h для кода приложения является полностью действительным и, следовательно, может заменить stdlib.h в случаях, когда другие члены из этого файла не нужны или не нужны.
Источник
Ответ 3
В c определение для size_t
происходит от одного из нескольких заголовков: stddef.h
, stdio.h
, stdlib.h
, string.h
, time.h
или wchar.h
.
Существует несколько способов реализации этой реализации компилятора, но обратите внимание, что один из способов, который не может быть использован, заключается в том, что компилятор включает в себя один из этих заголовков для вас за вашей спиной - это не что-то такое C компилятор разрешен (это ограничение было отменено для С++, которому разрешено включать любой из стандартных заголовков для своих собственных целей).