gpt4 book ai didi

c++ - 如何在 C++ 应用程序中重新定义 C++ 库的预处理器指令

转载 作者:行者123 更新时间:2023-11-30 00:47:19 25 4
gpt4 key购买 nike

我举下面的例子来说明我的问题。假设现在我正在创建一个c++库,头文件和它的实现文件如下:

// head.h
class __declspec(dllexport) MyClass
{

public:
int obtain_value();

};

// head.cpp
int MyClass::obtain_value()
{
#ifndef DEFINE_FIVE
return 6;
#else
return 5;
#endif

}

在这个库中,如果我在编译库的时候定义了DEFINE_FIVE,那么在调用obtain_value函数的时候会得到5;否则,我将获得 6。假设当我编译库时,我没有定义 DEFINE_FIVE。在将调用该库的 C++ 程序中,当调用 obtain_value 函数时,我们期望有 6。那么我的问题是,我可以在调用该库的 C++ 程序中做什么,以便输出调用此函数将是 5。谢谢。

最佳答案

预处理器指令在编译时评估,您不能在运行时更改代码。如果您编译库并且未定义 DEFINE_FIVE,预处理器将首先将您的代码替换为以下代码:

// head.cpp
int MyClass::obtain_value()
{
return 6;
}

如您所见,它将解析并删除所有预处理器指令。然后,真正的编译阶段从机器代码生成开始。

如果你想在你的库中使用动态值,你必须改变你的界面,例如:

// head.h
class __declspec(dllexport) MyClass
{

public:
int obtain_value(bool give_me_five=false);

};

// head.cpp
int MyClass::obtain_value(bool give_me_five)
{
if (!give_me_five)
return 6;
else return 5;
}

关于c++ - 如何在 C++ 应用程序中重新定义 C++ 库的预处理器指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35268230/

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