Debug
用作类似函数的宏,但不像一个宏:
if( some_condition ) Debug(); else { blah } // Ooops
此外,它与标准输出流混淆,包含用于调试和发布构建的不同标头,使用保留符号(以下划线开头,后跟大写)_DEBUG
(您的意思是使用标准NDEBUG
吗?)并且不必要地使用非标准退出值。
因此,而不是当前
#ifdef _DEBUG
#include <iostream>
#define Debug(text) { cout << "Error: " << text; cin.get(); exit(1); }
#else
#define Debug(text) ;
#endif
做
#ifndef DEBUGGING_H
#define DEBUGGING_H
#include <iostream> // std::cerr, std::endl
#include <stdlib.h> // exit, EXIT_FAILURE
#ifdef MYDEBUG
# define Debug(text) ::debugging::sayByeAndTerminate( text )
#else
# define Debug(text)
#endif
namespace debugging {
inline void sayByeAndTerminate( char const* const text )
{
using namespace std;
cerr << "Error: " << text; cin.get(); exit(EXIT_FAILURE);
}
} // namespace debugging
注意上面的代码没有使用傻
do {} while( false )
也不是双傻
(void)0
因为没有必要为了一无所获而写一些东西。
没有什么是完美无缺的。
对于警告:我无法使用 Visual C++ 11 重现它(请提供一个展示该行为的完整示例),但只需将其关闭即可。不要调整代码以适应编译器。只需关闭警告即可。
免责声明:即兴代码,编译器未触及。