回答:
必要なデータ型の定義がわかっている場合は、getconf
ほとんどのUnixシステムでこれらの値を見つけるために使用できます。
$ getconf CHAR_BIT
8
変数のリストは、ディスク上にあることに加えて、マニュアルページman limits.h
とここで定義されていますman sysconf
。あなたはlocate limits.h
それを見つけるために使うことができます、それはしばしばここにあります:/usr/include/linux/limits.h
。
getconf
が最も安全な方法であるという印象を受けましたが、あなたが言う限り、「公式の」コンパイラーを使用しています。
getconf
あなたのようにCコンパイラを呼び出している場合を除き、それほど安全ではないc89
か、c99
(ほぼ)オプションを指定しないで。
やや。
少なくともgccでは、これは機能します。
$ cpp -dD /dev/null | grep __SIZEOF_LONG__
とにかく、なぜあなたはそれをするCプログラムを書きたくないのですか?シェルから次のような小さなCプログラムをコンパイラに送信できます。
binary=$(mktemp)
cat <<\EOF | cc -o $binary -x c -
#include <stdio.h>
int main() {
printf("int=%lu bytes\n", sizeof(int));
printf("long=%lu bytes\n", sizeof(long));
}
EOF
$binary
rm $binary
-x c
言語はコンパイラに指示C
し、-
手段は、標準入力から読み込みます。
私のシステムでは、上記のように表示されます:
int=4 bytes
long=8 bytes
gccおよびclangでテスト済み。
はい。スキャンできた/usr/include/<arch>/limits.h
たとえば、私のNetBSD amd64では、次の/usr/include/amd64/limits.h
ように表示されます:
#define CHAR_BIT 8 /* number of bits in a char */
#define SCHAR_MAX 0x7f /* max value for a signed char */
#define SCHAR_MIN (-0x7f-1) /* min value for a signed char */
#define UCHAR_MAX 0xff /* max value for an unsigned char */
#define CHAR_MAX 0x7f /* max value for a char */
#define CHAR_MIN (-0x7f-1) /* min value for a char */
#define USHRT_MAX 0xffff /* max value for an unsigned short */
#define SHRT_MAX 0x7fff /* max value for a short */
#define SHRT_MIN (-0x7fff-1) /* min value for a short */
#define UINT_MAX 0xffffffffU /* max value for an unsigned int */
#define INT_MAX 0x7fffffff /* max value for an int */
#define INT_MIN (-0x7fffffff-1) /* min value for an int */
#define ULONG_MAX 0xffffffffffffffffUL /* max value for an unsigned long */
#define LONG_MAX 0x7fffffffffffffffL /* max value for a long */
#define LONG_MIN (-0x7fffffffffffffffL-1) /* min value for a long */
これを試して、データ型を参照する文字列を含む行を解析して出力します。
{ shopt -s globstar; for i in /usr/include/**/*.h; do grep -HE '\b(([UL])|(UL)|())LONG|\bFLOAT|\bDOUBLE|\bINT' $i; done; }
これはもちろん定義をキャッチする/usr/include/limits.h
ので、値を追加することもありますが、値を使用することもありますが、ほとんどの場合limits.h
、getconf -a
and ulimit -a
コマンドで便利に確認できる設定を参照します。