在同一行 C 中的 `if` 和 `while` 语句,没有明显的分支或循环

An `if` and `while` statement in the same line of C, without an apparent branch or loop

我正在浏览 Github 上的一个项目,其中一个文件中出现了我无法理解的一行。

该行本身是,

if(!*p) while(*c++ != ']');

...所以我认为我理解while被执行if(!*p),但是while没有任何相应的循环,这有点让我困惑。

这句话是什么意思?

对于上下文:the line in the file

; 只是结束单行 while 语句,没有做任何事情。这段代码也可以写成如下:

if(!*p) while(*c++ != ']'){}

基本上,while 语句一直持续到 *c++ 的 return 值不等于 ] 字符,大概是为了向前寻找下一个 ] ] 字符.

附带说明一下,此循环中没有边界检查,因此它可能会越过预期地址 space,这可能很糟糕。

是的!它递增指针:*c 与:

*c++

而分号是 while 循环的 'body',它什么都不做

这相当于:

if(!*p)
{
    while(*c++ != ']'){}
}

所以它基本上是递增字符指针,直到它指向那个']'字符。 感谢 Rici 指出代码错误

`while(*c++ != ']');`   

表示while(*c++ != ']'){ } 如果循环体内没有任何东西,我们可以像第一个代码一样放置“;”above.So你问题中的代码真的很像

if(!*p) {  while(*c++ != ']') { }  }