【问题标题】:mpi.h: Using a type w/o defining it?mpi.h:使用没有定义的类型?
【发布时间】:2011-08-04 17:17:19
【问题描述】:

我正在尝试将 OpenMPI 的 mpi.h 的重要部分翻译成 D 编程语言,以便我可以从 D 中调用它。(HTOD 根本不起作用。)我无法理解以下内容代码:

typedef struct ompi_communicator_t *MPI_Comm;
OMPI_DECLSPEC extern struct ompi_communicator_t ompi_mpi_comm_world;
OMPI_DECLSPEC extern struct ompi_communicator_t ompi_mpi_comm_self;
OMPI_DECLSPEC extern struct ompi_communicator_t ompi_mpi_comm_null;

问题是 ompi_communicator_t 从未在 mpi.h 中定义,并且 mpi.h 不包含除 stddef.h 之外的任何其他文件,这显然不包含定义。 (评论说它包含在ptrdiff_t 中。)这些是mpi.h 中仅有的四行包含字符串ompi_communicator_t。这个结构的定义来自哪里?有什么我应该注意的技巧吗?类型可以凭空出现? (还有其他几个类似的结构,但这是我偶然发现的第一个。)

【问题讨论】:

  • 看起来像典型的不透明类型。你应该可以安全地用任何东西替换它,因为图书馆只关心地址。
  • @dsimcha:干得好!你会分享你的源代码以及你是如何编译示例程序的吗?谢谢!

标签: c header parallel-processing d mpi


【解决方案1】:

这是一个指向结构的指针,它的内部结构在 OpenMPI 之外是不可见的。使用任何可以容纳指针的类型,例如(在 C 中)void*.

【讨论】:

  • 谢谢。我从未意识到这种未声明但已使用的结构在 C 中是合法的(它们不在 D 中)。我刚刚制作了一个完全虚假的结构来关闭 D 编译器,因为它没有被定义,因为正如你和 Cyber​​Shadow 提到的那样,无论如何它实际上只是内存地址。
  • 在这些情况下我总是使用空结构:struct test{}
  • @jpf:这正是我最终所做的。
猜你喜欢
  • 2015-01-11
  • 2018-07-25
  • 2021-11-22
  • 2016-06-28
  • 2016-01-12
  • 2013-01-09
  • 1970-01-01
相关资源
最近更新 更多