C++ _Pragma(";omp parallel for";)导致可视化编译器中出现内部错误

C++ _Pragma(";omp parallel for";)导致可视化编译器中出现内部错误,c++,visual-studio,C++,Visual Studio,我现在想知道为什么我在Visual Studio中遇到编译器错误。 我用Clang和GCC测试了我的代码,它可以正常工作。 然而,在Windows上,我似乎遇到了一个错误或编译器崩溃 使用#pragma似乎可以编译,但两个表达式应该相等 #define paral_prog_decl \ _Pragma("omp parallel for") paral_prog_decl for(size_t i = 0; i < _raw.size(); i+

我现在想知道为什么我在Visual Studio中遇到编译器错误。 我用Clang和GCC测试了我的代码,它可以正常工作。 然而,在Windows上,我似乎遇到了一个错误或编译器崩溃

使用#pragma似乎可以编译,但两个表达式应该相等

#define paral_prog_decl \
    _Pragma("omp parallel for") 

paral_prog_decl
    for(size_t i = 0; i < _raw.size(); i++) {
#定义并行程序\
_Pragma(“omp并行用于”)
并行程序
对于(大小i=0;i<\u raw.size();i++){

我建议您可以参考以下代码:

#include<stdio.h>
#include<omp.h>
#define paral_prog_decl \
    _Pragma("\"omp parallel for\"")

int main() {

    paral_prog_decl(x)
        for (int i = 0; i < 20; i++) {

            printf("this is No.%d Thread ,i=%d\n", omp_get_thread_num(), i);
        }

    return 0;

}
#包括
#包括
#定义并行程序\
_Pragma(“\”omp并行表示\”)
int main(){
平行前进方向(x)
对于(int i=0;i<20;i++){
printf(“这是第%d个线程,i=%d\n”,omp\u get\u Thread\u num(),i);
}
返回0;
}

因为Microsoft指令的拼写稍有不同,更令人烦恼的是,它不希望运算符的参数周围有引号。我想这条指令
omp parallel for
需要以字符串的形式表示。因此,引号和反斜杠应该转义。

内部编译器错误是一个错误编译器中总是有一个bug。你应该向Microsoft报告。既然如此,你为什么要使用这个宏?实际上,我想保存一些代码,并向宏中添加一些代码,用于循环进程,但我不想在循环代码中看到这些。因此,在prog_decl中是degrations,在循环中,我调用另一个生成输出和c的宏调用一个原子。您可能想看看
#pragma omp parallel for
是否也会导致您的代码中出现Microsoft错误。不仅#pragma、#pragma和#pragma再次起作用,而且不是标准的。