Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C的同一行中的'if'和'while'语句,没有明显的分支或循环_C_While Loop - Fatal编程技术网

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

在C的同一行中的'if'和'while'语句,没有明显的分支或循环,c,while-loop,C,While Loop,我正在浏览Github上的一个项目,其中一个文件中出现了一行我无法理解的内容 线路本身是, if(!*p) while(*c++ != ']'); 。。。所以我想我知道while在(!*p)的情况下执行while,但是while没有任何相应的循环,这让我感到困惑 这句话是什么意思 上下文:代码>只结束单行while语句,不做任何操作。此代码也可以按以下方式编写: if(!*p) while(*c++ != ']'){} 基本上,while语句一直持续到*c++的返回值不等于]字符,大概是为了

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

线路本身是,

if(!*p) while(*c++ != ']');
。。。所以我想我知道
while
在(!*p)的情况下执行
while,但是while没有任何相应的循环,这让我感到困惑

这句话是什么意思


上下文:

代码>只结束单行while语句,不做任何操作。此代码也可以按以下方式编写:

if(!*p) while(*c++ != ']'){}
基本上,while语句一直持续到
*c++
的返回值不等于
]
字符,大概是为了向前搜索下一个
]
字符


另一方面,此循环中没有边界检查,因此它可以查找超出预期地址空间的内容,这可能不好。

是的!它将指针:
*c
递增为:

*c++
分号是while循环的“主体”,simple不做任何事情,这相当于:

if(!*p)
{
    while(*c++ != ']'){}
}
因此,它基本上是递增字符指针,直到它指向该']'字符。 感谢Rici指出代码中的错误

`while(*c++ != ']');`   
表示
while(*c++!=']'){}
如果循环体中没有任何内容,我们可以在上面的第一个代码中添加“;”,因此您问题中的代码

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

@我不太明白你的意思?检查他添加的链接。。。我花了一点时间才明白你的意思。是不是当它在while条件下计算*c++时,在进入循环之前先递增它?@Abbath:没错。所以你的循环,c指向“],但在代码中c指向刚刚过去的“]。注意,符号p是#定义为g->pointer,符号c是#定义为g->code,因此代码行(预处理后)等价于:if(!*(g->pointer)){while(*(g->code)+!=']'){}