编译器错误 C7688

“”pragma omp atomic:预期为标量类型的表达式

Remarks

OpenMP 将构造中的 #pragma omp atomic 表达式限制为标量类型。

Visual Studio 2022 版本 17.4 中新增了编译器错误 C7688。 在以前的编译器版本中,编译器将发出错误 C3048

Example

示例代码显示为构造中的 #pragma omp atomic 非标量类型生成的诊断。

// C7688.cpp
// compile using /c /openmp:llvm
struct S { char c; };
S operator+(S, int);

void test()
{
    S s1, s2;
    #pragma omp atomic capture
    { s1 = s2; s2 = s1 + 1; }
}
/*
When built, the compiler emits:

.\C7688.cpp(10,10): error C7688: '#pragma omp atomic': expected an expression of scalar type
    { s1 = s2; s2 = s1 + 1; }
         ^
.\C7688.cpp(10,10): note: type is 'S'
*/

若要解决此问题,请在构造中使用 #pragma omp atomic 标量类型。