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 で再現することはできません (動作を示す完全な例を提供してください) 。これでコンパイラに対応するようにコードを調整しないでください。警告をオフにするだけです。
免責事項: すぐに使えるコードであり、コンパイラの手には触れられていません。