首页 > 解决方案 > 自动检测是否需要在函数参数中添加“const”限定符

问题描述

我编写了一个截取许多 MPI 函数的 PMPI 分析库。在我的本地机器上,我安装了 OpenMPI,并且一些函数参数有一个 const 限定符,例如:

int PMPI_Gather(const void *sendbuf, int sendcount, ...)  

所以很自然,我的 PMPI 库在相应的钩子函数中也有那些 const 限定符。但是,我经常运行东西的远程机器有一个 MPI 安装,其中 mpi.h 中的函数参数没有 const 限定符,所以当我编译我的库时,我收到一大堆警告,函数声明不兼容. 当然,我可以忽略警告,禁止它们或手动删除 const 限定符。

我想知道是否有一种更优雅的方式来处理这种情况,是否有可能以某种方式检测 mpi.h 中的函数声明是否有 const 参数,并在编译期间自动添加或删除分析库代码中的 const 限定符,或者它可能是某种配置功能。

标签: ccompilationmpic-preprocessor

解决方案


const- C 绑定的正确性,即参数const指针IN,已在 MPI 3.0 中添加。您可以通过以下方式处理:

#if MPI_VERSION >= 3
    #define MPI_CONST const
#else
    #define MPI_CONST
#endif

int PMPI_Gather(MPI_CONST void *sendbuf, int sendcount, ...)

注意:您可以在标准的“diff to 3.0”版本的A.2 C 绑定部分中轻松查看更改。


推荐阅读