いつもお世話になっております。
C/C++ソース混在プロジェクトなので、ビルドすると下記のエラーが発生します。
ご教授いただけると幸いです。
<ビルドエラー>
(1)E0520018:Expected a ")"
(2)E0520020:Identifier "__func__" is undefined
(1)の現象 ※便宜上、諸々削除し原因特定コードにしております。
/*-------------- VL53l0X.h -------------*/
=VL53l0X.h=class VL53L0X{ public: VL53L0X(void);
private: unsigned char address;};
/*-------------- VL53l0X.cpp -------------*/
#include "VL53L0X.h"#define U_VL53L0X_ADDRESS_DEFAULT 0b0101001
VL53L0X::VL53L0X(void) : address(U_VL53L0X_ADDRESS_DEFAULT) ★ここでエラー{}
【ビルドエラー】
E0520018:Expected a ")"
【コメント】
★を
#define U_VL53L0X_ADDRESS_DEFAULT (0b0101001) ⇒同じエラー
#define U_VL53L0X_ADDRESS_DEFAULT 0101001 ⇒エラーがなくなります。
(2)の現象
/*-------------- C側のソース -------------*/
#define LOG(loglvl, tag, fmt, ...) u_log(loglvl, tag, __FILE__, __LINE__, __func__, fmt, __VA_ARGS__)
VL53L0X::test(void){
:
LOG(U_LOG_SILENT, U_LOG_TAG_VL53L0X, "OK \n", NULL); ★ここでエラー
}
E0520020:Identifier "__func__" is undefined
『extern "C"』してもだめで、C++では__func__、__VA_ARGS__は使えないのでしょうか?
【その他】
・RX231/CS+(CC-RX)/北斗電子製評価ボード
・ビルドツールの設定は、C言語:C99(-lang=c99)、Cpp:C++(-lang=cpp)
ライブラリジェネレートのC++の設定で何か有効にしなくてはならないのでしょうか?
以上、よろしくお願いいたします。
bunbunさん、こんにちは。NoMaYです。CC-RXのC++モードで__VA_ARGS__が使えない点に関しては、以下のスレッドが参考になるかと思います。RX62で__VA_ARGS_japan.renesasrulz.com/cafe_rene/f/forum5/4669/rx62-__va_args_/25585#255852進数リテラルに関しては、既にリプライされているように8進数表記や16進数表記に変更するのが一般的かと思いますが、BinNum(0101001)のような感じで2進数表記を数値に変換する関数形式の#defineマクロを作成して使用することも出来るかと思います。(Google検索すると既にどなたかがブログ等に書いているかも知れません。)__func__に関しては、意図に近い挙動をするようなマクロを作成することは出来ませんので、CC-RXでは以下のようにして諦めることになるかと思います。
#ifdef __cplusplus#define __func__ "<unknown>"#endif
bunbunさん、こんにちは。NoMaYです。> 『E0520020:Identifier "class" is undefined 』とでるようになり、C++のclassの定義を含むヘッダファイル(.h)をCのソース(.c)でインクルードしてしまって、エラーになっている予感がします。こまめに、#ifdef __cplusplus や #ifndef __cplusplus でコンパイルされる/されないを、切り分けていかないといけないのではないでしょうか、、、