1

我找到了这个实现char * strchr (const char *string, int c);

for (;;) 
  if (*string == c)
    return (char *) string;
  else if (*string == '\0')
    return NULL;
  else
    string++;

不过,对我来说,这相当于执行以下操作,这将更容易阅读:

while (*string != c && *string != '\0')
  string++;

return (*string == c) ? ((char *) string) : (NULL);

我认为 libc 实现第一个是有原因的。但是任何人都知道它背后的原因是什么?

4

1 回答 1

6

是的,Visual Studio 不喜欢while(1)将警告级别提高到最大值(特别是如果您要求它将警告视为错误),但可以使用for(;;).

于 2013-04-10T09:25:20.300 回答