Yuulis.log

トンネルを抜けるとそこは参照エラーであった。

【VScode + WSL / Windows】AtCoder 用ローカル開発環境の C++ のバージョンを更新する

はじめに

以前、 VScode に WSL を導入して C++AtCoder 向け環境を構築した。

yuulis.hatenablog.com

ここで構築した C++ のバージョンは C++17 (gcc 11.1) であったのだが、実は2023年8月、約3年ぶりの AtCoderジャッジアップデートが行われ、ジャッジサーバが C++20 と C++23 (gcc 12.2) に対応した。これにより、競プロで役立つ色々な機能が使用可能になったようである。

qiita.com

note.com

個人的には、コンテナのメンバ関数contains関数が追加されたことと、Range機能の追加が魅力だと思っている。


そんなわけで、今更ながらローカルの AtCoder コーディング環境の C++ のバージョンも C++23 に対応させていきたいと思う。

WSL 環境内の gcc と g++ のバージョンを更新する

VScode 起動後、作成した仮想環境内に入り、ターミナルで次のコマンドを順に実行して、gcc 12 と g++ 12 をインストールする。

$ sudo apt install gcc-12
$ sudo apt install g++-12

インストール完了後、バージョンを確認。

$ gcc --version
$ g++ --version

私の環境では、以下のような表示が出た。無事にインストールできているようだ。

$ gcc --version
gcc (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ g++ --version
g++ (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

これでコンパイラの更新は完了なのだが、何らかの事情で前のバージョンでのコンパイルを行いたい場合があるかもしれない。「一時的にコンパイラをバージョンダウンしたい」といったときのために、 Ubuntu ではupdate-alternativesコマンドというものが用意されている。詳しくは以下の記事を参照のこと。

students-tech.blog

以下のコマンドを実行して、 update-alternativesコマンドの設定をしておこう。

$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 12
$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 12

特に表示が出ることは無い。以上でコンパイラ周りは終了。

VScodeC++拡張機能の設定を変更する

続いて、 VScode 上で C++ を実行するための拡張機能C/C++」の IntelliSense の構成を変更していく。Ctrl + Shift + PVScode のコマンドパレットを開き、「C/C++: 構成の編集 (UI)」を選択。

コンパイラパス」という項目について、プルダウンメニューから「usr/bin/gcc-12」を選択。

C++標準」という項目について、プルダウンメニューから「c++23」を選択。

これで VScode の IntelliSense も C++23 に対応するようになった。

おわりに

以上で、AtCoder 用ローカル開発環境の C++ のバージョンを AtCoder のジャッジ側と同じにすることができた。意外と簡単に済んでしまった。

C++20 / C++23 では非常に多くの新機能が追加されているので、競プロのコーディングの幅も大きく広がることだろう。引き続き私も精進を続けていこうと思った次第である。