禁用_GLIBCXX_DEBUG对特定变量的作用

时间:2018-09-05 10:35:10

标签: c++

如果C ++程序是用-D_GLIBCXX_DEBUG编译的,那么有一种方法可以在其源代码中指定对于std::vector类型的特定变量,我不希望此类的“调试”版本但是使用“普通”版本呢?

我的用例如下:

我有一个提供C接口的C库(称为libA)和一个C ++库(称为libB)。这些库尚未使用-D_GLIBCXX_DEBUG进行编译。主程序(使用-D_GLIBCXX_DEBUG编译)必须调用libA的函数,并将传递给std::vector<char>*的函数传递给void*libA调用一个给定libB的{​​{1}}函数,并将其转换回void*以使用它(哦,通过C层传递C ++数据的乐趣。 )。由于主程序是使用std::vector<char>*编译的,但不是-D_GLIBCXX_DEBUG编译的,因此,主程序和libB中的std::vector<char>类实际上具有不同的实现,这会导致错误。

2 个答案:

答案 0 :(得分:1)

创建void* createNDebugVec(char const* begin, char const* end);函数并将其放在自己的.cpp文件中可能是最可靠的。在该.cpp文件中,在包含任何内容之前,先显式#undef GLIBCXX_DEBUG。这使您可以创建非调试std::vector并将其预制返回到void*。您可能需要匹配的void destroyNDebugVec(void*);

请注意,出于相同的原因,void* createNDebugVec(std::vector<char> const& src);将不起作用。

答案 1 :(得分:0)

您可以#undef _GLIBCXX_DEBUG,然后再在主程序中使用#include<vector>

请确保我将声明一个继承自std::vector<char>的非模板类,在其中您使用#undef _GLIBCXX_DEBUG技巧并使用此类的实例将数据传递给libB。