最近CS+のコード編集環境を秀丸からVSCodeへ乗り換えて__evenaccess問題など解決できましたが通信データ構造の記述等で
#pragma pack
を使うコードがありコンパイルは問題無くできるものの表示上のエラーが出てうっとうしいので黙らせたいのですが
#ifndef _VSCODE
#endif
と修正せずにVSCode側の設定でスマートな黙らせ方はあるでしょうか?
LunaJamさん、こんにちは。NoMaYと申します。VSCode側の設定では無いのですが、最近のRXスマートコンフィグレータで生成したソース(というかRX Driver PackageのFITのR_BSPモジュール)では、r_rx_compiler.hというソースがあって、以下の記述になっています。この記述をコピペして、VSCodeのIntellisence対応の条件コンパイル文を追加して、利用するようにしてはどうでしょうか?(ちなみに、私はひとつテーマを見付けました。やるとは明言出来ないですけど、r_rx_compiler.h全体をIntellisence対応にする(といってもVSCode上でのエラー表示を抑止するだけですが)、というものです。その後、単体RXスマートコンフィグレータでCC-RX向けコードが生成出来るように成らないものかとRenesasさんに働き掛けて行ってみる、、、[訂正]すみません、勘違いしました。単体RXスマートコンフィグレータでコード生成出来ないのは、GNURXでした。CC-RX(とICCRX)は出来るのでした。)FITでコンパイラの#pragma pack等の仕様の違いを吸収している箇所github.com/renesas-rx/rx-driver-package/blob/49fc7a9/source/r_bsp/r_bsp_vx.xx/r_bsp/mcu/all/r_rx_compiler.h#L1555
/* ---------- Alignment Value Specification for Structure Members and Class Members ---------- */#if defined(__CCRX__)#define R_BSP_PRAGMA_PACK R_BSP_PRAGMA(pack)#define R_BSP_PRAGMA_UNPACK R_BSP_PRAGMA(unpack)#define R_BSP_PRAGMA_PACKOPTION R_BSP_PRAGMA(packoption)#elif defined(__GNUC__)#define R_BSP_PRAGMA_PACK R_BSP_PRAGMA(pack(1))#define R_BSP_PRAGMA_UNPACK R_BSP_PRAGMA(pack(4))#define R_BSP_PRAGMA_PACKOPTION R_BSP_PRAGMA(pack())#elif defined(__ICCRX__)#define R_BSP_PRAGMA_PACK R_BSP_PRAGMA(pack(1))#define R_BSP_PRAGMA_UNPACK R_BSP_PRAGMA(pack(4))#define R_BSP_PRAGMA_PACKOPTION R_BSP_PRAGMA(pack())#endif
作業案1) R_BSP_PRAGMA()側でIntellisence時のR_BSP_PRAGMA()を無効にする(以下のCC-RXのC++モードと同様な感じかと思う)github.com/renesas-rx/rx-driver-package/blob/49fc7a9/source/r_bsp/r_bsp_vx.xx/r_bsp/mcu/all/r_rx_compiler.h#L158
/* ========== Keywords ========== */#if !(defined(__CCRX__) && defined(__cplusplus))#define R_BSP_PRAGMA(...) _Pragma(#__VA_ARGS__)#else/* CC-RX' C++ mode does not support Pragma operator and variadic macros */#define R_BSP_PRAGMA(x)#endif
作業案2) R_BSP_PRAGMA_PACK()等側でIntellisence時のR_BSP_PRAGMA_PACK()等を無効にする(例えば以下のe2 studio/EclipseのINDEXER対応のように)github.com/renesas-rx/rx-driver-package/blob/49fc7a9/source/r_bsp/r_bsp_vx.xx/r_bsp/mcu/all/r_rx_compiler.h#L608
/* ---------- Inline Expansion of Assembly-Language Function (part2) ---------- */#if defined(__CDT_PARSER__)#define R_BSP_ASM(...) /* none */#define R_BSP_ASM_LAB_NEXT(n) /* none */#define R_BSP_ASM_LAB_PREV(n) /* none */#define R_BSP_ASM_LAB(n_colon) /* none */#define R_BSP_ASM_BEGIN /* none */#define R_BSP_ASM_END /* none */#else#if defined(__CCRX__)#if !defined(__cplusplus)#define R_BSP_ASM(...) __VA_ARGS__#else/* CC-RX' C++ mode does not support variadic macros */#endif#define R_BSP_ASM_LAB_NEXT(n) ?+#define R_BSP_ASM_LAB_PREV(n) ?-#define R_BSP_ASM_LAB(n_colon) R_BSP_ASM(?:)#define R_BSP_ASM_BEGIN /* none */#define R_BSP_ASM_END /* none */#elif defined(__GNUC__)略#elif defined(__ICCRX__)略#endif#endif /* defined(__CDT_PARSER__) */
[関連リンク]CC-RXもGNURXもC99仕様では_Pragmaプリプロセッサ演算子というものが使えるのですね(FITのコンパイラ対応の効率化に役立ちそうかも)japan.renesasrulz.com/cafe_rene/f/forum5/5079/cc-rx-gnurx-c99-_pragma-fit