gpt4 book ai didi

c - C中函数的返回值

转载 作者:太空宇宙 更新时间:2023-11-04 00:30:52 25 4
gpt4 key购买 nike

int ret(char *)
{
//nothing
}

int main(void)
{
printf("%d\n",ret("foo"));
}

为什么函数 ret 返回一个垃圾值???

int my_strlen(char *s)
{
if(*s)
return 1 + my_strlen(s + 1); // or my_strlen(s+1) + 1;
}

在上面的函数中,如果我没记错的话,my_strlen 应该总是返回 Junk 值当条件失败时(即每当它到达'\0')时,因为没有其他情况或任何错误情况的返回语句。所以对于任何有效的字符串,它应该总是返回 1 + 垃圾值。但事实并非如此。它工作正常。它给出了 Any 的确切长度字符串。为什么它不像函数“ret”那样返回垃圾值???请消除我的疑虑。任何帮助将不胜感激。谢谢..

最佳答案

在这两种情况下,它都是 undefined behaviour .来自 C99 标准(草案 N869)的 6.9.1 函数定义,第 12 条:

If the } that terminates a function is reached, and the value of the function call is used by the caller, the behavior is undefined.

未定义行为的一个子集看起来可以正常工作,这就是第二个代码片段中所见证的。

关于c - C中函数的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18018454/

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