c - 自动检测是否需要在函数参数中添加“const”限定符
问题描述
我编写了一个截取许多 MPI 函数的 PMPI 分析库。在我的本地机器上,我安装了 OpenMPI,并且一些函数参数有一个 const 限定符,例如:
int PMPI_Gather(const void *sendbuf, int sendcount, ...)
所以很自然,我的 PMPI 库在相应的钩子函数中也有那些 const 限定符。但是,我经常运行东西的远程机器有一个 MPI 安装,其中 mpi.h 中的函数参数没有 const 限定符,所以当我编译我的库时,我收到一大堆警告,函数声明不兼容. 当然,我可以忽略警告,禁止它们或手动删除 const 限定符。
我想知道是否有一种更优雅的方式来处理这种情况,是否有可能以某种方式检测 mpi.h 中的函数声明是否有 const 参数,并在编译期间自动添加或删除分析库代码中的 const 限定符,或者它可能是某种配置功能。
解决方案
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 绑定部分中轻松查看更改。
推荐阅读
- javascript - 承诺链和条件
- python - 使用带有硒的功能我做错了什么?
- python - 如何添加像 facebook messenger 一样发送的消息时间?
- deep-learning - 估计任意不确定性深度学习模型
- gatsby - 使用本地包/依赖项将 Gatsby 部署到 Vercel
- latex - 如何在LATEX(Overleaf)的页面边缘添加垂直版权框?
- mongodb - 如何通过 mongo-go-driver 获取 mongodb 的版本
- c# - 抽象类和依赖注入
- php - 基于php更新产品的woocommerce价格
- cassandra - 为什么 Major compaction 没有释放空间,而garbagecollect 没有?