Linuxでは、stddef.hはどこで定義されていますか?

Linuxでは、stddef.hはどこで定義されていますか?

値を見つけるにはstddef.hどこで定義されていますか?ほとんど/usr/include/linux/stddef.h何も、

/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
#ifndef __always_inline
#define __always_inline __inline__
#endif

size_t具体的にどのように定義されているか知りたいです。

数ヶ月後、この同じ質問に戻ってwhcar_tそれを定義する方法が気になります。

stddef.h内部ファイルの形式定義は次のとおりです。

  • ptrdiff_t
  • max_align_t
  • size_t
  • wchar_t

ベストアンサー1

C標準は、コンパイラ機能とライブラリ機能を区別しません。違いは実装の詳細にあり、プラットフォームによって異なりますが、共通の傾向があります。たとえば、デフォルトの整数型(例:および)とsize_t関連マクロ(例:およびCHAR_BIT)のサイズはSIZE_MAXコンパイラおよびコンパイラオプションの属性ですが、その内容はstdio.h通常コンパイラによって異なります。標準ライブラリがファイルを実装する方法。

stddef.h主にコンパイラに関する事項を宣言するので、コンパイラに付属しています。たとえば、32ビットモードまたは64ビットモードでコンパイルする場合は別の定義を取得することをお勧めします。したがって、コンパイラディレクトリにあります。一部のコンパイラでは、ディスクファイルがまったくなく、<stddef.h>名前だけが特別に扱われますが、GCCとClangを使用するとディスクファイルを取得できます。

次のコマンドを使用して、システムのすべてのレプリカを見つけることができますlocate

知りたいならGCCが使用するインクルードパスは何ですか特定のオプションが提供されたら、-vビルドで使用されている他のオプション(特に)と一緒にコマンドラインからそれらのオプションを渡します。-m

何もコンパイルせず、この情報だけが必要な場合は、空の入力を使用してプリプロセッサ専用モードでGCCを呼び出します(-xc -E /dev/null; GCCはファイル名なしで言語をコンパイルしていることを知らないため、言語をcとして指定するにはaが必要です。-xc)。

しかし、同じオプションがClangでも機能します。

gcc -v -xc -E /dev/null 2>&1 |
awk ' /^End of search list/ {exit} p {print} /^#include <\.\.\.> search starts here:/ {p=1}' |
xargs sh -c 'for x; do if [ -e "$x/stddef.h" ]; then echo "$x/stddef.h"; exit; fi; done' sh

の定義だけを知りたい場合は、size_tそれがどこから来たのかを知る必要はありません。プリプロセッサ出力を印刷するようにコンパイラに要求します。

echo '#include <stddef.h>' | gcc -xc -E - | grep size_t

からman gcc

  • -E 前処理ステップの後に停止します。コンパイラを正しく実行しません。出力は、前処理されたソースコード形式で標準出力に送信されます。前処理を必要としない入力ファイルは無視されます。
  • -x languageコンパイラにファイル名のサフィックスに従ってデフォルトの言語を選択させる代わりに、次の入力ファイルの言語を明示的に指定します。このオプションは、次の-xオプションまですべての後続の入力ファイルに適用されます。

おすすめ記事