最近CS+のコード編集環境を秀丸からVSCodeへ乗り換えて__evenaccess問題など解決できましたが通信データ構造の記述等で
#pragma pack
を使うコードがありコンパイルは問題無くできるものの表示上のエラーが出てうっとうしいので黙らせたいのですが
#ifndef _VSCODE
#endif
と修正せずにVSCode側の設定でスマートな黙らせ方はあるでしょうか?
LunaJamさん、こんにちは。NoMaYです。MSC(今もコンパイラ自体の呼び方はMSCで良いのか最近は疎くなってしまいましたが)にもCC-RXにも#pragma packというプラグマがあるけれど両者でその後に続く文字列に互換性が無かった、ということがVSCODEが文句を言ってくる原因でしょうね。ですので、最終的には#ifdef~#endifに落とし込まざるを得ないのかな、と考えたのでした。ただ、その際に、その#ifdef~#endifをソースの各所にちりばめるよりもFITで取られているようなやり方でC99のプラグマ演算子を使えばソースの見た目がすっきりするかな、と考えたのです。で、LunaJamさんのソースでFITをガチガチに使っているかどうか余り重きに無くて、そういうやり方を真似る際にFITのコードの一部をコピペしてしまうのが一番手っ取り早いかな、と考えたのでした。
ちなみに、__evenaccessでVSCODEが文句を言ってきただろうと思いますが、LunaJamさんが採られた方法は以下のように、ヘッダファイルの1つに以下の#defineを入れるような感じですよね?
#ifdef _VSCODE #define __evenaccess /* nothing to be defined */#endif
LunaJamさん、こんにちは。
古い投稿への返信ですが、#ifdef以外に以下の方法もあります。
1.#pragma diag_suppress 661
※今回のpackの警告が661番なので
これだけでもよいですが、適当なヘッダファイルを作成して上記pragmaを記述、以下の設定に追加する(このヘッダはVSCodeのときだけインクルードする)
C/C++拡張(ms-vscode.cpptools)の設定コマンドパレット(Ctrl+Shift+P)から、C/C++: Edit Configuration (UI)詳細設定の中の、強制インクルード
追加のヘッダが気持ち悪いかもしれませんが、元のソースを汚さずに対処できます。
警告661についてググっても情報が出てこないので、どこまで抑制されるかはわかりませんが、今回のようなpragmaだけかなと予想はしています。
2.ツールチップのQuick Fix...→エラーの波線を無効にするまたは、
.vscode\settings.json{ "C_Cpp.errorSquiggles": "Disabled"}
手っ取り早いですが、こちらは上記pragma以外の波線も出なくなってしまいます。それでもよければ。
【補足】C/C++: Edit Configuration (UI)で、コンパイラパスという設定もありますが、ここでCCRLのパスを設定しても解決しません。コンパイラ固有のパスや定義はケアしてくれるみたいですが、pragmaは対応していないようです。
未定義のpragmaは無視される(通常は問題にならない)ので、今回のpackのようなケースは非常にレアだからなのかなと思います。