【发布时间】:2016-11-27 22:28:33
【问题描述】:
所以我们有一个分配,我们在其中创建类似伪语言的编译器。
例子:
PROGRAM_BEGIN
... //code
VAR(name) = NUMBER(2.3)
PROGRAM_END
我们必须用预处理器来处理这个问题,然后把它变成 c++ 代码。
例子:
#define PROGRAM_BEGIN int main(){
#define PROGRAM_END return 1;}
我遇到的问题是我们必须支持如下代码:
VAR(name) = NUMBER(1)+NUMBER(2.5)
经过深思熟虑,我有几个想法,但到目前为止没有任何效果(例如,使用具有动态创建名称的变量)。我想通过一些适当的数据处理,我已经计划将输入组织到类中,使用运算符重载可以帮助完成这项工作,但我仍然看不到大局。
【问题讨论】:
-
您能具体说明您的要求吗?如果您正在寻找一种使用预处理器表达
VAR(name)的方法,您应该查看预处理器宏。在这种情况下,#define VAR(name) int name应该可以解决问题。实际上int在这里做得不好。我想使用浮点并进行隐式转换或使用联合将是一种方式。但是没有实际需求就说不准了。 -
是的,我已经这样做了,但是如果你这样做,NUMBER(22) + NUMBER(11) 将变为 int x = 22; + 整数 x = 11;这不会运行...
-
1或2.5已经是一个数字,所以NUMBER宏不需要做任何其他事情 -
你可以在
VAR中使用auto -
#define VAR(name) int name和#define NUMBER(number) number如果你这样做VAR(x) = NUMBER(1) + NUMBER(3),预处理器将转换为int x = 1 + 3
标签: c++ c-preprocessor