在没有C预处理器的情况下记录表达式的文本及其结果

时间:2015-02-02 05:38:22

标签: c++ c logging language-agnostic c-preprocessor

我经常在C / C ++中使用这个宏:

#define MYLOG(x) (std::cout << "Value of " << #x << " is: " << x << std::endl);

它的用法如下:

int x = 1;
int y = 2;
MYLOG(x+y);

结果如下:

Value of x+y is: 3

我还没有用任何不使用C预处理器的语言复制它。是否可以使用任何其他语言?我希望能够在其他地方开始使用它。注意:eval不算数。我希望在我的代码中看到表达式,而不是字符串,这样我仍然可以使用语法高亮和自动完成。

1 个答案:

答案 0 :(得分:1)

不,在C和C ++中,编译器都会删除符号信息。 #x在预处理器中创建一个字符串,编译器会保存字符串。

具有更强反射能力的其他语言可以提供反映表达的能力。特别是,纯解释语言只使用字符串表示,因此它们可以轻松地打印出来。但是,您反对eval的地方。我不明白为什么,有些语言是100%eval