我正在玩C,并决定建立我自己的功能strlen()而且我{}做了.但通过这样做,我很震惊地找到了可以做的事情.这是我的代码:
#include <stdio.h>
#include <assert.h>
int mystrlen(char *s)
{
int i = 0;
assert(s[0] !='\0');
for(i = 0; s[i] !='\0'; i++)
// Placing {} here causes the error to disappear //
return i;
}
int main(void)
{
char hello[] = "hello";
int len = mystrlen(hello);
printf("Length = %d\n", len);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
运行此代码会产生此错误:
mystrlen.c:12:1: warning: control reaches end of non-void function [-Wreturn-type]
Run Code Online (Sandbox Code Playgroud)
但在 {} while循环之后放置后不再有错误.任何人都可以向我解释这种行为吗?
由于for()缺少循环中的分号,因此将return其解析为循环体.
for(i = 0; s[i] !='\0'; i++)
return i;
Run Code Online (Sandbox Code Playgroud)
被解析为
for(i = 0; s[i] !='\0'; i++)
{
return i;
}
Run Code Online (Sandbox Code Playgroud)
这意味着在循环之后,函数结束时没有a return.以大括号的形式添加空语句会使for循环具有空主体,从而将其移动return到循环外部.