C++ プログラミングの生産性を少し改善する Visual Studio の機能(2023)
C++ Advent Calendar 2023 および Siv3D Advent Calendar 2023 18 日目の記事です。
本記事では、Visual Studio での C++ プログラミングの生産性向上に役立つ IDE の機能を、最近のバージョンで追加された無料機能を中心に紹介します。
1. コーディング用の合字フォント
日本語環境の Visual Studio のデフォルトのフォントは MS ゴシックなので、フォントにこだわりのない人は MS ゴシックを使い続けているかもしれません。英語環境では Visual Studio 2022 から Cascadia がデフォルトのフォントになっています。
Cascadia は、Microsoft が 2019 年にリリースしたコーディング用のオープンソースフォントで、合字(リガチャ)の有無に応じて Cascadia Code と Cascadia Mono があります。合字を有効にすると特定の 2 つ以上の文字が、より洗練された 1 つのグリフで表現されます。人によって好みは分かれますが、一般にコードの可読性を向上させると考えられています。C++ のコードにおいては、!=
や >=
, <=
, ++
, <<
, >>
, ^=
, /=
, ::
, &&
, ||
, //
, ///
などの見た目が影響を受けます。
▲ Cascadia Code に収録されているおもな合字
▲ Cascadia Code(合字あり)と Cascadia Mono(合字なし)の比較アニメーション。
合字を有効にしても本来の字幅は維持される
同じコードを、MS ゴシック、以前の英語版 Visual Studio のデフォルトフォント Consolas, そして Cascadia Code で比較してみましょう。
MS ゴシック | Consolas | Cascadia Code |
---|---|---|
設定の手順
Cascadia は標準でインストールされています。メニュー > ツール > オプション > 環境 > フォントおよび色 からフォントを変更できます。
2. Doxygen スタイルのコメントの入力補助
Visual Studio 2019 16.6 から、XML コメントおよび Doxygen スタイルのコメントの記述を補助する機能が追加されました。C++ のコードにおいて ///
で始まるコメントを入力すると、例えば関数の前であれば、引数や戻り値、関数の説明を入力するためのテンプレートが自動的に挿入されます。
この機能を使うことで、プログラマはドキュメントの内容の記述に集中できるようになり、ドキュメントの品質を向上させることができます。
▲ XML コメントの補助
▲ Doxygen スタイルのコメントの補助
また、XML コメントと Doxygen スタイルのコメントどちらの内容も、ツールチップによるヒント表示に反映されるようになりました。
▲ ツールチップによるヒント表示
設定の手順
メニュー > ツール > オプション > テキストエディター > C/C++ > コードスタイル > 全般 から、XML コメントまたは Doxygen スタイルのコメントの補助を有効にできます。
3. コンパイラのメッセージの色分け
Visual Studio の拡張機能 VSColorOutput64 を使うと、コンパイラのメッセージを色分けして表示できます。例えば、エラーメッセージを赤、警告メッセージをオレンジ色で表示するように設定できます。
C++ のコードを書いていると、コンパイラのメッセージが大量に出力されることがあります。この拡張機能を使うことで、その中から重要な情報を見つけやすくなります。
▲ 色分けされたメッセージ
設定の手順
Visual Studio Marketplace または Visual Studio の拡張機能マネージャーから VSColorOutput64 をインストールします。インストール後、メニュー > ツール > オプション > VSColorOutput64 から設定画面を開き、各項目の色を変更できます。
この拡張を有効にすると、コンパイラのメッセージに作者への寄付を促すテキストが表示されるようになりますが、上記の Yes I Donated!
オプションを True
に変更すれば非表示にできます。筆者は GitHub Sponsors で作者に寄付をしたので、このオプションを True
にしています。
4. スペルチェック
Visual Studio 2022 17.5 から、コードに含まれる英単語のスペルミスを検出する機能が追加されました。ツールチップから修正候補を選択して、一括修正することもできます。
▲ スペルミスが検出された箇所に青波線が表示される
設定の手順
2023 年 2 月にリリースされた Visual Studio 2022 17.5 から標準で搭載されています。メニュー > 編集 > 詳細 > スペルチェッカーを切り替える から有効無効を切り替えられます。Visual Studio のメインツールバー上のボタンからも切り替えられます。
5. クラスや union のメモリレイアウトの可視化
Visual Studio 2022 17.8 から、class
や struct
, union
のサイズやアライメントがツールチップ上で表示されるようになりました。また、Visual Studio 2022 17.9 からは各メンバのオフセット(メモリレイアウト)を、ビジュアルで確認できるようになりました。
自分の実装したクラスや union, ビットフィールドなどが、想定したメモリレイアウトになっているかどうかを確認する際に役立ちます。また、メモリレイアウトを可視化することで、メンバの並び順やアライメントの違いが、メモリレイアウトにどのような影響を与えるかを理解することができ、C++ の教育にも役立ちます。
▲ サイズやアライメントがツールチップ上に表示される
▲ 大きい!
▲ 各メンバのオフセットをビジュアルで確認できる
メモリレイアウトの可視化の例
例 1. 他クラスをメンバに持つクラス
struct Point
{
int x, y;
};
struct Line
{
Point start, end;
};
例 2. アライメントの違い
struct Float4
{
float x, y, z, w;
};
struct alignas(16) Float4A
{
float x, y, z, w;
};
例 3. メンバの並び順の違い
struct Object1
{
short a;
int b;
short c;
double d;
};
struct Object2
{
int b;
short a;
short c;
double d;
};
例 4. ビットフィールド
struct HeightFieldPixel
{
int height : 16;
unsigned materialIndex0 : 7;
unsigned tessellationFlag : 1;
unsigned materialIndex1 : 7;
unsigned unused : 1;
};
例 5. union
union FloatUint
{
float f;
unsigned i;
};
設定の手順
ツールチップでのサイズやアライメントの表示は 2023 年 11 月にリリースされた Visual Studio 2022 17.8 から標準で有効になっています。メモリレイアウトの可視化は Visual Studio 2022 17.9 Preview から標準で有効になっていています。前述のサイズ・アライメントツールチップ上の「メモリレイアウト」をクリックすることで新しいタブに表示されます。
まとめ
本記事では、Visual Studio での C++ プログラミングの生産性向上に役立つ最近の IDE 機能を 5 つ紹介しました。いずれも無料で利用できます。ぜひ活用してみてください。
Discussion
とても役に立ちました...!特にVSColorOutput64と、まだ試してないですが"メモリレイアウトの可視化"もです
warningとerrorの見分けが大変だったので助かりました;;