【发布时间】:2015-04-01 01:01:08
【问题描述】:
我在 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 不计算在内。我想在我的代码中看到表达式,而不是字符串,这样我仍然可以进行语法高亮和自动完成。
【问题讨论】:
-
我不认为 C/C++ 标记器预处理器运算符 # 存在于其他任何地方。
-
我认为这没什么价值。日志应该显示值是什么,而不是如何计算(
log("square: ", width*height)与log("width*height", width*height)),因为这是一个实现细节。 -
@user694733:它实际上非常有用,特别是对于失败断言中的消息,您想知道表达式和不符合预期的值。也就是说,除非您准备引入额外的预处理阶段,否则要求语言无关的解决方案并没有多大意义,在这种情况下,您实际上可以使用 C/C++ 预处理器,或者像 M4 这样更强大的东西,但问题需要工具建议与 SO 无关
-
你可以在 Lisp 中完成。
-
@TonyD 虽然可能有一些我不知道的特殊情况,但总的来说,知道发生了什么以及在哪里更有用。无论如何都可以在代码中找到表达式(除非它是动态的,但无论如何您可能都在使用 eval )。在我看来,描述性信息比模糊表达更有助于定位问题。但正如你所说,这个问题目前的形式并不能真正回答,所以试图猜测这个问题的实际用例是没有意义的。
标签: c++ c logging language-agnostic c-preprocessor