是否可以在不编写 C 程序的情况下在 Linux 系统上找出数据类型(int、float、double 等)的大小?
在同一 Linux 系统中,C 和 C++ 以及其他编程语言的结果是否相同?
slm*_*slm 23
如果你知道你想要的数据类型的定义,你可以用来getconf在大多数 Unix 系统上找到这些值。
$ getconf CHAR_BIT
8
Run Code Online (Sandbox Code Playgroud)
除了在磁盘上之外,变量列表还在手册页man limits.h以及此处定义man sysconf。你可以用locate limits.h它来找到它,它通常在这里:/usr/include/linux/limits.h。
Mik*_*kel 13
的种类。
至少使用 gcc,这是有效的:
$ cpp -dD /dev/null | grep __SIZEOF_LONG__
Run Code Online (Sandbox Code Playgroud)
不管怎样,你为什么不想写一个 C 程序来做这件事呢?您可以从 shell 向编译器发送一个小型 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
Run Code Online (Sandbox Code Playgroud)
该-x c告诉编译器的语言C,并-从标准输入读取手段。
在我的系统上,上面打印:
int=4 bytes
long=8 bytes
Run Code Online (Sandbox Code Playgroud)
在 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 */
Run Code Online (Sandbox Code Playgroud)
小智 8
如果你安装了 perl,你可以从 perl -V 得到这个:
intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
alignbytes=8, prototype=define
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20575 次 |
| 最近记录: |