C++ 如何在C++;例如C中的条件属性#
在C#中,可以创建如下方法:C++ 如何在C++;例如C中的条件属性#,c++,debugging,C++,Debugging,在C#中,可以创建如下方法: [Conditional("DEBUG")] private void MyFunction() { } 在发行版中,此方法将不再“存在” 使用C++,我有一个类,在每个方法的开头都想执行相同的断言,所以我想把断言组放在它们自己的方法中。如果我选择这样做,我是否必须依赖编译器优化空函数(因为断言也将优化)?例如: class MyClass { private: void DebugFunction() { assert(...);
[Conditional("DEBUG")]
private void MyFunction()
{
}
在发行版中,此方法将不再“存在”
使用C++,我有一个类,在每个方法的开头都想执行相同的断言,所以我想把断言组放在它们自己的方法中。如果我选择这样做,我是否必须依赖编译器优化空函数(因为断言也将优化)?例如:
class MyClass
{
private:
void DebugFunction()
{
assert(...);
assert(...);
assert(...);
// ...
}
};
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
}
}
或者我需要引入一个宏:
#ifdef NDEBUG
#define DebugFunction
#endif
最好的方法是什么?编译器肯定会优化空函数。与调试和发布的不同版本的代码相比,我更喜欢断言的功能。当然,您应该适当地命名函数,并记录您的原因:-) 如果出于某种原因,您确实有使用
#ifndef
的冲动,请确保在CheckState()函数中执行此操作。这也允许您在发布模式下执行检查,如果您以后决定这样做的话。例如:
class MyClass
{
private:
void DebugFunction()
{
assert(...);
assert(...);
assert(...);
// ...
}
};
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
}
}
编译器肯定会优化空函数。与调试和发布的不同版本的代码相比,我更喜欢断言的功能。当然,您应该适当地命名函数,并记录您的原因:-)
如果出于某种原因,您确实有使用#ifndef
的冲动,请确保在CheckState()函数中执行此操作。这也允许您在发布模式下执行检查,如果您以后决定这样做的话。例如:
class MyClass
{
private:
void DebugFunction()
{
assert(...);
assert(...);
assert(...);
// ...
}
};
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
}
}
我相信你想要那里…我相信你想要那里。。。