のCプリプロセッサは、当然のことながら、C++ コミュニティから恐れられ、敬遠されています。インライン関数、定数、テンプレートは通常、 よりも安全で優れた代替手段です#define
。
次のマクロ:
#define SUCCEEDED(hr) ((HRESULT)(hr) >= 0)
決して型安全より優れているわけではありません:
inline bool succeeded(int hr) { return hr >= 0; }
しかし、マクロには用途があります。マクロの用途を教えてください。できないプリプロセッサなしで実行します。
各ユースケースを別々の回答に入れて投票できるようにしてください。また、プリプロセッサなしで回答の 1 つを達成する方法を知っている場合は、その回答のコメントでその方法を指摘してください。
ベストアンサー1
デバッグ関数のラッパーとして、、、などを自動的に渡し__FILE__
ます__LINE__
。
#ifdef ( DEBUG )
#define M_DebugLog( msg ) std::cout << __FILE__ << ":" << __LINE__ << ": " << msg
#else
#define M_DebugLog( msg )
#endif
C++20以降、マジックタイプstd::source_location
ただし、 の代わりに を使用し__LINE__
、__FILE__
通常の関数 (テンプレート) として類似物を実装することもできます。