【问题标题】:Including MPI header file with user-defined macro包含带有用户定义宏的 MPI 头文件
【发布时间】:2021-07-10 04:04:36
【问题描述】:

对于包括 openmp,这很有效:

#ifdef _OPENMP
#include <omp.h>
#endif

我也希望以这种方式包含 MPI;所以我写了这个:

#ifdef MPI
#include <mpi.h>
#endif

但这不起作用。不能以同样的方式包含 MPI 吗?

【问题讨论】:

  • OpenMP 是该语言的扩展(它通常需要一个额外的标志,例如 -fopenmp),因此编译器会意识到它并定义了 _OPENMP 宏等。 MPI 只是一个库,编译器不知道它,因此它无法定义临时宏。您可能可以通过破解 MPI 包装器(mpicc 和朋友)来实现这一点,但这不是可移植的。

标签: mpi


【解决方案1】:

是的,它会起作用。您需要告诉编译器 MPI 既是宏,又是已定义的。它的简写是 -D:

gcc -D MPI my.c

示例,test.c:

#include <stdio.h>

int main(){

#ifdef MPI
printf("Hello, MPI\n");
#endif

printf("Hello, world\n");
}

屏幕抓取:

jsmith@LOBSTER:~$ gcc test.c
jsmith@LOBSTER:~$ ./a.out
Hello, world
jsmith@LOBSTER:~$ gcc -D MPI test.c
jsmith@LOBSTER:~$ ./a.out
Hello, MPI
Hello, world

【讨论】:

  • 你为什么使用printf("Hello, MPI\n");?我需要做的是告诉编译器无论你在哪里看到 MPI 函数,都包含其适当的头文件
  • 我在一般情况下演示,如果您使用 -D MPI 编译代码,那么您包含在“#ifdef MPI”中的任何内容都将被执行。反之亦然。
猜你喜欢
  • 2021-05-03
  • 2015-03-26
  • 1970-01-01
  • 1970-01-01
  • 2018-11-25
  • 1970-01-01
  • 2017-12-21
  • 1970-01-01
  • 2014-01-28
相关资源
最近更新 更多