関数式マクロでエラーです。
原因と解決方法を教えてください。
御願いします。
・現象
Solarisでは問題なくコンパイル出来ますが、Linux(以下のバージョン参照)上ではエラーになります。
他の人によるとgcc 2.xでは問題なけれど、gcc 3.x以上ではエラーになると聞きましたが…
・質問
1.コンパイラのバージョン問題ですか?
2.解決するにはパッチが必要ですか?
3.必要だったら、何のパッチが必要ですか?
(ソースの修正なしで解決したいです。)
・エラーメッセージ:
define_test.c:38:1: pasting "_test" and "(" does not give a valid preprocessing token
Kernel:Red Hat Enterprise Linux AS release 4 (Nahant)
Compiler:g++ (GCC) 3.4.3 20041212 (Red Hat 3.4.3-9.EL4)
-- 以下 ソース --
#include <stdio.h>
#include <stdlib.h>
#define SEND4(o, m, l, on_off) o->send_extr_indir(o->_##m##l, on_off)
class Define
{
public:
int send_extr_indir(int data1, int data2);
int _test(int arg1, int arg2);
int test(void);
};
int Define::send_extr_indir(int data1, int data2)
{
printf("data1=%d\n", data1);
printf("data2=%d\n", data2);
return data1+data2;
}
int Define::_test(int arg1, int arg2)
{
return arg1 + arg2;
}
int Define::test(void)
{
return SEND4(this,
test,
(1,2),
5
);
}
int main(void)
{
int result = 0;
Define object;
result = object.test();
printf("result=%d\n", result);
return 0;
}
お礼
どうもご回答ありがとうございました。 紹介いただきました本も見つかりました。 ありがとうございました。