在g++中我可以访问哪些其他隐藏变量(使用宏预先定义的)?

What other hidden variables (pre-defined using macros) do I have access to in g++?

本文关键字:定义 变量 我可以 g++ 访问 隐藏 其他      更新时间:2023-10-16

注意:我使用的是g++版本4.3.4

所以我正在学习断言语句,并且遇到了一个自制断言宏,它使用变量__LINE____FILE__(巧妙地)给出了调用它们的行号和文件名——在这种情况下,从断言失败的地方。这些都是史诗级的信息!

我能够推断变量__FUNCTION__会给你的函数名称,你在…惊人的! !但是,当assert.h在工作时,您还可以获得函数的参数(即function: int main(int, char**)),目前我所能做的就是获得函数名称…

一般来说,我在哪里可以了解更多关于这些奇妙的隐藏变量并获得它们的完整列表?

注。我想我现在明白了为什么你不应该使用以__

开头的变量名

一般来说,通过阅读一门语言的标准文档和/或单独实现的文档,您可以找到有关该语言的任何信息。在c++的情况下,这将是ISO/IEC 14882:2003, 2003年的c++标准。我没有副本,但我确实有C99标准(ISO/IEC 9899:1990),它还列出了(在§6.10.8中)神奇的宏__DATE____TIME__,它们扩展为包含日期&封装源文件的编译时间。(同样,C99有__func__而不是__FUNCTION__(§6.4.2.2);)

编辑:我能找到的GCC/g++的这些特殊名称的唯一列表是GCC手册的这一部分,它描述了__func__, __FUNCTION____PRETTY_FUNCTION__

就获取函数参数而言,您可以尝试使用__PRETTY_FUNCTION__而不是__FUNCTION__。更多信息请访问:http://gcc.gnu.org/onlinedocs/gcc/Function-Names.html

关于预定义宏的列表,如果您在这里查找,您可以找到很多宏:http://gcc.gnu.org/onlinedocs/cpp/Predefined-Macros.html#Predefined-Macros

我不能肯定地说上面提到的清单是完整的。我这么说的原因是在预定义的宏列表中找不到__PRETTY_FUNCTION__…我不知道为什么。