我一次又一次地读到你不能从函数中返回一个数组(在 C/C++ 中),但如果是这样的话,如何int64_t
从函数中返回一个?不int64_t
只是一个数组long int
吗?
(是的,我知道您可以返回指向数组开头的指针,但我说的是返回int[4]
,而不是int*
。)
int64_t 不只是一个 long int 数组吗?
不,int64_t
是标量类型的别名(与数组类型等聚合类型相反),通常它是long long
类型的别名。
当然,这适用于int64_t
在 C 中定义为精确宽度整数类型是可选的情况。
您实际上可以返回任何不是数组的类型 - 例如,如果您希望返回四个 int 值,您可以返回一个struct my_4ints { int x[4] };
但是 int64_t (在 32 位机器上)是一个“项目”。它恰好作为两个寄存器值返回,在 x86 上,通常是 eax、edx。但这仍然返回一个值。
如果将数组包装在结构中,则可以从函数中返回它。但这是要避免的,因为 ABI 在这类事情上并不完全稳定(例如:使用 gcc 3.3 编译的对象链接到在 Solaris 上使用 gcc 3.4 编译的对象不兼容,并且在这种情况下可能会崩溃)。