在同一行 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++ != ']') { } }
我正在浏览 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++ != ']') { } }