非SO奇怪的C行为

安迪(Andy_A̷n̷d̷y̷)

我当时在玩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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章