Linux下OpenMPI可编译的C程序在Windows MSMPI环境编译失败求助
解决VS2010+MSMPI编译C程序的语法错误问题
看起来你在Windows 7下用VS2010搭配MSMPI编译MPI程序时遇到了头疼的语法错误问题——加了MPI_Init()就触发大量报错,注释掉又没法用MPI,还不想换MinGW。我来给你几个不用切换编译器的解决思路:
1. 调整数组初始化方式,适配VS2010的C89编译模式
VS2010的MSVC编译器默认按C89标准编译C代码,而myObj *a[5] = {NULL};这种用单个NULL初始化整个指针数组的写法,在老版本MSVC里可能因为MPI头文件的宏干扰出现解析问题。你可以改成更兼容的写法:
// 方法一:逐个赋值,最稳妥的C89兼容写法 myObj *a[5]; a[0] = NULL; a[1] = NULL; a[2] = NULL; a[3] = NULL; a[4] = NULL; // 方法二:用memset批量置空(仅适用于指针数组,因为NULL等价于0) myObj *a[5]; memset(a, 0, sizeof(a));
2. 禁用MPI的C++绑定宏,避免语法冲突
MSMPI的头文件里的C++绑定宏有时会干扰C代码的语法解析。你可以在包含mpi.h之前定义MPI_NO_CPPBIND,强制MPI头文件只提供C风格声明:
#define MPI_NO_CPPBIND #include <mpi.h> // 再包含其他头文件
3. 强制项目编译为纯C代码
VS2010偶尔会默认把.c文件当成C编译(尤其是项目混有C文件时),这会导致C语法被误判。你可以手动设置:
- 右键项目 → 属性 → 配置属性 → C/C++ → 高级
- 找到「编译为」选项,选择「编译为 C 代码 (/TC)」
4. 匹配MSMPI版本与VS2010的兼容性
VS2010是比较老的版本,新版本MSMPI可能不再支持它。你可以尝试安装MSMPI v7.1或更早版本(这些版本专门适配了VS2010等老编译器),确保MPI头文件和库文件能被VS2010正确识别。
按照上面的步骤试一下,应该能解决你遇到的C2059和C1003错误,不用切换到MinGW。
内容的提问来源于stack exchange,提问作者Plamenk
相关产品推荐
相关产品推荐

