競プロで使用するC++の<bits/stdc++.h>が構文チェックでエラーになる(Vim)

競技プログラミングでよく使われるオールインワンのヘッダーファイル<bits/stdc++.h>ですが、使用しているエディタの構文チェックで当該ファイルが見つからずエラーの波線が出続ける、ということがあります。

本記事は私が普段使用しているVimvim-lspでの構文チェックエラーの対処方法についてご紹介します。

なお、筆者はC++競技プログラミングでしか使ったことがないため、C++を使用した開発におけるお作法などはよくわかりません。<bits/stdc++.hは使うべきではないという意見もあるようですが、今回はそういったあるべき論などは一旦おいておきます。


環境

  • macOS Catalina 10.15.3
  • Vim version8.2.200
  • g++ (Homebrew GCC 9.3.0) 9.3.0)

ちなみに、Vimでの構文チェックはvim-lspとvim-lsp-settingsを利用して導入したclangdです。


そもそもMacで<bits/stdc++.h>を使うには

MacC++コンパイラについては以下の記事に詳しく書かれているため、本記事では割愛します。

「5.1 stdc++.hの準備」まですると本記事の目的の「Vimで構文チェックエラーをなくす」まで準備が整います。

qiita.com


compile_flags.txtを置く

前述した記事で<bits/stdc++.h>を使う準備ができている前提です。

本題のVim<bits/stdc++.h>の構文チェックエラーをなくす件ですが、以下のようなcompile_flags.txtC++ファイルを置いている(作業ディレクトリの)ルートディレクトリにおけばOKです。

-I/usr/local/include

構文チェックをしているclangdに<bits/stdc++.h>がある場所を認識させます。


もっとC++について勉強した方が良い件

こういったコンパイルオプションのお作法は普段からC++を業務等で使用しているプログラマの方にとっては知っていて当然のことかもしれませんが、これまでC/C++を触ってきていない・競技プログラミングでしかC++を使用しない私のようなプログラマにとっては馴染みのないものです。

そもそもVimであればMacローカルでコーディングせずDockerコンテナ上などでコーディングした方が手っ取り早いかもしれません。

競技プログラミングを通してC/C++でコーディグするのも楽しくなってきたので、もっと勉強して知識を深めたいですね(優先度は低いですが・・・それよりもアルゴリズムと数学の勉強・・・)