Должен ли я всегда включать stddef.h, если я использую sizeof и size_t - PullRequest
29 голосов
/ 09 апреля 2010

если я использую оператор sizeof и использую size_t в своем коде, обязательно ли я должен включать stddef.h? Я не включил stddef.h, и мой код компилируется без предупреждения как с MVS2008, так и с Borland C ++ BuilderX.

Большое спасибо ...

Ответы [ 3 ]

33 голосов
/ 09 апреля 2010

sizeof(), хотя и выглядит как вызов функции, на самом деле является оператором и частью языкового ядра. Включать не нужно.

size_t определяется в различных заголовках: stddef.h, string.h, stdlib.h и stdio.h. Включение любого из них достаточно для использования size_t в вашем коде.

10 голосов
/ 09 апреля 2010

Нет, вы можете включить заголовок, который в свою очередь включает в себя stddef.h

Определение size_t должно быть предоставлено ссылочной части кода путем включения заголовочного файла stdlib.h . На самом деле большинство реализаций не определяют его буквально в этом файле, но вместо этого sub включает файл stddef.h , как, например, стандартная библиотека Компилятор GNU C делает. Прямое включение stddef.h для кода приложения является полностью допустимым и, следовательно, может заменить stdlib.h в тех случаях, когда другие члены из этого файла не нужны или не желательны.

Источник

3 голосов
/ 09 апреля 2010

В c определение для size_t происходит от одного из нескольких заголовков: stddef.h, stdio.h, stdlib.h, string.h, time.h или wchar.h.

Существует множество способов, которыми реализация компилятора может организовать это, но учтите, что один из способов, которым не может быть , - это использование компилятором одного из этих заголовков для вас за вашей спиной. - это не то, что разрешено делать компилятору C (это ограничение было снято для C ++, которому разрешено включать любой из стандартных заголовков для своих собственных целей).

...