gpt4 book ai didi

c++ - 如何在 C++ 中创建 DEBUG 函数,例如 C# 中的 ConditionalAttribute

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

在 C# 中,可以创建如下方法:

[Conditional("DEBUG")]
private void MyFunction()
{
}

在发布中,这个方法将不再“存在”。

使用 C++,我有一个类,我想在每个方法的开头执行相同的断言,所以我想将断言组放在它们自己的方法中。如果我选择那样做,我是否必须依赖编译器优化一个空函数(因为断言也会被优化)?例如:

class MyClass
{
private:
void DebugFunction()
{
assert(...);
assert(...);
assert(...);
// ...
}
};

或者我必须引入一个宏:

#ifdef NDEBUG
#define DebugFunction
#endif

执行此操作的最佳方法是什么?

最佳答案

编译器肯定会优化空函数。我更喜欢 asserts 的功能,而不是用于调试和发布的不同版本的代码。当然,您应该适本地命名该函数,并记录您的原因:-)

如果出于某种原因,您确实有使用#ifndef 的冲动,请确保您在 CheckState() 中执行此操作> 功能。如果您以后决定这样做,这也允许您在 Release模式下执行检查。例如:

class MyClass
{
private:
void CheckState()
{
assert(...);
assert(...);

#ifndef NDEBUG
// some expensive check to only run on Debug builds
#endif

// Some check you want to always make
}
}

关于c++ - 如何在 C++ 中创建 DEBUG 函数,例如 C# 中的 ConditionalAttribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4904929/

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