C++(G ++ 5.4.0)具有奇怪的限制。第二行是允许的,但4号线是不允许的:标题部分不允许extern函数与默认参数
extern yy(int x);
extern yy(int x); // re-declaration of an extern function is allowed
extern xx(int x, int y=3);
extern xx(int x, int y=3); // but re-declaration of an an extern function with default args is not allowed
(这个错误可以使用-fpermissive转换成一个警告,但也绕过其他错误,所以它不是一个很好用的做法该编译器的标志。所以我不使用此标志。)在标题部分ANTLR的CPP目标代码
此问题表现。下面的标题代码:
// G.g4:
grammar G;
@parser::header {
extern xx(int x, int y=3);
}
获取生成为:
// GParser.h:
extern xx(int x, int y=3);
...
// GParser.cpp:
extern xx(int x, int y=3);
#include "GParser.h"
...
我现在绕过这个错误,通过重新编码是这样的:
// G.g4:
@parser::header {
#include "GHeader.h"
}
// GHeader.h:
#ifndef GHEADER
#define GHEADER
extern xx(int x, int y=3);
#endif //GHEADER
但是,有没有更好的办法在antlr4本身做到这一点?
这正是我的问题,是否通过将我的代码放在标题部分来做正确的事情。谢谢,我会检查其他部分并决定使用哪个部分。 – R71