gpt4 book ai didi

c - 类型 :C 的打印尺寸

转载 作者:太空狗 更新时间:2023-10-29 16:05:37 25 4
gpt4 key购买 nike

我要打印

“(类型)的大小是(类型的大小)字节”
例如

“int的大小是4Byte”
通过下面的代码。但是它说
“int 的大小是 8Byte”
我认为这段代码显示了 string(int) 的大小,但显示了 int 类型。我该如何解决这个问题?

代码

#include <stdio.h>
char *variabletype[] = {"char", "unsigned char", "signed char", "int", "unsigned int", "short", "unsigned short", "long", "unsigned long", "long long", "unsigned long long"};

int main() {
for (int i = 0; i < 11;++i) {
printf("Size of %s is %u\n",variabletype[i], (unsigned int)(sizeof(variabletype[i])));
}
return 0;
}

返回

Size of char is 8Byte
Size of unsigned char is 8Byte
Size of signed char is 8Byte
Size of int is 8Byte
Size of unsigned int is 8Byte
Size of short is 8Byte
Size of unsigned short is 8Byte
Size of long is 8Byte
Size of unsigned long is 8Byte
Size of long long is 8Byte
Size of unsigned long long is 8Byte

最佳答案

sizeof 是一个 operator 在编译时计算。它返回一个编译时间常量(VLA s 除外)。在你的代码中,你总是打印 sizeof(char*) (在你和我的电脑上恰好是 8)。请记住,数组与指针不同,即使数组退化为指针也是如此。

你想要:

printf ("sizeof int is %zu\n", sizeof(int));
printf ("sizeof long is %zu\n", sizeof(long));

你可能会使用 preprocessor技巧(stringizing#)

#define PRINTSIZE(Type) printf("sizeof " #Type " is %zu\n", sizeof(Type))
PRINTSIZE(int);
PRINTSIZE(long);

C 语言将翻译时和运行时分开。实际上,您使用的是 compiler (有时甚至是 cross-compiler )。没有 eval operator在标准 C 中。

在许多操作系统上,您可以运行另一个编译过程(可能使用 systempopen(3) ),但是如何运行编译器是系统特定的(在 Linux 上,您通常会使用 gcc;在 Windows 上,它可能是其他东西)。

所以原则上你可以在 Linux 上编写一个程序来生成一个临时 C 文件然后使用 system(3)在一些计算字符串上两次:一次运行编译,另一次运行生成的可执行文件。但这很复杂(而且不可移植),因此不值得您花时间。

请注意,在 C(和 C++)中,类型、语句、表达式、变量名称等仅供编译器使用,在运行时不存在(运行时只有内存位置)。 C11标准(阅读 n1570 )提到 translation units .

也许你梦想着一些homoiconic编程语言。然后不要使用 C,而是像 Common Lisp 这样的语言.尝试 SBCL ,Common Lisp 实现在每个 REPL 处进行转换(即编译)将您的表达式与机器代码交互。

关于c - 类型 :C 的打印尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47257682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com