C++ のサポート
CLion には、組み込みエンジンと Clangd(英語) ベースエンジンの 2 つの言語エンジンが組み込まれており、どちらも並行して動作します。
Clangd ベースのエンジンは、エディターに表示される警告とエラーを検出し、クイックフィックスを提供し、特定のナビゲーションアクション、ハイライト、完了を実行します。CLion 独自のエンジンは、リファクタリングなどの他のコードインサイト機能に使用されます。Clangd 設定で Clangd 機能の範囲を調整できます。
次の表は、2 つのエンジンがデフォルトで CLion 機能を処理する方法を示しています。
IDE 機能 | 言語エンジン |
|---|---|
構文のハイライト | Clangd |
エラー / 警告とクイックフィックス | Clangd |
Clangd のみ、両方、組み込みのみ * | |
Clangd | |
内蔵エンジン | |
** の両方 | |
Clangd | |
内蔵エンジン |
* - Clangd 設定で選択したとおり。
** - 両方のエンジンが使用されます。Clangd は、キャレット、宣言に移動、定義へジャンプ、クイックドキュメント、クイック定義、使用箇所の検索での参照のハイライトに役立ちます。
言語標準への準拠
CLion は、C++11、C++14、C++17、部分的に C++20 を完全にサポートします。
C++11 および C++14 のサポートは、組み込みエンジンによって提供されます。C++17 機能の一部もサポートしていますが、残りの機能は Clangd によって提供されます。
C++20 標準のサポートは、解析とリファクタリング (組み込みエンジンによって処理される) を除き、Clangd に依存します。さらに、内蔵エンジンにより、Clangd の C++20 の概念サポートが拡張されます (詳細については、専用記事を参照してください)。
以下の表に、標準サポートのステータスの概要と、C++20 および C + 17 サポートの詳細を示します。
標準 | Clangd (CXX_status(英語)) | 内蔵エンジン |
|---|---|---|
C++20、C++ 2b | 部分的なサポート |
|
C++17 | Clang 5 以降の完全サポート | 部分的なサポート |
C++14 | フルサポート | フルサポート |
C++11 | フルサポート | フルサポート |
C++ 2b
言語機能 | エラーのハイライトとクイックフィックス | 補完 | ナビゲーション | 解析 | リファクタリング | |
|---|---|---|---|---|---|---|
リテラル接尾辞 | 部分的に | - | - | - | - | - |
ラムダの | 部分的に | - | - | - | - | - |
より単純な暗黙の移動 (P2266R1(英語)) | 部分的に | - | - | - | - | - |
| - | - | - | - | - | - |
重複する属性を許可する (P2556R1(英語)) | 一部 | - | - | - | - | - |
コンテキスト変換を bool に絞り込む (P1401R5(英語)) | 一部 | - | - | - | - | - |
ラインスプライシングの前に空白をトリミングする (P2223R2(英語)) | + | Clangd | Clangd | 混合、Clangd に依存 | - | - |
宣言順序のレイアウトを義務付ける (P1874R4(英語)) | + | Clangd | Clangd | 混合、Clangd に依存 | - | - |
UAX31 を使用した C++ 識別子構文 (P1949R7(英語)) | 一部 | - | - | - | - | - |
混合文字列リテラルの連結 (P2201R1(英語)) | + | Clangd | Clangd | 混合、Clangd に依存 | - | - |
C++20
言語機能 | エラーのハイライトとクイックフィックス | 補完 | ナビゲーション | 解析 | リファクタリング | |
|---|---|---|---|---|---|---|
ビットフィールドのデフォルトメンバー初期化子 (P0683R1(英語)) | + | Clangd | Clangd | 混合、Clangd に依存 | - | - |
| + | Clangd | Clangd | 混合、Clangd に依存 | - | - |
ラムダキャプチャーを許可 | + | Clangd | Clangd | 混合、Clangd に依存 | - | - |
プリプロセッサーのコンマ省略のための | + | Clangd | Clangd | 混合、Clangd に依存 | - | - |
指定イニシャライザー (P0329R4(英語)) | + | Clangd | Clangd | 混合、Clangd に依存 | - | - |
一般的なラムダのテンプレートパラメーターリスト (P0428R2(英語)) | + | Clangd | Clangd | 混合 | 内蔵エンジン | - |
概念: P0734R0(英語) P0857R0(英語) P1084R2(英語) P1141R2(英語) P1616R1(英語) P1452R2(英語) | + | Clangd | Clangd | 混合 | 内蔵エンジン | 組み込みエンジン、名前変更のみ |
概念: P0848R3(英語) P1972R0(英語) P1980R0(英語) P2103R0(英語) P2092R0(英語) P2113R0(英語) | - | - | - | - | - | - |
初期化子を使用した範囲ベースの for ステートメント (P0614R1(英語)) | + | Clangd | Clangd | 混合 | 内蔵エンジン | 内蔵エンジン |
表示されない ADL および関数テンプレート (P0846R0(英語)) | + | Clangd | Clangd | 混合、Clangd に依存 | - | - |
| + | Clangd | Clangd | 混合、Clangd に依存 | - | - |
一貫した比較 ( | + | Clangd | Clangd | 混合 | 内蔵エンジン | - |
一貫した比較 ( | 一部 | - | - | - | - | - |
一貫した比較 ( | - | - | - | - | - | - |
専門分野のアクセスチェック (P0692R1(英語)) | + | Clangd | Clangd | 混合、Clangd に依存 | - | - |
デフォルトの構築可能で割り当て可能なステートレスラムダ (P0624R2(英語)) | + | Clangd | Clangd | 混合、Clangd に依存 | - | - |
評価されていないコンテキストのラムダ (P0315R4(英語)) | 部分的に ( | Clangd | Clangd | 混合、Clangd に依存 | - | - |
| + | Clangd | Clangd | 混合 | 内蔵エンジン | - |
| + | 内蔵エンジン | 内蔵エンジン | 内蔵エンジン | 内蔵エンジン | - |
typename は他のコンテキストではオプション (P0634R3(英語)) | - | - | - | - | - | - |
ラムダ初期キャプチャーのパック拡張 (P0780R2(英語)) | + | Clangd | Clangd | 混合 | 内蔵エンジン | - |
非型テンプレートパラメーターとしてのクラス型(P0732R2(英語)、P1907R1(英語) | 一部 | Clangd | Clang | - | - | - |
オペレーター削除の破棄 (P0722R3(英語)) | + | Clangd | Clangd | 混合、Clangd に依存 | - | - |
constexpr 制限の緩和 (P1064R0(英語) , P1002R1(英語) , P1327R1(英語) , P1330R0(英語) , P1331R2(英語) , P1668R1(英語) , P0784R7(英語)) | + | Clangd | Clangd | 混合、Clangd に依存 | - | - |
ユーザーが宣言したコンストラクターで集計を禁止する (P1008R1(英語)) | + | Clangd | Clangd | 混合、Clangd に依存 | - | - |
機能テストマクロ (P0941R2(英語)) | Clangd | Clangd | 混合、Clangd に依存 | - | - | |
| + | Clangd | Clangd | 混合 | 内蔵エンジン | 内蔵エンジン |
符号付き整数は 2 の補数です (P1236R1(英語)) | + | Clangd | Clangd | 混合、Clangd に依存 | - | - |
| + | Clangd | Clangd | 混合 | 内蔵エンジン | - |
即時機能 ( | + | Clangd | Clangd | 混合 | 内蔵エンジン | - |
| + | Clangd | Clangd | 混合、Clangd に依存 | - | - |
ネストされたインライン名前空間 (P1094R2(英語)) | + | Clangd | Clangd | 混合、Clangd に依存 | - | - |
構造化バインディング拡張 (P1091R3(英語) , P1381R1(英語)) | 部分的に | - | - | - | - | - |
より強力な Unicode 要件 (P1041R4(英語) , P1139R2(英語)) | + | Clangd | Clangd | 混合、Clangd に依存 | - | - |
集計の括弧で囲まれた初期化 (P0960R3(英語) , P1975R0(英語)) | - | - | - | - | - | - |
モジュール: P1766R1(英語) (DR(英語)), P1779R3(英語) | + | Clangd | Clangd | Clangd | Clangd | Clangd |
モジュール: (P1874R1(英語)), P2115R0(英語) , P1103R3(英語) , P1815R2(英語) | 部分的に | - | - | - | - | - |
モジュール: P1979R0(英語) , P1857R3(英語) , P1811R0(英語) , P1703R1(英語) | - | - | - | - | - | - |
コルーチン (P0912R5(英語)) | 部分的に | Clangd | Clangd | 混合 | 内蔵エンジン | - |
| + | Clangd | Clangd | 混合、Clangd に依存 | - | - |
問題のある | + | Clangd | Clangd | 混合、Clangd に依存 | - | - |
| + | Clangd | Clangd | 混合、Clangd に依存 | - | - |
| + | Clangd | Clangd | 混合、Clangd に依存 | - | - |
集計のクラステンプレート引数の控除 (P1816R0(英語) , P2082R1(英語)) | - | - | - | - | - | - |
エイリアステンプレートのクラステンプレート引数の控除 (P1814R0(英語)) | - | - | - | - | - | - |
未知の境界の配列への変換を許可する (P0388R4(英語)) | - | - | - | - | - | - |
| + | Clangd | Clangd | 混合 | 内蔵エンジン | - |
擬似デストラクタがオブジェクトのライフタイムを終了 P0593R6(英語) (DR(英語)) | + (Clang 11) | - | - | - | - | - |
より暗黙的な動き P1825R0(英語) (DR(英語)) | + | Clangd | Clangd | 混合、Clangd に依存 | - | - |
C++17
言語機能 | エラーのハイライトとクイックフィックス | 補完 | ナビゲーション | リファクタリング |
|---|---|---|---|---|
Clangd | Clangd | 混合、Clangd に依存 | - | |
Clangd | Clangd | 混合、Clangd に依存 | - | |
Clangd | Clangd | 混合、Clangd に依存 | - | |
Clangd | Clangd | 混合、Clangd に依存 | - | |
Clangd | Clangd | 混合、Clangd に依存 | - | |
Clangd | Clangd | 混合、Clangd に依存 | - | |
Clangd | Clangd | 混合、Clangd に依存 | - | |
Clangd | Clangd | 混合、Clangd に依存 | - | |
Clangd | Clangd | 混合、Clangd に依存 | - | |
Clangd | Clangd | 混合、Clangd に依存 | - | |
Clangd | Clangd | 混合、Clangd に依存 | - | |
Clangd | Clangd | 混合、Clangd に依存 | - | |
ネストされた名前空間の定義 | Clangd | Clangd のみ、両方、組み込みのみ * | 混合 ** | 組み込みエンジン |
Clangd | Clangd のみ、両方、組み込みのみ * | 混合 ** | - | |
Clangd | Clangd のみ、両方、組み込みのみ * | 混合 ** | - | |
Clangd | Clangd | - | - |
* - Clangd 設定で選択したとおり。
** - 両方のエンジンが使用されます。Clangd は、キャレット、宣言に移動、定義へジャンプ、クイックドキュメント、クイック定義、使用箇所の検索での参照のハイライトに役立ちます。
C++ コードインスペクション
CLion は、 で構成可能なインスペクションのセットを使用して、C/C++ コードの静的分析を実行します。一部の C/C++ インスペクションは Clangd によって提供されますが、その他は組み込みエンジンの一部として機能します。
次の表は、特定のインスペクションまたは一連のインスペクションに使用されるエンジンを示しています。Objective-C チェックは、同様の Clang 診断のチェックを除いてリストされていないことに注意してください。
インスペクション | 提供 |
|---|---|
Clangd | |
組み込みエンジン | |
一般 : 引数選択の欠陥 | Clangd |
一般: Clang-tidy | Clangd または組み込み、選択済み |
一般: 制約のない変数型 | 内蔵エンジン (Clangd に基づく) |
一般: 空の宣言またはステートメント | Clangd |
一般: フォーマット指定子 | C/C++ の場合、このチェックは Clang の -Wformat(英語) 診断によってカバーされます。 |
一般: 条件式の | C/C++ の場合、このチェックは Clang の -Wparentheses(英語) 診断によってカバーされます。 |
一般: 一貫性のないネーミング | 内蔵エンジン |
一般: 欠落した switch case | C/C++ の場合、このチェックは Clang の -Wswitch(英語) 診断によってカバーされます。 |
一般: 簡略化可能なステートメント | Clangd |
一般: コンストラクターまたはデストラクターからの仮想呼び出し | Clangd |
内蔵エンジン (Clangd に基づく) | |
未使用コード: 未使用の式の結果 | C/C++ の場合、このチェックは Clangd の DFA によってカバーされます。 |
未使用コード: 未使用のグローバル宣言 | Clangd |
未使用コード: 未使用の include ディレクティブ | Clangd |
未使用コード: 未使用のマクロ | Clangd |
未使用コード: 未使用の構造体 | Clangd |
未使用コード: 未使用のテンプレートパラメーター | Clangd |
未使用コード: 未使用の型エイリアス | Clangd |
関連ページ:
Clangd
Clangd は、追加の C++ 言語エンジンとして CLion で使用されます (C++ サポートを参照)。このダイアログでは、特定の設定を構成し、エンジンに使用されている LLVM Clang リビジョンを確認できます。clangd からのエラーと警告を表示するこのチェックボックスを選択すると、CLion のコードエラーの代わりにエディターに表示される Clangd の警告とエラーがオンになります。チェックボックスのフィールドを使用して、有効にしたい Clangd からの警告のリストを指定し...
コード補完
このセクションでは、コーディングプロセスのスピードアップを可能にするコンテキスト対応コード補完のさまざまなテクニックについて説明します。基本補完:基本コード補完は、可視性スコープ内で名前、タイプ、キーワードを補完するのに役立ちます。コード補完を呼び出すと、CLion はコンテキストを分析し、現在のキャレット位置から到達可能な選択肢を提案します (提案にはライブテンプレートも含まれます)。基本コード補完がフィールド、パラメーター、変数宣言の一部に適用されている場合、CLion は項目型に応じて可...
代替フォーマッターとしての ClangFormat
ClangFormat は、チームメンバーと IDE 間で共通のコードスタイルを維持するのに役立つ一般的なコードフォーマットツールです。それは .clang-format または _clang-format という名前の特別な YAML ファイルにフォーマット設定を保存するオプションを提供します。CLion では、組み込みコードフォーマッタの代わりに ClangFormat を使用できます。.clang 形式の設定ファイル:フォーマット規則を持つ .clang-format ファイルは、プロジェクトツリーに配置...
コードのフォーマット
CLion を使用すると、現在のコードスタイルスキームで指定した要件に従ってコードを再フォーマットできます。コードの一部、ファイル全体、ファイルのグループ、ディレクトリ、モジュールを再フォーマットできます。コードの一部または一部のファイルを再フォーマットから除外することもできます。コードフラグメントを再フォーマットするエディターで、再フォーマットしたいコードフラグメントを選択します。再フォーマットする前に、選択したコードに適用されているコードスタイル設定を確認できます。を押してコードスタイルの...
ソースコードナビゲーション
さまざまなアクションやポップアップを使用して、エディター内のコードをすばやく移動することができます。エディターウィンドウとツールウィンドウ間の移動に関する詳細情報については、エディターの基本を確認してください。キャレットで移動する後方に移動するには、を押します。前方に移動するには、を押します。最後に編集した場所に移動するには、を押します。エディターで現在のキャレット位置を見つけるには、Ctrl+M を押します。大きなファイルをスクロールしたくない場合は、このアクションが役立つかもしれません。
C/C++ のパラメーターのヒント
パラメーターヒントは、渡された引数に対する関数パラメーターの名前を示します。読みやすさを向上させるために、CLion はコード内にインラインでエディターで表示します。パラメーターヒントは、関数のシグネチャーを調べることなく(パラメーター情報ツールチップを使って、または関数の宣言に移動することによって)関数呼び出しを理解できます。このビデオを見て、実際の例のパラメーターヒントと型ヒントについて学習してください。引数リテラルおよび複数のオペランドを持つ式のパラメーターヒントが表示されます: 関数呼び...