注意,在将来的版本中,任务自动作用域规则和自动作用域结果可能会有所更改。而且,隐式确定的作用域规则和自动作用域规则的应用顺序在将来的版本中也会发生更改。
程序员使用 _auto(list-of-variables) 子句或 default(_auto) 子句显式请求自动作用域。为并行构造指定 default(_auto) 或 _auto(list-of-variables) 子句,并不意味着将同一子句应用于在语法上或动态包含在并行构造中的任务构造。
在对没有预先确定隐式作用域的变量自动确定作用域时,编译器会按给定顺序根据上述规则来检查变量的使用。如果符合某个规则,编译器将按照匹配的规则确定变量的作用域。如果没有匹配的规则或自动作用域无法处理变量(如下所述,存在某些限制),编译器会将变量的作用域确定为 SHARED,并将并行或任务构造视为如同指定了 IF (.FALSE.) 或 if(0) 子句一样。
通常,自动确定作用域失败的原因有两个。一个原因是使用的变量不匹配任何规则。第二个原因是源代码对于编译器来说过于复杂,因而无法执行全面的分析。函数调用、复杂的数组下标、内存别名和用户实现的同步都是常见原因。