質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

17863閲覧

VSCode vectorやstringの文字色が白色になるのはデフォルトですか?

mjk

総合スコア303

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/08/31 20:27

編集2020/09/01 11:29

#状況説明
イメージ説明

std::vector
上の画像ではvector の文字色が白色ですが、以前はstdの文字色と同じ緑色だったはずなのですが元に戻せません。
別件で拡張機能の削除やVSCode自体を再インストールした経緯で何かしらの設定が変わったのかもしれません。

勘違いかもしれないので検索してみたところイメージ説明 やはり緑色で表示されていました。

質問

何かしらの設定で元に戻すことは可能なのでしょうか?
またvectorやstringの文字色が白色になるのはデフォルトなのでしょうか?

試したこと

拡張機能やVSCodeの再インストール。
テーマの変更や配色の変更は(はっきりと覚えていませんが)してなかったはずです。

追記1
もう一度全て削除して再インストールしたのですが、インテリセンスも以前のように効果が無いので無意識のうちにあれこれ設定を変更していて、元に戻せていないような気がします。

自分でも状況がよく分かっていないのですが整理すると・・・
1.配色やテーマによる設定なのかどうか
2.拡張機能のインテリセンスを動作させる設定からの影響なのか
3.#include <bits/stdc++.h>を利用していてinclude関連で認識していないのかどうか
1はクリーンインストール直後なので既定値のはずで、
2も拡張機能入れた直後なので既定値のはずで、
3のinclude関連のpathがうまく認識出来ていないのか調べてるとこです

以前と色の変化や動作が違うので違和感があるので納得のゆく設定を模索してるところです。
以前の設定にこだわらず快適な環境も模索しています。

現状の拡張機能と表示
イメージ説明
(偶然発見、関数の戻り値の型の部分はちゃんと緑色になっている)

追記2
イメージ説明
イメージ説明
クリーンインストール(3回目)直後の空フォルダに白紙からファイル作成して確認。
#include <bits/stdc++.h>にするとvectorの色が無い。
#include <vector>にするとvectorの色が緑色になる。

拡張機能は日本語とc/c++intellisenseのみ。

とりあえずデフォルトでは色があることが分かったので、#include <bits/stdc++.h>を使った場合に認識する方法を模索してみます。無理そうなら時間掛かるだけなのでこのまま妥協しても仕方ないかもしれません。

追記3
#include <bits/stdc++.h>とインテリセンスの両立がどうしても出来ないので、
とりあえず妥協してコード書いている時は#include <vector>を使うようにしておきます。

追記4
直接関係ないかも知れませんが試したことを箇条書きで残しておきます。

イメージ説明
設定のC_Cp:IntelliSenseEngineFallback = Default になっていないと緑色にならない。

イメージ説明
includePathをフルパスで指定しても変わらず。

開発環境

Win10 (10.0.18362)
VSC1.48.2
C++14
gcc version 10.2.0 (Rev1, Built by MSYS2 project)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Daregada

2020/09/01 04:18

配色テーマの設定によって色は変化しますが、現在の配色テーマは?
mjk

2020/09/01 05:04

Default Dark+となっています。途中経過を追記しておきます。
Daregada

2020/09/01 05:35

Dark+の配色テーマで、C++以外のフォルダーからC++のフォルダーに切り替えたとき、stdは最初から緑色になっていますが、vectorはインクルードパスの検索が終わってから緑色になります。インクルードパスの設定が怪しいかもしれませんね。
mjk

2020/09/01 05:44

ありがとうございます。やっぱりそのあたりですか・・・ 調べる方向性が見えたので助かります。 includeの仕組みなど基本的なことを理解していないので切り分けや必要な設定を知るいい機会なのでもう少し試行錯誤してみます。
tiitoi

2020/09/01 10:38 編集

自分の環境でも引数の型だと vector や string は緑色ですけど、変数名の型の場合は白色ですね。複数のパソコンで VS Code を使っていますが、どれも白色で、それが普通だと思っていました。
mjk

2020/09/01 10:47

ちなみに#include <bits/stdc++.h>は使っていますか? >>どれも白色で、それが普通だと思っていました。 緑色にこだわらずに白色に慣れるというのもありかもと思い始めています。
tiitoi

2020/09/01 10:56 編集

> #include <bits/stdc++.h>は使っていますか? <bits/stdc++.h> や <vector> の include の有無も試してみましたが、変化はありませんでした。(include パス等設定されていてインテリセンスも効いている環境) カラーテーマを変えたところ白色以外で表示されるものもありましたが、デフォルトのカラーテーマでは白色で表示されるのが正しいのではないでしょうか。
mjk

2020/09/01 10:56

ありがとうございます。 >>デフォルトのカラーテーマでは白色で表示されるのが正しいのではないでしょうか。 そうかもしれません。
mjk

2020/09/01 11:57

白色に慣れるようにします。(時間掛けすぎて反省してます)
Daregada

2020/09/01 14:14

こちらでは、「Dark (Visual Studio)」や「Light (Visual Stduio)」だと文字色は黒/白(色が変わらない)ですが、「Dark+ (default dark)」や「Light+ (default light)」だと文字色は緑/暗めのシアンが付いていますね。
mjk

2020/09/01 14:21

色々調べてくださってありがとうございました。 path絡みだと思ったのですがこれ以上時間掛けても堂々巡りなので白に慣れるようにします。
guest

回答2

0

ベストアンサー

ええと、c_cpp_properties.jsonincludePathに、bitsが存在するフォルダーのパスを追加すると、インテリセンスも配色もうまく行っているように見えます。

json

1"includePath": [ 2 "${workspaceFolder}/**", 3 "(bitsの親フォルダーのフルパス)/**" 4 ],

投稿2020/09/01 10:47

Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mjk

2020/09/01 10:50

回答ありがとうございます。試してみます。
Daregada

2020/09/01 10:52

プロジェクトフォルダーの.vscode内にあるc_cpp_properties.jsonです(念のため)
mjk

2020/09/01 11:10

取り急ぎうまくいかないようです。追記に履歴や設定残しておきます。
mjk

2020/09/01 11:55

Daregadaさん調べてくださりありがとうございます。 #include <bits/stdc++.h>を使うこと自体があまりおすすめもされていない使い方のようですし(競プロ除く一般論)、stdが緑で::vectorが白でも標準的だと聞いたので、それに慣れる方が良いと思いました。 Daregadaさんの回答でうまくいっているということでBAとして、質問はクローズさせて頂きます。
mjk

2020/09/02 05:50

追伸:取り急ぎ回避策を見つけましたのでご報告しておきます。回答に追記しておきます。 c_cpp_properties.jsonを使用しない=includePathを指定しない状況でvectorが緑色になりました。
mjk

2020/09/02 07:55

↑訂正。回答を書いている最中に別の原因を見つけましたので詳細は回答を御覧ください。
guest

0

vectorの文字色が白色に慣れるということで一応妥協していたのですが・・・
コード内に未定義変数があれば本来なら赤色波下線で警告が出るはずが無反応だったのでIntellisenseが機能していないと思い何度目かの再インストールをしました。

#結論:
※この回答を書いている最中に別の原因を発見しました。
イメージ説明

vectorの文字が緑色になる
C/C++ for Visual Studio Code (C/C++ Intellisense)のバージョンがv.0.29.0

vectorの文字が白色になる
C/C++ for Visual Studio Code (C/C++ Intellisense)のバージョンがv.0.30.4

デフォルトは手動更新のはずですが、自動更新にすると最新のバージョンがv.0.30.4になります。
最新版から下位バージョンにもどすには拡張機能の設定ボタンから違うバージョンをインストールから出来ます。ただし自動更新の設定になっていると無限ループなので自動更新の設定をしないでおく必要があります。
(ドハマリするはずです)

#残る課題
バージョンがv.0.29.0
バージョンがv.0.30.4
※この切り分け結果だけを見ると
c_cpp_properties.jsonで指定したIncludePathは無関係なのか?という疑問が残ります。
下記再現性の確認で試した内容ではc_cpp_properties.jsonを使っておらずIncludePathでpathを指定していません。
何かしらのデフォルト設定を参照した結果v.0.29.0では緑色となり、
v.0.30.4では白色、つまりIncludePathなのか何かしらのpath参照が出来ていないということではないかと推測しています。

回避策としてvectorを緑色で使いたければv.0.29.0のまま使えば良いと思います。

v.0.30.4ではvectorが白色なのでこれを緑色にしたければ何かしらの設定が必要だと思いますが、それはDaregadaさんの回答にある設定が肝になりそうです。
IncludePath#include <bits/stdc++.h>Intellisenseの何かしらの設定が関連していると思われますがここに戻ると堂々巡りになってしまいました・・・

なので回避策のv.0.29.0を使いつつv.0.30.4での設定方法を時間のある時に手探りしてみるつもりです・・・

追記:
v.0.30.4だとvectorが白色なだけでなく未定義変数の警告が出ないなどのIntellisenseの機能が働いていませんので使い物にならない状態になります。

#再現性の確認

参考:VS Codeをアンインストールするには

何らかの都合でVS Codeアンインストールするときには、VS Codeだけをアンインストールする方法と、設定や拡張機能まで削除する方法がある。
上記の手順でアンインストールされるのは、VS Code本体だけとなる。アンインストール後にVS Codeをもう一度インストールすると、以前に行ったユーザー設定や以前にインストールした拡張機能が復活する。


◇アンインストール
1.VSCodeをアンインストール
2.workvs(任意の作業フォルダ)内の.vscodeフォルダを_vscode_oldにリネーム(設定をバックアップ)
3.VSCodeインストールフォルダを丸ごと削除
4.C:\Users<ユーザー名>.vscodeフォルダを丸ごと削除
5.C:\Users<ユーザー名>\AppData\Roaming\Codeフォルダを丸ごと削除

◇再インストール
1.VSCodeをインストール
2.拡張機能Japanese Language Pack for VS Codeをインストール (日本語化)
3.拡張機能C/C++ for Visual Studio Codeをインストール (Intellisense)
4.VSCode再読み込み

◇C/C++ Intellisenseの自動更新設定確認方法
"C_Cpp.updateChannel": "Default" デフォルト=手動更新
"C_Cpp.updateChannel": "Insiders" 自動更新

"Insider" に設定すると、拡張機能の最新の Insider ビルドが自動的にダウンロードされてインストールされます。これには、次期バージョンの機能とバグ修正が含まれています。

◇動作確認
1.フォルダを開く→workvsフォルダ(任意の作業フォルダ)
2.workvsフォルダ配下で適当な新規ファイルを作成(画面ではqa_.cpp)
3.vectorが緑色になっていることを確認
4.hogehogehoge変数が未定義なので赤い波下線が出てIntellisenseが機能していることを確認


補足:
旧環境(作業フォルダ_vscode_old)から各ファイルをコピーしてコンパイル成功を確認
workvs.vscode\launch.json
workvs.vscode\tasks.json

※コンパイルするだけならIncludePathは無関係。
c_cpp_properties.jsonは未使用でIncludePathを指定していないという切り分け。

投稿2020/09/02 07:54

編集2020/09/02 08:59
mjk

総合スコア303

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問