gpt4 book ai didi

c++ - 忽略头文件中的 main

转载 作者:行者123 更新时间:2023-11-28 01:30:32 24 4
gpt4 key购买 nike

我正在尝试在项目中使用 ( Ligra)。只要包含主要 header “ligra.h”,该框架就可以工作。麻烦的是,该 header 有一个 parallel_main 的实现,它是一个使用 OpenMP 技巧围绕 main 的宏包装器。所以如果我想写一个简单的程序:

#include "ligra.h"
#include <iostream>

int main(){
std::cout<<"Hello World";
return 0;
}

它不会编译。符号 main 的重新定义。

另外,我需要一个 parallel_main,在 "parallel.h" header 中完成精确的宏技巧。

所以我想我有两个选择:

1) 修改文件,添加一对#ifdef LIGRA_MAIN并且不在编译时定义宏。因此,我可以拥有自己的 main 而无需重新定义。问题是我需要我的项目使用 ligra 的上游版本,而原始开发人员 Julian Shun 可能已经忘记了他的项目(和 github,因为他忽略了不止一个 pull request)。

2) 使用/编写一个 #pragma 将在包含阶段删除该函数。

我不知道如何做最后一部分,如果有人知道,我会非常感激你。

最佳答案

不涉及修改库文件(但有点脆弱)的解决方案可能是执行以下操作:

  1. #include "ligra/parallel.h"(这是 #define parallel_main main)。

  2. #undef parallel_main 以防止重写函数名称。

  3. #include "ligra/ligra.h" 像往常一样。由于 parallel.h 有一个包含保护,它的重复包含被阻止并且 parallel_main 不会被重新定义。

  4. 照常进行。

您可能还想将其包装到标题中,这样您只需编写一次。

或者,您可以按照@user463035818 的建议重新定义main 以包含ligra.h,以获得非常相似的效果。区别在于来自 ligra 的 parallel_main 函数将获得的名称。

关于c++ - 忽略头文件中的 main,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51729943/

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