C 函数不以return语句结尾
我是C语言新手,但我知道编码的基本原理。但是,我不明白编译器返回错误的原因: 函数“.”不以return语句结尾 这是我的密码:C 函数不以return语句结尾,c,string,return,C,String,Return,我是C语言新手,但我知道编码的基本原理。但是,我不明白编译器返回错误的原因: 函数“.”不以return语句结尾 这是我的密码: string same_start_end(string s) { char first_letter = string_charat(s, 0); string empty = ""; if( string_length(s) <= 1) { return s; } else if (string_length(s) &g
string same_start_end(string s)
{
char first_letter = string_charat(s, 0);
string empty = "";
if( string_length(s) <= 1)
{
return s;
}
else if (string_length(s) > 1)
{
for (int i = 0; i < string_length(s); i++)
{
if( (string_charat(s, i) == first_letter) && (i != 0))
{
return string_sub(s, 0,i);
}
}
}
}
字符串相同\u开始\u结束(字符串s)
{
字符第一个字母=字符串字符(s,0);
字符串为空=”;
如果(字符串长度为1)
{
对于(int i=0;i
您的if
和else if
语句中只有返回。如果这两个都失败了,那么就没有返回语句。考虑做和<代码> E/<代码>,而不是在< <代码> >下执行<代码> >或在所有这些代码之后都有一个返回语句。
编辑:
如果对for循环进行迭代,它不会返回任何内容,而且它也不会触发if语句。编译器警告说,控件可能会到达非void函数的末尾,因为控件可能会到达非void函数的末尾 要防止出现这种情况,必须执行以下操作之一:
- 禁用编译器警告。(使用Clang时,命令行选项
会执行此操作。)(在C中,如果调用方不尝试使用返回值,则允许非void函数从函数末尾流出而不返回值。)-Wno return type
- 使编译器清楚地看到函数返回
if (string_length(s) <= 1)
…
else if (string_length(s) > 1)
for (int i=0; i<string_length(s);i++)
{
if( (string_charat(s,i)==first_letter) && (i!=0))
{
return string_sub(s, 0,i);
}
}
如果未被触发,则此循环可以结束。s
中可能没有与第一个字符相等的字符,因此永远不会执行返回。然后循环完成,控制流到函数末尾,而不使用return
语句
为了防止出现这种情况,可以在for
循环之后插入return
语句。当没有找到匹配项时,它将返回任何想要返回的值。使用C和C++时,在定义函数时必须小心。通过编写
string
,您告诉编译器此函数必须返回一个字符串。如果不想这样做,请尝试切换到void
,因为void不会返回值。如果您想使用void,但仍然让外部函数知道变量,那么应该使用指针。在您的例子中,返回有时并不例外“我不明白编译器为什么返回此错误”,因为编译器只是一个编译器。因为它不以return语句结尾?理解你的if-else-if是详尽无遗的可能还不够聪明。写if-else。@Lundin:“if-else”:我怀疑这是否有用,因为它可能无法预先确定string\u charat()
将做什么。但是,这又是一场猜测比赛。如果你的两条return
语句中没有一条会发生,会发生什么?如果循环刚刚结束,会发生什么?@Lundin:它不是详尽的。当执行外部else
时,它内部的循环并不总是执行return
。只有else
不会有帮助,因为当前的return
语句都是有条件的。如果没有一个条件是真的,那么循环将完成,函数将在没有任何无条件返回的情况下运行。即使我将其保持为“如果其他”,我也会收到相同的消息@某个程序员,你是对的。如果循环完成且if从不触发,则存在一个没有结果的路径。需要有一个与if分开的return语句。如果所有其他方法都失败了,并且您觉得自己已经涵盖了所有的基础,那么在函数末尾放上return 0
,返回0是完全错误的,因为函数承诺返回字符串:),我明白您的观点,但是编译器是如何看待这些可能性的,我的意思是没有语法error@Mer_如果存在未解析的可能代码路径,编译器将捕获它。每次都需要返回一些东西,因为函数期望返回一些东西