QtにはQ_ASSERTマクロがあります。 assertの代わりに<cassert>
の代わりにこれを使用する利点は何ですか?非常に同じ文書からアサートの代わりにQ_ASSERTを使用する理由
答えて
Q_ASSERT
は、おそらく標準assert
機能を強化するカスタムassertマクロです。
エラーメッセージは、qFatal()
で処理されます。これは、標準のアサートマクロよりも若干優れた動作をする可能性があります。たとえば、Windows上では、アサーションが失敗した時点でVisual Studioデバッガを起動し、abort()
を呼び出すだけで済みます。
あなたはまた、 Qtのエラーメッセージ機能の出力をリダイレクトすることができ、そのような(qInstallMessageHandler()付き)カスタムメッセージハンドラにqFatal
として。たとえば、エラーメッセージをファイルにリダイレクトする場合に便利です。これはあなたがQtの関連コードと残りの間アサート分離するために使用することができます。
はまた、(assert
はNDEBUG
では無効になっている間)Q_ASSERT
マクロQT_NO_DEBUG
で無効になっていることに注意してください。
:
QT_NO_DEBUGは、コンパイル時に定義された場合、それは何もしません。
ので、それについて考える:assert
があるようQ_ASSERT
は、NDEBUG
の不在に偶発的ではありません。 はassert()
に何かを実行するために必要であり、ユーザ(およびライブラリ..?)のコードで他の一般的なデバッグ専用のものを区別するためによく使用されます。
別のマクロを使うと、NDEBUG
を残しておかないとQt関連のものだけをデバッグしたいので、残りのコードをデバッグ専用のもので重み付けして、プログラムを膨らませます。NDEBUG
特に定義されていない。assert()
s。
あなたはリリースモードのセマンティクスで「通常の」ものをコンパイルしますが、まだQtのものにデバッグを適用したいのであれば、あなたはない-DQT_NO_DEBUG
-DNDEBUG
でコンパイルしたがことができます。
これは、複雑なGUIアプリケーションを開発する際には非常に便利です。私はQtを使用していませんが(まだですか?)、GTK +/gtkmmの選択したツールキットでこのようなものを使用することの利点を見ています[...確かに存在しますが、まだそれらを見ていませんでした;-)]
私は、直交提案の議論と織り交ぜ、ここではこれについての最近のアニメーションの議論を思い出す:ISO C++ Standard - Future Proposals › Exception stack trace information.
はい私は別のデバッグが定義していることに気付きました。しかし、その可能性を持つことは理にかなっています。 – Zitrax
- 1. guava:コンストラクタの代わりにメソッドcreate()を使用する理由
- 2. シェルスクリプト - エコーの代わりにbin/echoを使用する理由?
- 3. queue.First()/ Last()の代わりにqueue.Peek()を使用する理由
- 4. Stringの代わりにchar []を使用する理由は?
- 5. Date []の代わりにlong []を使用する理由
- 6. SpriteKitの代わりにCoreGraphicsを使用する理由は?
- 7. QAの代わりにmochaを使用する理由
- 8. trueの代わりに!0を使用する理由はありますか?
- 9. XMLの代わりにSGMLを使用する理由はありますか?
- 10. [x]の代わりにoperator.itemgetter(x)を使用する理由は何ですか?
- 11. LocalDate、LocalTime、Streamオブジェクトがコンストラクタの代わりに()のファクトリメソッドを使用する理由
- 12. asp.netがbigintの代わりにGUID列を使用する理由
- 13. CSSプロパティテーブルの代わりに浮動小数点数を使用する理由
- 14. ダイレクトメソッド呼び出しの代わりにカスタムイベントを使用する理由
- 15. C++でリファレンスの代わりにシャローコピーを使用する理由は?
- 16. Singeltonパターンの代わりにZend_Registryを使う理由は?
- 17. データセット。代わりにクエリアダプタまたはテーブルアダプタを使用する理由
- 18. IISの代わりにWaWebHostでWebRoleを実行する理由
- 19. IOErrorEvent.IO_ERRORの代わりにEvent.OPENをディスパッチする理由
- 20. Microsoft Azure Webサイトでログ用のブロブを追加する代わりにブロックブロブを使用する理由
- 21. Facebook PHP-SDKが$ _SESSIONの代わりに$ _COOKIEを使用する理由はありますか?
- 22. Pd拡張の代わりにバニラ純粋データを使用する理由はありますか?
- 23. ui:compositionの代わりにFaceletsルートとしてhtmlを使用する理由はありますか?
- 24. javascriptでletの代わりにvarを使う理由は何ですか?
- 25. BSONの代わりにBEncodeを使用するBitTorrent KRPCの背後にある理由は何ですか?
- 26. 不変オブジェクトのパブリックフィールドの代わりにゲッターを使う理由は?
- 27. 代わりにパーシャルビューコントローラを使用する
- 28. トーストを使用する代わりに
- 29. parseIntの代わりにビット演算子を使用しないのが良い理由はありますか?
- 30. 角度2の代わりにAngularJSを使用することに決めた理由
カスタムアサートマクロがどのように動作するのか、そしてそれらがなぜ有用なのかについての詳細な説明が必要な場合は、手をつけてください** Steve Rabinの_Game Programming Gems_ – Louen