初めて質問させていただきます。
mokkunと申します。
CS+でRX62をターゲットに開発を行っていますが、
__VA_ARGS__を使うとエラーになってしまいます。
CS+ : V6.00.00
コンパイラパッケージ : CC-RX V2.07.00
エラーメッセージ
*** :E0520020:Identifier "__VA_ARGS__" is undefined ***
CC-RXのマニュアルのエラー一覧には
E0520969 : The identifier __VA_ARGS__ can only appear in the replacement lists of variadic macros.
とあるので使用できると思ったのですが、未定義なのでしょうか?
よろしくお願いいたします。
mokkunさん、こんにちは。NoMaYです。CC-RXは以下の規格に準拠しているようです。(私は、C++仕様の「互換性のある」「基づいて」という表現が微妙だなぁ、かつ、元々の「Visual C/C++ 6.0」の言語仕様が今では不明だなぁ、と思いました。)準拠する言語仕様 - CS+オンラインヘルプ > コンパイラ編 > コンパイラ言語仕様 > 基本言語仕様tool-support.renesas.com/autoupdate/support/onlinehelp/ja-JP/csp/latest/CS+.chm/Compiler-CCRX.chm/Output/ccrx04c0106y.html「(1) C言語仕様 (lang=cオプション選択時)ANSI/ISO 9899-1990 American National Standard for Programming Languages -C(2) C言語仕様 (lang=c99オプション選択時)ISO/IEC 9899:1999 INTERNATIONAL STANDARD Programming Languages - C(3) C++仕様 (lang=cppオプション選択時) ← つまりEC++仕様を選択しなかった場合Microsoft(R) Visual C/C++ 6.0と互換性のある言語仕様に基づいています。」それで、私はGoogle検索して知ったのですが、C++に関してはC++11という規格で__VAR_ARGS__は導入されたようですね。(Visual C/C++ 6.0よりもかなり後ですね。) ですので、CC-RXでは未実装なのだと思います。Google検索: C++ __VA_ARGS__www.google.co.jp/search?q=C%2B%2B+__VA_ARGS__可変長マクロ引数の話 - にっき(pseudo)d.hatena.ne.jp/DigitalGhost/20111205/1323098099ちなみに、デバッグ用printfに関しては__VAR_ARGS__を使う他に以下に書かれている小技もあるようですね。[prog] C99じゃないコンパイラで、可変引数付きデバッグ用マクロを定義する例d.hatena.ne.jp/Wacky/20060611/1150007606[C/C++] C におけるデバッグ出力のジレンマ - satosystemsの日記d.hatena.ne.jp/satosystems/20120810/1344573313[追記]ウィキペディアにMicrosoft Visual C++の項がありました。Visual C++ 6.0は1998年リリースだったようです。(この項の「4 製品バージョンと内部バージョン」の表を参照しました。)Microsoft Visual C++ - ウィキペディアja.wikipedia.org/wiki/Microsoft_Visual_C%2B%2Bあと、cpprefjp - C++日本語リファレンスというサイトに、このようなページもありました。コンパイラの実装状況 - cpprefjpcpprefjp.github.io/implementation-status.html可変引数が空でない場合のトークン置換 (C++20) - cpprefjpcpprefjp.github.io/lang/cpp20/va_opt.html