在g++中我可以访问哪些其他隐藏变量(使用宏预先定义的)?
What other hidden variables (pre-defined using macros) do I have access to in g++?
注意:我使用的是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);)
__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__
…我不知道为什么。
- 在头文件中定义变量不会出错
- 如何使用 SFINAE 在方法调用中有条件地定义变量?
- 在命名空间中定义变量
- 是否可以在C++中基于程序集输出(.dll或.exe)定义变量
- 用不同类型重新定义变量
- 具有全局定义变量的递归比没有全局定义变量的递归函数获得更多的堆栈.为什么?(跳入C++)
- 定义变量类型
- 在命名空间中定义变量,但在测试中获取空值
- cmake没有定义变量
- C 中的继承:在亲子类中定义变量
- 在同一函数中定义变量及其静态等效项
- 如何在 Tensorflow C++ 中定义变量的自定义有状态 Op 保存值
- 如何将 int 和 int* 传递到函数中以定义变量
- 在定义变量时调用类函数
- 定义变量与模板
- 定义变量类型
- 为什么您可以在 switch 语句中的"默认"下定义变量,而不能在"case"下定义变量
- C 如何基于另一个变量和某些算术定义变量的值
- C 可以指向具有定义变量的函数
- C 定义变量设置值