自动作用域可以帮助程序员决定如何确定变量的作用域。但是,对于一些复杂程序,自动作用域可能不会成功,或者无法实现程序员期望的结果。错误确定作用域可能引发许多不引人注意但很严重的问题。例如,将某些变量的作用域错误地确定为 SHARED 可能会导致数据争用;将变量错误地专有化可能会在构造之外为变量使用未定义的值。
Solaris Studio C、C++ 和 Fortran 编译器提供了一个编译时作用域检查功能,编译器可以通过该功能来确定 OpenMP 程序中的变量是否正确确定了作用域。
根据编译器的功能,作用域检查可以发现数据争用、不适当专有化、变量归约等潜在问题以及其他作用域问题。在作用域检查期间,编译器会对程序员指定的数据共享属性、编译器确定的隐式数据共享属性和自动作用域结果进行检查。