C++ でのコード分析
JetBrains Rider のコード解析の主な機能は、C++ でもサポートされています。これらの機能の詳細については、コード解析の該当するトピックを参照してください。このセクションのサブジェクトでは、フィーチャマトリックスを見つけて、C++ で正確にサポートされているものを確認することもできます。
このトピックでは、C++ でコード解析機能を使用する例をいくつか見てみましょう。
デフォルトでは、コードインスペクション、クイックフィックス、コンテキストアクションはすべてのソリューションファイルで使用できます。必要に応じて、JetBrains Rider 設定 Ctrl+Alt+S の ページにあるソリューション外部のファイルでインスペクション、クイックフィックス、コンテキストアクションを有効にするチェックボックスを使用して、ソリューションから参照される外部ファイルでこれらの機能を有効にすることができます。
コードインスペクション
JetBrains Rider の静的コード分析は、C++ ファイル内のほとんどのコンパイラーエラーと一部のコンパイラー警告を検出します。
さらに、実行時に見つかる他のコードの問題も検出します。例: コンストラクターで仮想メソッドを使用すると、この StackOverflow の質問(英語)で説明したように予期しない動作が発生します。JetBrains Rider は、コンパイルする前にこの問題を指摘しています。
![JetBrains Rider 警告: コンストラクターの仮想メソッド JetBrains Rider warning. virtual method in constructor](https://resources.jetbrains.com/help/img/rider/2024.1/cpp_virtual_in_constructor.png)
分析は、コードインスペクションを現在の文書または指定された範囲に適用することによって実行されます。
![コードインスペクションの結果、UE プロジェクト Code inspection results in an UE project](https://resources.jetbrains.com/help/img/rider/2024.1/cpp_inspection_results.png)
インスペクション JetBrains Rider が提供するコードの種類を調べるには、JetBrains Rider C++ コードの完全なリストインスペクションを調べましょう。
コードインスペクションの詳細については、「コードインスペクション設定を構成する」を参照してください。
特定のインスペクションをすばやくオフにするか、すべてのインスペクションを非表示にするには、インスペクションコンテキストメニューを使用します。
![C++ でインスペクションを無効にする Disable inspections in C++](https://resources.jetbrains.com/help/img/rider/2024.1/cpp_disable_inspections.png)
JetBrains Rider 固有の属性を使用して一部のインスペクションを抑制することもできます。詳細については、属性を使用してインスペクションを調整するセクションを参照してください。
クイックフィックス
クイックフィックスを使用すると、コードインスペクションで見つかったコードの問題のほとんどを自動的に解決することができます。コードの問題に対して 1 つ以上のクイックフィックスが利用可能な場合は、キャレットがハイライトされたコード上にあるときに対応するアクションインジケータが表示されます。目的の修正を確認して適用するには、Alt+Enter を押します。
JetBrains Rider は、C++ に 290 を超えるクイックフィックスを提供します。ここではいくつかの例を示します。
不足している #include ディレクティブを追加する
標準ライブラリまたはソリューションの他の場所で定義されているシンボルを使用する場合、JetBrains Rider は、欠落している #include
ディレクティブを自動的に追加できます。
![JetBrains Rider: 欠落している C++ インクルードを自動的に追加できます JetBrains Rider: helps adding missing C++ includes automatically](https://resources.jetbrains.com/help/img/rider/2024.1/cpp_import.png)
JetBrains Rider 設定 Ctrl+Alt+S のインポートアクションのポップアップを表示するチェックボックスを使用して、ポップアップを無効にすることができます。
ページにあるチェックボックスが選択されていない場合、Alt+Enter を押すと、対応するアクションがアクションリストで使用可能になります。
前方宣言を追加する
JetBrains Rider は、未解決のシンボルの前方宣言も生成できます。
![JetBrains Rider: 前方宣言のクイックフィックスを追加 JetBrains Rider: Add forward declaration quick-fix](https://resources.jetbrains.com/help/img/rider/2024.1/cpp_add_forward_declaration_fix.png)
[[maybe_unused]] を追加
[[maybe_unused]]
属性を追加して、未使用の名前またはエンティティに関するコンパイラーからの警告を回避できます。キャレットが未使用のエンティティ上にある場合、次のクイックフィックスが利用可能になります:
![Add [[maybe_unused]]](https://resources.jetbrains.com/help/img/rider/2024.1/maybe_unused_attr.png)
また、別のコンテキストアクションは、UNREFERENCED_PARAMETER
および Q_UNUSED
の使用を [[maybe_unused]]
属性に置き換えるのに役立ちます。
![add [[maybe_unused]]](https://resources.jetbrains.com/help/img/rider/2024.1/unreferenced_parameter.png)
キャプチャーリストに追加
ローカル変数がラムダ本体の内部で使用されているが、このラムダによってキャプチャーされていない場合、JetBrains Rider はキャプチャーリストを更新するためのクイックフィックスを提案します。値または参照によって変数または this
をキャプチャーするか、使用されているすべての自動変数を暗黙的にキャプチャーできます。
![JetBrains Rider C++: quick-fix to update the capture list](https://resources.jetbrains.com/help/img/rider/2024.1/capture_lambda.png)
戻り値の型を変更する
関数の戻り値の型が実際に返す値と一致しない場合、JetBrains Rider を使用すると、戻り値の型をすばやく修正できます。
![JetBrains Rider は変数やフィールドの種類を修正できます JetBrains Rider helps fixing types of variables and fields](https://resources.jetbrains.com/help/img/rider/2024.1/cpp_change_return_type_fix.png)
変数型の変更
変数またはフィールドの指定された型が割り当てられた値と一致しない場合、JetBrains Rider は宣言で正しい型を使用するためのクイックフィックスを提供します。
![JetBrains Rider は変数やフィールドの種類を修正できます JetBrains Rider helps fixing types of variables and fields](https://resources.jetbrains.com/help/img/rider/2024.1/cpp_change_var_type_fix.png)
宣言を作成する
C++ ファイルのメンバー関数のヘッダーファイルに宣言がない場合、JetBrains Rider は実装のシグネチャーに従って欠落している宣言を作成できます。
![C++ クラスメンバーの宣言を生成する Generating declaration for C++ class member](https://resources.jetbrains.com/help/img/rider/2024.1/cpp_qf_create_declaration.png)
使用箇所から作成
宣言されていないシンボルを使用する場合、JetBrains Rider は、使用箇所に基づいてシンボルを作成するための 1 つ以上のクイックフィックスを提案します。
![用途から C++ 項目を生成 Generating C++ field from usage](https://resources.jetbrains.com/help/img/rider/2024.1/cpp_generate_from_usage.png)
メンバーを初期化する
JetBrains Rider が初期化されていない型メンバーを検出した場合は、1 回の修正ですべてのメンバーを初期化することをお勧めします。この修正プログラムのサブメニューを使用して、特定のメンバーの初期化を生成することもできます。
![JetBrains Rider C++: メンバーを初期化するためのクイックフィックス JetBrains Rider C++: quick-fix to initialize members](https://resources.jetbrains.com/help/img/rider/2024.1/cpp_fix_initialize_members.png)
変数の初期化
JetBrains Rider は、初期化されていない変数を検出し、デフォルト値で初期化できます。
![JetBrains Rider は C++ の変数を初期化できます JetBrains Rider helps initialize variables in C++](https://resources.jetbrains.com/help/img/rider/2024.1/cpp_init_var.png)
未使用の #include ディレクティブを削除する
未使用の #include
はすべてハイライト表示され、クイックフィックスで簡単に削除できます:
![未使用の #include ディレクティブを削除する Removing unused #include directives](https://resources.jetbrains.com/help/img/rider/2024.1/cpp_remove_include.png)
未使用のラムダキャプチャーを削除する
ローカル変数がラムダによってキャプチャーされてもラムダ本体内で使用されない場合、JetBrains Rider は通知し、未使用のキャプチャーを削除するように提案します。
![未使用のラムダキャプチャーを削除する Remove unused lambda capture](https://resources.jetbrains.com/help/img/rider/2024.1/inspection_unused_lambda.png)
ドット(.)を矢印(- >)に置き換えます。逆も同様です
ドット .
演算子が誤ってポインターに適用された場合、JetBrains Rider はそれを矢印 ->
演算子に置き換えるのに役立ちます。
![JetBrains Rider はドット演算子を矢印に置き換えるのに役立ちます JetBrains Rider helps replacing the dot operator with arrow](https://resources.jetbrains.com/help/img/rider/2024.1/cpp_qf_dot_to_arrow.png)
逆のクイックフィックスも利用できます:
![JetBrains Rider は矢印演算子をドットに置き換えるのに役立ちます JetBrains Rider helps replacing the arrow operator with the dot](https://resources.jetbrains.com/help/img/rider/2024.1/cpp_qf_arrow_to_dot.png)
ラムダで明示的なテンプレートパラメーターを使用する
JetBrains Rider は、ラムダが新しい C++20 テンプレート構文を使用するように書き換えられる時期を検出します。
![Use explicit template parameters in lambda](https://resources.jetbrains.com/help/img/rider/2024.1/explicit_template.png)
パラメーターの型が右辺値参照の場合、その型を直接 std::forward
に渡すことができます。この場合、使い慣れた完全な転送構文を使用できます。
![perfect forwarding syntax](https://resources.jetbrains.com/help/img/rider/2024.1/perfect_forwarding.png)
static_cast を使用
JetBrains Rider は、static_cast
を好むべきケースを検出し、コードの更新を支援します。
C++ キャストの代わりに使用される関数型のキャスト:
void*
にキャストするときに、static_cast
の代わりにreinterpret_cast
が使用されます。
属性を使用してインスペクションを調整する
JetBrains Rider 固有の属性をソースコードのシンボルに追加して、JetBrains Rider がソリューションをより高い精度とインサイトで分析できるようにすることができます。JetBrains Rider では、カスタム属性 [[jetbrains::format]]
、[[jetbrains::guard]]
、[jetbrains::pass_by_value]]
、[[jetbrains::has_side_effects]]
を使用できます。
[[jetbrains::format]]
属性を使用すると、カスタム printf
-like 関数の形式インスペクションを有効にすることができ、[[gnu::format]]
と同様に機能します。
![[[jetbrains::format]] [[jetbrains::format]]](https://resources.jetbrains.com/help/img/rider/2024.1/format_attribute.png)
[[jetbrains::pass_by_value]]
属性を使用すると、「定数参照による値の受け渡し」インスペクションを抑制できます。コメントでインスペクションを無効にする代わりに抑制属性を使用するのはなぜですか ? 特定のクラスまたは構造体に対する警告を表示したくない場合は、いつでも Alt+Enter メニューから を選択して、現在の行またはファイルにインスペクションを抑制するコメントを追加できます。次に、すべてのクラスの使用に対しても抑制コメントを追加する必要があります。このような場合、クラス宣言で抑制属性を 1 回指定する方がはるかに簡単です。
![[[jetbrains::pass_by_value]] [[jetbrains::pass_by_value]]](https://resources.jetbrains.com/help/img/rider/2024.1/pass_by_value_attribute.png)
[[jetbrains::guard]]
属性を使用すると、「ローカル変数は使用されない」インスペクションを抑制できます。クラスにこの属性をマークすると、そのクラスがコンストラクターで重要な作業を実行することを JetBrains Rider に知らせます。
[[jetbrains::has_side_effects]]
属性を使用すると、operator=
に副作用があるとしてマークを付け、「割り当てられた値は使用されない」インスペクションを抑制できます。
JetBrains Rider 属性を外部ライブラリからライブラリクラスに適用する必要がある場合は、代わりに前方クラス宣言でその属性を使用できます: class [[jetbrains::pass_by_value]] my_class;
コンパイラーが不明な属性に関する警告を表示した場合は、__JETBRAINS_IDE__
マクロまたは __RESHARPER__
マクロを使用して宣言を保護できます。
JetBrains Rider に特定のコードを無視させる
ソリューションのコードの一部をコード分析、ナビゲーション、その他の機能から除外するために、JetBrains Rider では特定のファイル、フォルダー、ファイルマスクをさまざまな方法で無視するを使用できます。
関連ページ:
![](https://pleiades.io/icons/rider.png)
コード解析
JetBrains Rider は、エディター内の単一のステートメントから、ソリューション全体のアーキテクチャまで、さまざまなレベルのコードを分析できます。コードの問題を見つける:JetBrains Rider は、C#、VB.NET、XAML、XML、ASP.NET、ASP.NET MVC、Razor、JavaScript、TypeScript、HTML、CSS、ResX で 2500 を超えるコードインスペクションを適用することにより、静的コード分析(コードインスペクションとも呼ばれます)...
![](https://resources.jetbrains.com/help/img/rider/2024.1/cpp_completion_11.png)
C++ のコーディングアシスタンス
JetBrains Rider のコーディング支援機能のほとんどは、C++ でもサポートされています。これらの機能の詳細については、コーディング支援セクションの対応するトピックを参照してください。このトピックでは、C++ のコーディング支援機能の使用例をいくつか見つけることができます。デフォルトでは、コードインスペクション、クイックフィックス、コンテキストアクションはすべてのソリューションファイルで使用できます。必要に応じて、JetBrains Rider 設定のページにあるソリューション外部...
![](https://resources.jetbrains.com/help/img/rider/2024.1/Code_Analysis__Code_Highlighting__Warnings__2.png)
コードインスペクション
JetBrains Rider は、サポートされているすべての言語で 2500 を超えるコードインスペクションを提供します。これらのインスペクションは、開いているすべてのファイルの設計時にコードの問題を検出してハイライトするために適用されます。また、特定の範囲内のすべてのコードの問題を検出するために適用されます。インスペクション JetBrains Rider が提供するコードの種類を調べるには、異なる言語の JetBrains Rider コードインスペクションの全リストをご覧ください。コードイ...
![](https://resources.jetbrains.com/help/img/rider/2024.1/code_analysis_sample.png)
設計時にコードの問題を分析する
JetBrains Rider は、エディターでコードファイルを開くとすぐに、コードファイルが閉じられるまで分析を開始します。検出されたすべてのコードの問題は、重大度に応じてエディターでハイライトされます。問題のマップは、エディターウィンドウの右側のエラーストライプにも表示されます。ここでは、ファイルのステータスを即座に確認し、マークをクリックして特定のコードの問題に移動できます。デザインタイムインスペクションの機能:デザイン時のインスペクション機能は、Rider エディターの基本機能への主要...
![](https://resources.jetbrains.com/help/img/rider/2024.1/inspection_by_name.png)
特定の範囲でコードの問題を見つける
設計時コードインスペクションは、エディターでコーディングしたり、特定のファイルを見直したりするときに役立ちます。しかし、JetBrains Rider では、ソリューション全体または狭い範囲でスタティックコード分析を実行し、結果をフレンドリーな視点で調べることもできます。開始コードインスペクション:ソリューション、プロジェクト、カスタムスコープのコードをインスペクションするソリューションワイドのインスペクションの結果(たとえば、未使用のパブリックメンバー)をレポートに含めるかどうかを決定する
![](https://resources.jetbrains.com/help/img/rider/2024.1/code_analysis_target_framework.png)
コードインスペクション設定を構成する
設計時コードインスペクションを構成する:デフォルトでは、JetBrains Rider はサポートされている言語に対応するすべてのファイルで設計時コードインスペクションを有効にします。必要に応じて、無効にすることができます。設計時コードインスペクションが有効かどうかにかかわらず、コードインスペクションを特定の範囲でいつでも実行できます。「鉛筆」ウィジェットを使用して、エディターから直接インスペクション設定をすばやく調整するか、設定でより詳細な構成を行うことができます。を押すか、メニューから(W...