结构块指的是什么?

what does structured-block refer to?

本文关键字:是什么 结构      更新时间:2023-10-16

我现在多次看到在语法解释中使用了短语结构化块。例如:

#pragma omp single
structured-block

(这是来自OpenMP,但这并不重要。

以下两行是否也算作结构化块?

do_something1;
do_something2;

还是只有第一句话?

所以,简而言之:当说结构化块时,他们是什么意思?

基于此处的文档:

"结构化块"是单个语句或复合语句 顶部有一个入口,底部有一个出口

在此处查找复合语句的定义:

复合语句或块是用大括号括起来的序列 声明和声明。

鉴于这个定义,do_something1;将是结构化块的唯一部分,因为在此之后开始一个新的"单一"语句。另一方面,如果你这样做了

#pragma omp <directive>
{
do_something1;
do_something2;
}

它将在结构化块中同时存在,因为它是一个"复合"语句。

最后,请注意定义说明single entry at the top and a single exit at the bottom。这只是意味着我们不应该有一个中间的退出/控制流断点,如goto语句,returnthrow error介于两者之间。

结构化块要么是单个语句,例如

printf("Hellon");

或用大括号括起来的一系列语句:

{
printf("Hello ");
printf("Worldn");
}

此外,OpenMP 要求"单入口,单出口",这意味着您不能将goto或类似的分支分支到块中,并且您不能有分支离开块,例如goto或C++例外。 相反,代码需要到达右大括号。