我当时在玩C语言,并决定建立自己的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;
}
运行此代码会产生以下错误:
mystrlen.c:12:1: warning: control reaches end of non-void function [-Wreturn-type]
但是在放置 {}
在while循环之后之后,就不再有错误了,有人可以向我解释这种行为吗?
由于for()
缺少循环中的分号,因此将return
其解析为循环的主体。
for(i = 0; s[i] !='\0'; i++)
return i;
被解析为
for(i = 0; s[i] !='\0'; i++)
{
return i;
}
这意味着循环后,该函数将结束而不带return
。以大括号形式添加一个空语句会使for
循环具有一个空的主体,该主体将移到return
循环外部。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句