C++ マクロはいつ役に立つのでしょうか? [closed] 質問する

C++ マクロはいつ役に立つのでしょうか? [closed] 質問する

プリプロセッサは、当然のことながら、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__通常の関数 (テンプレート) として類似物を実装することもできます。

おすすめ記事