gpt4 book ai didi

c++ - 为什么在 extern "C"中定义了 __cplusplus

转载 作者:太空狗 更新时间:2023-10-29 19:38:26 25 4
gpt4 key购买 nike

内部外部 "C" { }__cplusplus仍然被定义。当我想包含 mpi.h 的 C 版本时在动态加载的我的库的标题中,这将不能作为 mpi.h 工作仍然找到 __cplusplus并且仍然会加载,就像它是由 C++ 打开的一样。

#undef __cplusplus与海湾合作委员会合作。但我不想依赖这个。

那么如何编写一个C++程序 - 使用 C++ 版本的 mpi 和 - 链接到使用 mpi C 版本的 C 库(其中 #include <mpi.h> 已经出现在标题中?

示例代码:

库.h:

#ifdef __cplusplus
extern "C" {
#endif

#include <mpi.h>

void library_do(MPI_Comm comm);

#ifdef __cplusplus
}
#endif

程序.cpp:

#include <library.h>

#include <mpi.h>

int main() {
MPI::Init();
// do some mpi C++ calls...
library_do(MPI::COMM_WORLD);
MPI::Finalize();
}

万一有人想在这里玩 library.c 的例子:

#include <stdio.h>
#include "library.h"

void library_do(MPI_Comm comm)
{
int rank;
MPI_Comm_rank(comm, &rank);
printf("MPI Rank: %d", rank);
}

并编译我尝试的一切

mpicc -shared library.c -o lib.so
mpicxx program.cpp -l lib.so

最佳答案

如果编译器是 C++ 编译器,则

__cplusplus 将始终由编译器定义。 extern "C"{} 只为您提供 C 链接,因此内部代码在 C 编译器中运行良好。

关于c++ - 为什么在 extern "C"中定义了 __cplusplus,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56968131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com