値を見つけるには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
オプションまですべての後続の入力ファイルに適用されます。