web-dev-qa-db-fra.com

Dois-je toujours inclure stddef.h si j'utilise sizeof et size_t

si j'utilise l'opérateur sizeof et que j'utilise size_t dans mon code, dois-je nécessairement inclure stddef.h? Je n'ai pas inclus stddef.h, et mon code se compile sans avertissement avec MVS2008 et avec Borland C++ BuilderX.

Merci beaucoup...

29
yCalleecharan

sizeof(), tout en ressemblant à un appel de fonction, est en fait un opérateur et fait partie du noyau du langage. Pas d'inclusion nécessaire.

size_t est défini dans différents en-têtes: stddef.h, string.h, stdlib.h, et stdio.h. L'inclusion de l'un d'eux suffit pour utiliser size_t dans votre code.

33
DevSolar

Non, vous pouvez inclure un en-tête qui inclut à son tour stddef.h

La définition size_t doit être fournie à un morceau de code de référence en incluant stdlib.h fichier d'en-tête. En fait, la plupart des implémentations ne l'ont pas défini littéralement dans ce fichier mais à la place sub inclure le fichier stddef.h comme par exemple la bibliothèque standard du compilateur C GNU C). L'inclusion directe de stddef.h pour le code d'application est totalement valide et peut donc remplacer stdlib.h dans les cas où aucun autre membre de ce fichier n'est nécessaire ou souhaité.

Source

10
codaddict

Dans c, la définition de size_t provient de plusieurs en-têtes: stddef.h, stdio.h, stdlib.h, string.h, time.h ou wchar.h.

Il existe un certain nombre de façons que l'implémentation du compilateur peut arranger pour cela, mais notez qu'une façon que ne peut pas être utilisée est d'avoir le compilateur inclus l'un de ces en-têtes pour vous derrière votre dos - ce n'est pas quelque chose qu'un compilateur C est autorisé à faire (cette restriction a été levée pour C++, qui est autorisé à inclure n'importe quel en-tête standard à ses propres fins).

3
Michael Burr