Visual StudioでC/C++のコードを書いているとき、ある日突然「{」を入力しても「}」が自動挿入されなくなることがあります。ちょっとした設定変更や拡張機能が原因で起きるこの現象は、ポイントを押さえて確認すればほぼ確実に元に戻せます。本記事では、設定画面の具体的な場所からトラブルシューティングのコツまで、実務レベルで役立つ情報を整理して解説します。
Visual Studioで「{」入力時に「}」が自動挿入されない原因と全体像
Visual Studioには、自動括弧補完(Automatic brace completion)という機能があります。これは、開き括弧や引用符を入力したタイミングで、対応する閉じ括弧・閉じ引用符を自動で補完してくれる機能です。
例えば、C/C++のソースファイルで「{」を入力すると、次のような状態になるはずです。
int main()
{
│ // ← カーソルが中に入る
}
ところが、何らかの理由で自動括弧補完が無効になると、単に「{」だけが入力され、対応する「}」が自動挿入されなくなります。多くのケースでは、以下のいずれかが原因です。
- C/C++専用の自動括弧補完設定がオフになった
- テキストエディター全体の自動括弧補完設定がオフになった
- 拡張機能がエディターの挙動に干渉している
- 設定ファイル(プロファイル)が壊れた、またはリセットされた
- ファイルの種類がC/C++として認識されていない
この記事では、特に質問の多い「C/C++で波括弧だけが自動補完されない」という状況を想定しながら、順番に確認すべきポイントを整理していきます。
自動括弧補完とは?対象となる括弧・引用符を整理
まずは、Visual Studioの自動括弧補完がどのような記号に対して働くのかを整理しておきましょう。C/C++でよく使う記号に限定しても、自動補完の対象は次のようになります。
| 記号 | 自動補完のペア | よく使う場面 |
|---|---|---|
{ | { } | 関数定義、if/for/while、クラス・構造体の定義 |
( | ( ) | 関数呼び出し、条件式、キャスト、マクロ |
[ | [ ] | 配列、属性、インデクサ |
" | " " | 文字列リテラル |
' | ' ' | 文字リテラル |
自動括弧補完は、これらの記号に対して一括で動作します。そのため、「{」だけでなく「(」「[」「”」なども自動補完されなくなっている場合には、設定のどこかで自動括弧補完が無効化されている可能性が高いと考えられます。
C/C++向けの自動括弧補完をオンにする基本手順
最初に確認すべきなのは、C/C++専用の自動括弧補完設定です。Visual Studioには言語ごとの個別設定があり、C/C++だけオフになってしまっているケースが少なくありません。
C/C++の自動括弧補完を有効化する手順
以下の手順で、C/C++向けの自動括弧補完を再度オンにします。
- [ツール] → [オプション] を開く
- 左側のツリーから [テキスト エディター] → [C/C++] → [全般] を選択
- 右側の一覧から 「自動括弧補完(Automatic brace completion)」 にチェックを入れる
- [OK] を押して設定を保存する
この設定を変更したあとは、一度C/C++のソースを開き直して挙動を確認してみてください。
C/C++の設定画面で確認しておきたい項目
同じ画面には、自動括弧補完以外にもコード補完やフォーマットに関する項目が並んでいます。トラブル時には、あわせて次のような項目も見直しておくと安心です。
| 項目名(日本語UIの例) | 概要 | 自動括弧補完への影響 |
|---|---|---|
| 入力時にメンバー一覧を表示 | . や -> などで候補一覧を表示 | 直接は関係ないが、候補表示が出ない場合は言語サービス全体の異常も疑える |
| ステートメントの補完 | ; の入力やEnterキーで行の補完・整形を行う | 括弧補完とあわせて使うと、{ } ブロック後の改行挙動が変わる |
| 自動括弧補完 | 開き括弧・引用符に応じて閉じ記号を自動挿入する | 今回の問題の本命。必ずオンになっているか確認 |
C/C++固有の設定がオフになっていると、他の言語では自動補完されるのにC/C++だけ効かないといった、少し紛らわしい状態になります。その場合は本節の手順でまずC/C++の設定を確認しましょう。
テキストエディター全体の「自動括弧補完」も確認する
Visual Studioには、全言語共通の自動括弧補完設定も存在します。C/C++の設定をオンにしても直らないときは、こちらがオフになっていないかを必ず確認します。
全般設定で自動括弧補完をオンにする手順
- [ツール] → [オプション] を開く
- 左側のツリーから [テキスト エディター] → [全般] を選択
- 右側の一覧から 「自動括弧補完」 にチェックを入れる
- [OK] をクリックして保存
この全般設定は、C/C++だけでなくC#、JavaScript、TypeScriptなど、ほぼすべてのエディターに影響します。C/C++の設定と全般設定の関係を整理すると次のようになります。
| 状態 | C/C++個別設定 | [テキスト エディター]全般 | 結果 |
|---|---|---|---|
| パターンA | オン | オン | 自動括弧補完が有効になる(期待どおり) |
| パターンB | オン | オフ | 挙動が不安定になる場合がある(環境依存) |
| パターンC | オフ | オン | 多くのケースでC/C++のみ自動補完が効かない |
| パターンD | オフ | オフ | すべての言語で自動括弧補完が無効 |
実際には、Visual Studioのバージョンや拡張機能によって微妙に挙動が変わることがありますが、基本的には「C/C++側」と「全般側」の両方をオンにしておくのが最もトラブルの少ない構成です。
自動括弧補完が効かないときの動作確認手順
設定を変更したあと、本当に直ったかどうかを確認するための手順も整理しておきます。ただ「{」を打ってみるだけでなく、いくつかのパターンを試すと原因の切り分けがしやすくなります。
C/C++ファイルでの基本的な確認手順
- Visual Studioで新規プロジェクト、または既存のC/C++プロジェクトを開く
- .cpp もしくは .c ファイルを開く
- 関数の中で、空行にカーソルを置く
{キーを押す- 自動で
}が挿入され、カーソルが中に置かれることを確認する
ここで、もし { しか入力されない場合は、まだ設定か環境に問題が残っています。「{」自体が入力されない、全角の「{」になってしまう、といったケースでは、IMEやキーボード配列の問題も疑う必要があります。
他の括弧・引用符でも確認する
ついでに、他の記号に対する自動補完も確認しておくと、原因の切り分けがさらに進みます。
(を入力して()になるか[を入力して[]になるか"を入力して""になるか'を入力して''になるか
もし「{」だけがおかしく、他の括弧は自動補完される場合には、拡張機能やスニペット、マクロなどが波括弧の挙動を上書きしている可能性も考えられます。
ファイル種別・拡張子がC/C++として認識されているか確認
意外と見落としがちなのが、ファイルの種類がC/C++として認識されていないケースです。自動括弧補完は、エディターがそのファイルをどの言語として扱っているかに依存します。
C/C++として認識されない例
- 拡張子が
.txtや.incなど、C/C++用として設定されていない - プロジェクトに追加されておらず、「その他のファイル」として扱われている
- 一時ファイル(例:
.tmp)を直接開いて編集している
拡張子がC/C++として認識されているかどうかは、Visual Studioのステータスバーやエディター下部に表示される言語名(C++など)を確認すると分かります。
| 拡張子 | 標準の言語認識 | 備考 |
|---|---|---|
.c | C | Visual C++として扱われる |
.cpp | C++ | 一般的なC++ソース |
.h | C/C++ヘッダー | プロジェクトの種類によってC、C++どちらにもなりうる |
.hpp | C++ヘッダー | テンプレートヘッダーなどでよく使われる |
もし独自の拡張子でC/C++コードを書いている場合には、[ツール] → [オプション] → [テキスト エディター] → [ファイルの拡張子] から、その拡張子に対して「エディター」を C/C++ に関連づけることで、自動括弧補完を含むC/C++用の機能を有効にできます。
拡張機能が自動括弧補完を邪魔していないか確認する
Visual Studioは拡張機能によって機能を強化できる一方で、拡張機能同士や本体機能との相性問題が発生することもあります。特にエディターにフックするタイプの拡張機能(キーバインド変更、Vimエミュレーション、スニペット拡張など)は、自動括弧補完の挙動に影響することがあります。
セーフモードでの起動で切り分ける
拡張機能による影響を確認する方法として、セーフモードでVisual Studioを起動する方法があります。セーフモードでは、基本的な機能のみが有効になり、多くのサードパーティ拡張は読み込まれません。
- Visual Studioをすべて終了する
- 「開発者コマンド プロンプト for VS」やコマンドプロンプトを開く
- 次のコマンドを実行する:
devenv /safemode - セーフモードでVisual Studioが起動したら、C/C++ファイルを開き「{」入力時に「}」が補完されるか確認する
セーフモードでは正常に自動括弧補完が動作するのに、通常起動だと動かない場合は、何らかの拡張機能が原因である可能性が高いと言えます。その場合は、疑わしい拡張機能を一つずつ無効化し、どれが原因かを切り分けるのが近道です。
ありがちな拡張機能の例
- Vim/Emacs風キーバインドを提供する拡張
- 独自のスニペット・コード補完エンジンを提供する拡張
- キーボードマクロや入力補助系の拡張
これらの拡張機能は便利な反面、Visual Studio標準の自動補完機構と挙動がぶつかることがあります。トラブルが発生したタイミングと、拡張機能をインストール・更新したタイミングが近い場合は特に疑ってみるとよいでしょう。
設定ファイルの破損・プロファイル不整合を疑うときの対処
まれに、Visual Studioの設定ファイルが壊れたり、プロファイルが中途半端な状態になったりすることで、特定の機能だけが中途半端に無効になってしまうことがあります。このような場合は、設定のリセットを検討します。
設定をリセットする前にバックアップを取る
リセットを行うと、エディター配色やショートカット、ウィンドウレイアウトなども含めて初期状態に戻ります。そのため、事前に設定のエクスポートを行っておくと安心です。
- [ツール] → [インポートとエクスポートの設定] を開く
- 「選択した環境設定をエクスポート」を選択し、[次へ]
- エクスポートする項目を選ぶ(迷ったらすべてにチェック)
- 保存先のパスを指定して [完了] をクリック
Visual Studioの設定をリセットする手順
バックアップが終わったら、次の手順で設定をリセットしてみます。
- [ツール] → [インポートとエクスポートの設定] を開く
- 今度は「すべての設定をリセット」を選択して [次へ]
- 必要であれば、先ほどエクスポートした設定ファイルを指定してバックアップ済みとする
- リセット処理を実行する
リセット後、Visual Studioの初回起動時には開発設定(C++向け、C#向けなど)を再度選ぶ画面が表示されます。ここで「C++」や「C++開発」を選択することで、C/C++向けに最適化された設定で環境が構築されます。そのうえで、自動括弧補完が正しく動作するか確認します。
自動括弧補完が効く場面・効かない場面の具体例
自動括弧補完が有効でも、常にどんな入力に対しても働くわけではない点にも注意が必要です。Visual Studioのバージョンや設定によって多少異なりますが、一般的には次のような挙動になります。
| 状況 | 自動括弧補完 | 補足 |
|---|---|---|
コード中で { を入力 | 動作する | {} が挿入され、カーソルが中に置かれる |
既に } がある位置で { を入力 | 動作しないことがある | 記号の前後関係や構文解析の状態に依存 |
コメント内(// や /* */)で { を入力 | 動作しないことが多い | コメントとして扱われるため、コードとして解析されない |
プリプロセッサ行(#define など)で { を入力 | 挙動が不安定 | マクロの内容によっては通常と異なる動きになることもある |
文字列リテラル内で { を入力 | 通常は補完されない | 文字列として扱われるため、括弧のペアとしては認識されない |
そのため、動作確認を行う際には、通常のコード行(コメントや文字列ではない場所)で試すことが重要です。「コメント内で試していたために、ずっと動かないと思いこんでいた」というケースも現場では実際によくあります。
コード整形・インデント設定と組み合わせて使うと便利なポイント
自動括弧補完は単独でも便利ですが、Visual Studioのコード整形機能と組み合わせることで、より読みやすくミスの少ないC/C++コードを書けるようになります。
自動インデント・フォーマットと合わせて使う
C/C++では、[テキスト エディター] → [C/C++] → [書式] などの設定で、開き括弧・閉じ括弧の位置やインデントスタイルを細かく制御できます。例えば、K&Rスタイル、Allmanスタイルなど、チームのコーディング規約に合わせて調整できます。
自動括弧補完で {} のペアを素早く挿入し、その後 Ctrl + K → Ctrl + D(ドキュメントの整形)などのショートカットを使えば、コードブロック全体のインデントをきれいに揃えることができます。
スニペットと自動括弧補完の違いを理解する
Visual Studioにはスニペット(コードスニペット)機能もあります。例えば if と入力してTabキーを押すと、次のようなコードが展開されることがあります。
if (true)
{
$end$
}
これはスニペットによる展開で、自動括弧補完とは別の機能です。スニペットが効かなくなった場合は、また別の設定やショートカットの問題になりますが、見た目が似ているため混同しがちです。
今回のテーマである「{を入力した瞬間に}が追加されるかどうか」は、自動括弧補完の設定が担当している動作だと覚えておくと混乱しにくくなります。
Visual StudioとVisual Studio Codeの違いにも注意
質問や検索キーワードで混ざりやすいのが、Visual Studio(IDE)とVisual Studio Code(エディター)の違いです。両者は別製品であり、自動括弧補完の設定方法も異なります。
本記事で対象としているのは「Visual Studio(IDE)」
本記事で説明しているのは、主に以下のような環境です。
- Visual Studio 2019 / Visual Studio 2022 など
- C/C++開発ワークロード(「C++によるデスクトップ開発」など)がインストールされている
- 拡張子
.c,.cpp,.hなどのファイルを編集している
一方、Visual Studio Codeでは、設定ファイルのJSONや拡張機能によって自動括弧補完の挙動を制御します。代表的な設定としては、次のようなものがあります。
"editor.autoClosingBrackets": "languageDefined""editor.autoClosingQuotes": "languageDefined"
ただし、これらはあくまでVisual Studio Code側の話であり、Visual Studio(IDE)の[ツール] → [オプション]画面とは無関係です。「Visual Studio」で検索して出てきた情報が実はVS Codeの話だった、ということもよくあるので、製品名には注意して情報を整理しましょう。
実務でよくあるトラブルケースと解決パターン
最後に、実務でよく見かける「自動括弧補完が効かなくなった」ケースと、その解決パターンをいくつか紹介します。自分の状況に近いものがあれば、同じ手順を試してみてください。
ケース1:Visual Studioのアップデート後に突然効かなくなった
状況:Visual Studioをアップデートした直後から、「{」入力時の「}」自動挿入が効かなくなった。
対処パターン:
- まずはC/C++の [全般] → 自動括弧補完 と、[テキスト エディター] → [全般] → 自動括弧補完 の両方を確認し、オンになっているか確認
- それでもダメな場合は、セーフモードでの起動(
devenv /safemode)で挙動を確認 - セーフモードで問題が再現しない場合は、最近インストール・更新した拡張機能を1つずつオフにして原因を特定
ケース2:チームのPCだけ挙動が違う
状況:同じプロジェクトを開いているのに、自分だけ「{」で「}」が補完されない。隣の開発者の環境では問題なく動いている。
対処パターン:
- まずは双方の [ツール] → [オプション] の設定を見比べる(自動括弧補完関連に差がないか)
- 自分の環境でしかインストールしていない拡張機能がないか確認
- 最終手段として、自分のVisual Studio設定をリセットし、チームの標準設定をインポートして合わせる
ケース3:一部のプロジェクト・一部のファイルだけ動かない
状況:同じVisual Studioの中でも、特定のプロジェクトや特定のファイルだけ自動括弧補完が効かない。
対処パターン:
- 問題が出ているファイルの拡張子を確認し、C/C++として認識されているかチェック
- テンポラリフォルダーや生成物を直接編集していないか確認
- 同じ拡張子の別ファイルで動作するかどうかを試し、ファイル固有の問題か、プロジェクト全体の設定なのかを切り分ける
まとめ:自動括弧補完を元に戻すためのチェックリスト
Visual Studioで「{」を入力しても「}」が自動で挿入されなくなった場合、ほとんどは設定や拡張機能が原因です。最後に、本記事のポイントをチェックリストとして整理します。
- C/C++の [全般] → 自動括弧補完 がオンになっているか
- [テキスト エディター] → [全般] → 自動括弧補完 がオンになっているか
- ファイル拡張子がC/C++として認識されているか(
.c,.cpp,.hなど) - コメントや文字列内ではなく、通常のコード行で試しているか
- セーフモード(
devenv /safemode)で再現するか → 再現しないなら拡張機能を疑う - どうしても直らない場合は、設定のエクスポート → 全設定リセットも検討する
自動括弧補完は、普段は「いて当たり前」と感じるほど当たり前に動いている機能ですが、いざ失われるとコーディングの効率が大きく下がります。C/C++開発を快適に続けるためにも、本記事の手順に沿って設定と環境を見直し、元の快適なコーディング体験を取り戻してみてください。

コメント