带有预处理器的C++编译器

带有预处理器的C++编译器,c++,c-preprocessor,C++,C Preprocessor,所以我们有一个赋值,在这个赋值中,我们创建了一个类似于伪语言编译器的东西 例如: PROGRAM_BEGIN ... //code VAR(name) = NUMBER(2.3) PROGRAM_END #define PROGRAM_BEGIN int main(){ #define PROGRAM_END return 1;} 我们必须用预处理器处理它,并将其转换成C++代码。< /P> 例如: PROGRAM_BEGIN ... //co

所以我们有一个赋值,在这个赋值中,我们创建了一个类似于伪语言编译器的东西

例如:

PROGRAM_BEGIN
...             //code
VAR(name) = NUMBER(2.3)
PROGRAM_END
#define PROGRAM_BEGIN int main(){
#define PROGRAM_END return 1;}

我们必须用预处理器处理它,并将其转换成C++代码。< /P> 例如:

PROGRAM_BEGIN
...             //code
VAR(name) = NUMBER(2.3)
PROGRAM_END
#define PROGRAM_BEGIN int main(){
#define PROGRAM_END return 1;}
我遇到的问题是,我们必须支持以下代码:

VAR(name) = NUMBER(1)+NUMBER(2.5)  
经过深思熟虑后,我有了一些想法,但到目前为止没有任何效果。例如,使用具有动态创建名称的变量。我想,通过一些适当的数据处理,我已经制定了将输入组织到类中的计划,使用操作符重载可以帮助实现这一点,但我仍然看不到全局

试试这个方法,该方法仅用于调试:

#include <iostream>
using namespace std;

#define PROGRAM_BEGIN   int main(){
#define PROGRAM_END     return 1;}
#define VAR(x)          auto x
#define NUMBER(x)       x

PROGRAM_BEGIN
VAR(name) = NUMBER(1) + NUMBER(2.5);
cout << name << endl;
PROGRAM_END

通过使用auto,您不必担心VAR是整型还是浮点型。

您能具体说明您的要求吗?如果您正在寻找一种使用预处理器表达VARname的方法,那么您应该了解预处理器宏。在这种情况下,define VARname int name应该起作用。实际上int在这里做得不好。我想使用浮点和隐式转换或使用并集是最好的方法。但是如果没有实际的需求,我就说不出来了。是的,我已经做了,但是如果你做了,那么22+11将变成int x=22;+int x=11;这将不会运行…1或2.5已经是一个数字,所以数字宏不需要做任何其他事情。您可以在VARdefine VARname int name和define NUMBERnumber NUMBER中使用auto。如果您执行VARx=NUMBER1+NUMBER3,预处理器将转换为int x=1+3谢谢,您的回答让我明白,我插入define VARID的代码应该在auto ID之前,否则它将无法编译