CLion 2023.3 ヘルプ

C++ のサポート

CLion には、組み込みエンジンと Clangd(英語) ベースエンジンの 2 つの言語エンジンが組み込まれており、どちらも並行して動作します。

Clangd ベースのエンジンは、エディターに表示される警告とエラーを検出し、クイックフィックスを提供し、特定のナビゲーションアクション、ハイライト、完了を実行します。CLion 独自のエンジンは、リファクタリングなどの他のコードインサイト機能に使用されます。Clangd 設定で Clangd 機能の範囲を調整できます。

次の表は、2 つのエンジンがデフォルトで CLion 機能を処理する方法を示しています。

IDE 機能

言語エンジン

構文のハイライト

Clangd

エラー / 警告とクイックフィックス

Clangd

補完

Clangd のみ、両方、組み込みのみ *

フォーマット: ClangFormat

Clangd

フォーマット: コードスタイル設定

内蔵エンジン

ナビゲーション

** の両方

パラメーターヒント

Clangd

リファクタリング

内蔵エンジン

* - Clangd 設定で選択したとおり。

** - 両方のエンジンが使用されます。Clangd は、キャレット、宣言に移動定義へジャンプクイックドキュメントクイック定義使用箇所の検索での参照のハイライトに役立ちます。

言語標準への準拠

CLion は、C++11C++14C++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

部分的なサポート

  • Clangd でサポートされる機能の解析とリファクタリング

  • 概念(Clangd に基づく)の拡張サポート : カスタムハイライト、コード補完、専用インスペクション、名前変更リファクタリング、定義へ移動や使用箇所の検索などのナビゲーションアクション。

  • モジュールの初期サポート (Clangd に基づく): キーワードのハイライト、補完、宣言と定義の間のナビゲーション、モジュール内の使用箇所の検索とリファクタリング、およびいくつかのクロスモジュールリファクタリング。

C++17

Clang 5 以降の完全サポート

部分的なサポート

C++14

フルサポート

フルサポート

C++11

フルサポート

フルサポート

C++ 2b

言語機能

Clang サポート状況 (英語)

エラーのハイライトとクイックフィックス

補完

ナビゲーション

解析

リファクタリング

リテラルサフィックス uzz for size_tssize_t (P0330R8(英語))

部分的に

-

-

-

-

-

ラムダの () をすべての場合でオプションにします (P1102R2(英語))

部分的に

-

-

-

-

-

より単純な暗黙の移動 (P2266R1(英語))

部分的に

-

-

-

-

-

if consteval (P1938R3(英語))

-

-

-

-

-

-

重複する属性を許可する (P2556R1(英語))

一部

-

-

-

-

-

コンテキスト変換を bool に絞り込む (P1401R5(英語))

一部

-

-

-

-

-

ラインスプライシングの前に空白をトリミングする (P2223R2(英語))

+

Clangd

Clangd

混合、Clangd に依存

-

-

宣言順序のレイアウトを義務付ける (P1874R4(英語))

+

Clangd

Clangd

混合、Clangd に依存

-

-

UAX31 を使用した C++ 識別子構文 (P1949R7(英語))

一部

-

-

-

-

-

混合文字列リテラルの連結 (P2201R1(英語))

+

Clangd

Clangd

混合、Clangd に依存

-

-

C++20

言語機能

Clang サポート状況 (英語)

エラーのハイライトとクイックフィックス

補完

ナビゲーション

解析

リファクタリング

ビットフィールドのデフォルトメンバー初期化子 (P0683R1(英語))

+

Clangd

Clangd

混合、Clangd に依存

-

-

const& - メンバーへの修飾ポインター (P0704R1(英語))

+

Clangd

Clangd

混合、Clangd に依存

-

-

ラムダキャプチャーを許可 [=, this] (P0409R2(英語))

+

Clangd

Clangd

混合、Clangd に依存

-

-

プリプロセッサーのコンマ省略のための __VA_OPT__ (P0306R4(英語) , P1042R1(英語))

+

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 に依存

-

-

const がデフォルトのコピーコンストラクターと一致しません (P0641R2(英語))

+

Clangd

Clangd

混合、Clangd に依存

-

-

一貫した比較 (operator<=>): P0515R3(英語) P0905R1(英語) P1120R0(英語) P1185R2(英語) P1186R3(英語) P1630R1(英語) P1946R0(英語) P1959R0(英語)

+

Clangd

Clangd

混合

内蔵エンジン

-

一貫した比較 (operator<=>): P2002R1(英語)

一部

-

-

-

-

-

一貫した比較 (operator<=>): P2085R0(英語)

-

-

-

-

-

-

専門分野のアクセスチェック (P0692R1(英語))

+

Clangd

Clangd

混合、Clangd に依存

-

-

デフォルトの構築可能で割り当て可能なステートレスラムダ (P0624R2(英語))

+

Clangd

Clangd

混合、Clangd に依存

-

-

評価されていないコンテキストのラムダ (P0315R4(英語))

部分的に (temp.deduct/9 を実装していません)

Clangd

Clangd

混合、Clangd に依存

-

-

[[no_unique_address]] 属性 (P0840R2(英語))

+

Clangd

Clangd

混合

内蔵エンジン

-

[[likely]] および [[unlikely]] 属性 (P0479R5(英語))

+

内蔵エンジン

内蔵エンジン

内蔵エンジン

内蔵エンジン

-

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 に依存

-

-

explicit(bool) (P0892R2(英語))

+

Clangd

Clangd

混合

内蔵エンジン

内蔵エンジン

符号付き整数は 2 の補数です (P1236R1(英語))

+

Clangd

Clangd

混合、Clangd に依存

-

-

char8_t (P0482R6(英語))

+

Clangd

Clangd

混合

内蔵エンジン

-

即時機能 (consteval) (P1073R3(英語) , P1937R2(英語))

+

Clangd

Clangd

混合

内蔵エンジン

-

std::is_constant_evaluated (P0595R2(英語))

+

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

混合

内蔵エンジン

-

a[b,c] を廃止 (P1161R3(英語))

+

Clangd

Clangd

混合、Clangd に依存

-

-

問題のある volatile の使用を廃止する (P1152R4(英語))

+

Clangd

Clangd

混合、Clangd に依存

-

-

[[nodiscard("with reason")]] (P1301R4(英語))

+

Clangd

Clangd

混合、Clangd に依存

-

-

using enum (P1099R5(英語))

+

Clangd

Clangd

混合、Clangd に依存

-

-

集計のクラステンプレート引数の控除 (P1816R0(英語) , P2082R1(英語))

-

-

-

-

-

-

エイリアステンプレートのクラステンプレート引数の控除 (P1814R0(英語))

-

-

-

-

-

-

未知の境界の配列への変換を許可する (P0388R4(英語))

-

-

-

-

-

-

constinit (P1143R2(英語))

+

Clangd

Clangd

混合

内蔵エンジン

-

擬似デストラクタがオブジェクトのライフタイムを終了 P0593R6(英語) (DR(英語))

+ (Clang 11)

-

-

-

-

-

より暗黙的な動き P1825R0(英語) (DR(英語))

+

Clangd

Clangd

混合、Clangd に依存

-

-

C++17

言語機能

エラーのハイライトとクイックフィックス

補完

ナビゲーション

リファクタリング

自動非型パラメーター

Clangd

Clangd

混合、Clangd に依存

-

UTF-8 文字リテラル

Clangd

Clangd

混合、Clangd に依存

-

* this のラムダキャプチャー

Clangd

Clangd

混合、Clangd に依存

-

[[nodiscard]] 属性

Clangd

Clangd

混合、Clangd に依存

-

[[fallthrough]] 属性

Clangd

Clangd

混合、Clangd に依存

-

[[maybe_unused]] 属性

Clangd

Clangd

混合、Clangd に依存

-

関数タイプの一部としての「noexcept」

Clangd

Clangd

混合、Clangd に依存

-

引数が 1 つの静的アサート

Clangd

Clangd

混合、Clangd に依存

-

if constexpr

Clangd

Clangd

混合、Clangd に依存

-

変数のインライン化

Clangd

Clangd

混合、Clangd に依存

-

braced-init-list からの自動推論の新しいルール

Clangd

Clangd

混合、Clangd に依存

-

constexpr lambdas

Clangd

Clangd

混合、Clangd に依存

-

ネストされた名前空間の定義

Clangd

Clangd のみ、両方、組み込みのみ *

混合 **

組み込みエンジン

式を折りたたむ

Clangd

Clangd のみ、両方、組み込みのみ *

混合 **

-

クラステンプレート引数の推論

Clangd

Clangd のみ、両方、組み込みのみ *

混合 **

-

__has_include

Clangd

Clangd

-

-

* - Clangd 設定で選択したとおり。

** - 両方のエンジンが使用されます。Clangd は、キャレット、宣言に移動定義へジャンプクイックドキュメントクイック定義使用箇所の検索での参照のハイライトに役立ちます。

C++ コードインスペクション

CLion は、設定 | エディター | インスペクション | C/C++ で構成可能なインスペクションのセットを使用して、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 は、コードの読みやすさを向上させるために、エディターでコードにインライン表示するパラメーターヒントは、関数のシグネチャーを調べることなく(パラメーター情報ツールチップを使って、または関数の宣言に移動することによって)関数呼び出しを理解できます。このビデオを見て、実際の例のパラメーターヒントと型ヒントについて学習してください。引数リテラルおよび複数のオペランドを持つ式のパラメーターヒントが表示されます: 関数呼び出し、ラ...