在C语言中,长整型(long int)可以作为函数的返回值吗?

3
假设我们想通过一个函数返回一个长整型数据类型,应该如何实现呢?这种方式是否有效?
long int function()
{
  long int b;
  b=1000000000;
  return b;
} 
4个回答

12

是的,它是有效的。

只要您返回一个适当的long int值(我们可以看到,您正在这样做),并将其捕获到另一个long int中(您需要小心),那么这应该没问题。


#)根据 C11 标准,LONG_MAX+2147483647,而 1000000000 小于该值。可参考第 §5.2.4.2.1 章节。


2
加一份标准报价。 - Bathsheba
@Bathsheba 感谢您!!非常感激。 :-) - Natasha Dutta
我不太明白long的值限制与问题有什么关系。 - Lundin
我猜想纳塔莎和我一样,想要检验赋值语句b=1000000000的有效性。 - Bathsheba
@Bathsheba 我理解这个问题是“从一个函数返回一个长整型是否有效”,而不是“这个例子中的代码是否具有良好定义的行为”。无论如何,没什么大不了的。 - Lundin

6
在C语言中,函数可以返回long int类型的值。

向那三位明显认为我在降低水平的批评者道歉。但是我和其他两个人觉得这很有趣。所以我认为这件事还没有定论。 - Persixty
这个答案仍然存在分歧,但至少支持者的人数现在超过了反对者。 - Persixty

2

C标准规定long int的最小大小为32位,存储方式应保证可以表示[-2147483647,+2147483647]范围内的值。 (请注意,2的补码表示为-2147483648)。 因此,将1,000,000,000分配给long int总是被定义的。

返回long int的值副本也是明确定义的。

请注意,如果您没有初始化b(即如果您省略了语句b = 1000000000;),那么您程序的行为将是未定义的。


我不太明白long的值限制与问题有什么关系。 - Lundin
你怎么这样呢?我可是赞了你的回答 :-) 说真的,如果原帖作者想要将 10,000,000,000 赋值给 long int,那么这个问题就非常相关了。但这并不总是明确定义的。 - Bathsheba
整数字面量本身的类型是可以适应给定系统的最小可能类型。但它永远不会比 int 更小。这在 6.4.4.1 中已经定义明确。在处理 100 亿时,编译器可能会选择 long long int 类型。如果你将其转换为 long 类型,则以下规则适用(6.3.1.3):“否则,新类型为有符号类型,且该值无法表示;结果要么是实现定义的,要么是引发实现定义的信号。”因此,一些实现定义的事情是肯定会发生的。 - Lundin

2

一个函数可以返回几乎任何类型:

6.9.1

函数的返回类型应该是void或者除了数组类型之外的完整对象类型。

就是这样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接