在c ++中我们可以使用宏作为
#define check_and_log_warning(x) if (!(x)) {log_error(#x); cout<<__LINE__;}
我想获取布尔表达式的值,并将其用作字符串。 获取宏内的行号会增加收益。
像这样的宏可以用Java编写吗? 我最近从c / c ++转到java,所以我想知道在没有宏的情况下可以在c ++中完成这样的事情吗?
答案 0 :(得分:2)
Java中没有宏设施。
您将使用日志框架(其中有很多可供选择)。
if (! theActualConditionNotJustX) myLogger.error("describe problem here");
日志记录后端(如果以这种方式配置)确保捕获并显示行号。这有一些运行时成本,但它通常是可以忽略的,特别是在涉及实际“错误”的情况下(跟踪级别日志记录可能会有点代价)。
答案 1 :(得分:2)
预处理器是我在Java中用C / C ++遗漏的东西。有方法......,但它们是Java方式。
1 /断言: http://docs.oracle.com/javase/7/docs/technotes/guides/language/assert.html
2 /日志: 我使用的是https://commons.apache.org/proper/commons-logging/
(超过log4J或任何你想要的)
要在日志消息中打印行号,您可以使用以下内容:
int lineNo = Thread.currentThread().getStackTrace()[2].getLineNumber();
编辑:
请注意:与C ++中的__LINE__
不同,获取堆栈跟踪会导致性能下降。太好了:))