web-dev-qa-db-ja.com

sizeofとsize_tを使用する場合、常にstddef.hをインクルードする必要があります

sizeof演算子を使用していて、コードでsize_tを使用している場合、stddef.hを必ず含める必要がありますか?私はstddef.hを含めていません。コードはMVS2008とBorland C++ BuilderXの両方で警告なしにコンパイルされます。

どうもありがとう...

29
yCalleecharan

sizeof()は、関数呼び出しのように見えますが、実際には演算子であり、言語コアの一部です。インクルードは必要ありません。

size_tはさまざまなヘッダーで定義されています:stddef.hstring.hstdlib.hstdio.h。それらのいずれかを含めると、size_tをコードに追加します。

33
DevSolar

いいえ、stddef.hを含むヘッダーを含めることができます

Size_t定義は、stdlib.hヘッダーファイルをインクルードすることにより、参照するコードに提供されます。実際、ほとんどの実装ではこのファイルで文字どおり定義されていません代わりにsubたとえば、GNU Cコンパイラの標準ライブラリが行うように、ファイルstddef.h)を含めます。アプリケーションコードにstddef.hを直接インクルードすることは完全に有効であり、したがって、このファイルの他のメンバーが必要ない、または望まれない場合にstdlib.hを置き換えることができます。

ソース

10
codaddict

Cでは、size_tの定義は、いくつかのヘッダーの1つに由来します:stddef.hstdio.hstdlib.hstring.htime.hまたはwchar.h

コンパイラーの実装がこれを調整できる方法はいくつもありますが、ca n'tを使用する1つの方法は、コンパイラーにこれらのヘッダーの1つを組み込ませることです-それはCコンパイラが実行することを許可されているものではありません(この制限はC++で解除され、独自の目的で標準ヘッダーを含めることが許可されています)。

3
Michael Burr