开发者

How can I make a DEBUG function in C++ such as ConditionalAttribute in C#

开发者 https://www.devze.com 2023-02-08 11:32 出处:网络
In C#, one can make a method such as this: [Conditional(\"DEBUG\")] private void MyF开发者_如何学编程unction()

In C#, one can make a method such as this:

[Conditional("DEBUG")]
private void MyF开发者_如何学编程unction()
{
}

In release, this method will no longer "exist".

Using C++, I have a class where I want to perform the same assertions at the beginning of every method, so I would like to put the group of assertions in their own method. If I chose to do it that way, would I have to rely on the compiler optimizing out an empty function (since asserts will be optimized out as well)? For example:

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

Or would I have to introduce a macro:

#ifdef NDEBUG
#define DebugFunction
#endif

What's the best way to do this?


The compiler will definitely optimize out the empty functions. I would prefer the function of asserts over different versions of the code for debug and release. Of course, you should name the function appropriately, and document your reasons as well :-)

If, for some reason, you absolutely did have the urge to use #ifndef, make sure you do it inside the CheckState() function. This allows you to perform checks in release mode as well, should you later decide to do so. For example:

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
   }
}
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号