__FILE__,__LINE__和__FUNCTION__在C ++中的用法?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

假定您的C ++编译器支持它们,是否有任何特殊原因使用__FILE____LINE__并且__FUNCTION__用于记录和调试目的?

我主要关心的是如何给用户带来误导性的数据,例如,报告不正确的行号或作为优化结果的函数,或者因此导致性能下降。

基本上,我可以信任__FILE____LINE____FUNCTION__永远做正确的事?

提问于
用户回答回答于

__FUNCTION__是非标准的,__func__存在于C99 / C ++ 11中。其他人(__LINE____FILE__)都很好。

它会始终报告正确的文件和行(如果你选择使用__FUNCTION__/ ,则会显示功能__func__)。优化是一个非因素,因为它是编译时宏扩展; 它不会以任何方式影响性能。

用户回答回答于

在极少数情况下,将给定的行更改为其他内容可能很有用__LINE__。我已经看到GNU配置对于某些测试来说,在原始源文件中没有出现的行之间插入一些voodoo之后,报告适当的行号。例如:

#line 100

将使下列行以__LINE__100 开头。你可以选择添加新的文件名

#line 100 "file.c"

这只是很少用处。但如果需要的话,我不知道有什么替代方案。实际上,也可以使用一个宏,而不是该行,这必须导致上述两种形式中的任何一种。使用boost预处理器库,可以将当前行增加50:

#line BOOST_PP_ADD(__LINE__, 50)

由于你询问了__LINE__和的用法,因此我认为提及它很有用__FILE__。从来没有从C ++中获得足够的惊喜:)

扫码关注云+社区