对于 C/C++,如果由 __auto 或 default(__auto) 子句自动确定某个变量的作用域,并且该变量具有根据 OpenMP 规范预先确定的作用域,则编译器将根据该预先确定的作用域来确定变量的作用域。
对于 C/C++,下列变量具有预先确定的作用域:
threadprivate 指令中出现的变量为 threadprivate。
在构造内部的作用域中声明的具有自动存储持续时间的变量为 private。
具有堆分配存储的变量为 shared。
静态数据成员为 shared。
for 或 parallel for 构造的 for 循环中的循环迭代变量在该构造中为 private。
具有 const 限定的类型,且不具有 mutable 成员的变量为 shared。
C 和 C++ 中的自动确定作用域仅适用于基本数据类型: 整型、浮点型和指针。如果用户指定了要自动确定作用域的结构变量或类变量,则编译器会将该变量的作用域确定为 shared,并且封闭并行区域将由单个线程执行。