预处理器和空格规则

时间:2011-02-03 16:57:06

标签: c++ c-preprocessor

我感兴趣的是在C ++块中定义我自己的语言(例如main),为此我需要使用预处理器及其指令,我的问题依赖于以下规则:

#define INSERT create() ... 

被称为类似函数的定义,预处理器不允许我们定义的任何空格,

因此,当我使用我自己语言的函数时,我必须解析下面的语句:

INSERT INTO variable_name VALUES(arg_list)

到另外两个函数调用让我们说

insertINTO(variable_name) and valuePARSE(arg_list) 

但是由于预处理器指令规则不允许我在我的定义中有空格,我怎么能到达variable_name然后调用我想要实现的第一个函数调用?

任何线索都会有所帮助。

PS:我尝试使用g ++ -E file.cpp来查看预处理器的工作原理,并将语法调整为有效的c ++规则。

2 个答案:

答案 0 :(得分:0)

大多数C ++编译器中包含的预处理器可能对于这种任务来说太弱了。它从未被设计用于这种滥用。增强预处理器库可以帮助你在路上,但我仍然认为你正在这里的单向街道。

如果您真的想以这种方式定义语言,我建议您编写自己的预处理器,或者使用比默认语言更强大的预处理器。 Here是一个尝试使用Python作为C ++预处理器的人。

答案 1 :(得分:0)

1)define INSERT create()不是类似函数的宏,它类似于对象,类似于define INSERT(a, b, c) create(a, b, c);

2)如果您想将INSERT INTO variable_name VALUES(arg_list)扩展为insertINTO(variable_name); valuePARSE(arg_list);,您可以执行以下操作:

#define INSERT insertINTO(
#define INTO 
#define VALUES(...) ); valueParse(__VA_ARGS__);

3)因为你可以看到宏变得非常简单,即使语法中出现最轻微的错误也会花费大量时间跟踪它

4)因为它标记为C ++,请查看Boost.ProtoBoost.Preprocessor