- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
__PRETTY_FUNCTION__
、__FUNCTION__
、__func__
之间有什么区别,它们在哪里记录?我如何决定使用哪一个?
最佳答案
__func__
是一个隐式声明的标识符,当它在函数内部使用时,它会扩展为包含函数名称的字符数组变量。它在 C99 中被添加到 C 中。来自 C99 §6.4.2.2/1:
The identifier
__func__
is implicitly declared by the translator as if, immediately following the opening brace of each function definition, the declarationstatic const char __func__[] = "function-name";
appeared, where function-name is the name of the lexically-enclosing function. This name is the unadorned name of the function.
注意,它不是宏,在预处理过程中没有特殊意义。
__func__
在 C++11 中被添加到 C++,其中它被指定为包含“一个实现定义的字符串”(C++11 §8.4.1[dcl.fct.def. general]/8),它不如 C 中的规范有用。(将 __func__
添加到 C++ 的最初提议是 N1642 )。
__FUNCTION__
是一些 C 编译器支持的预标准扩展(包括 gcc 和 Visual C++);通常,您应该在支持的地方使用 __func__
,并且仅在使用不支持它的编译器时才使用 __FUNCTION__
(例如,Visual C++,它不支持支持C99,尚不支持所有C++0x,不提供__func__
)。
__PRETTY_FUNCTION__
是一个 gcc 扩展,与 __FUNCTION__
基本相同,除了对于 C++ 函数,它包含函数的“漂亮”名称,包括函数的签名功能。 Visual C++ 有一个类似(但不完全相同)的扩展,__FUNCSIG__
。
对于非标准宏,您需要查阅编译器的文档。 Visual C++ 扩展包含在 C++ 编译器的 "Predefined Macros" 的 MSDN 文档中。 . gcc 文档扩展在 gcc 文档页面 "Function Names as Strings." 中进行了描述。
关于c++ - __PRETTY_FUNCTION__、__FUNCTION__、__func__ 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4384765/
名为 __func__ 的宏的存在是 C99 的一部分,其意图很明确,但它在给定函数中扩展为标准化的确切文本吗? 最佳答案 是的。宏被定义为扩展为函数的名称。 C11,§6.4.2.2 The ide
我正在尝试创建一个宏,该宏将根据调用宏的函数名称修改数据结构中的字段,请参见下文: #define REGISTER(func_name) data.func_name##_n++ struct da
#include char* __func__ = "hello"; void myfunc(void) { printf("%s\n", __func__); } int mai
我正在用 C++ 实现一个日志处理程序,它工作得很好,但是我发现有一件事是可用的,那就是记录器从中获取输出的地方。 我想这并不是什么大问题,但我偶然发现了 __func__ 标识符,它基本上会保留当前
我正在阅读 C/C++ 中的 __FUNCTION__/__func__(它们用于打印使用它们的函数的名称)。我读到的每个地方都说这些是宏,在预处理时被替换。因此,我使用命令 gcc -E prog.
#include void someFunc(void) { printf("%s\n"), __func__); } 每次调用该函数时都会打印: someFunc Java 的等价物是什么?
我在评论中看到使用 __func__ 存在安全风险。我需要了解这是怎么回事? 最佳答案 使用 __func__ 揭示二进制文件中的函数名称,从而减轻有权访问二进制文件的攻击者的工作。 关于c - __
如果我们在 C (C99/C11) 和 C++ 中的函数之外使用预定义变量 __func__ 会发生什么? #include const char* str = __func__; int main
我正在尝试通过将字符串存储在特殊部分 (__dlog) 来向 ELF 可执行文件添加元数据。当前的方法使用(滥用?)内联汇编来存储字符串并且几乎可以按预期工作。 #include #include
在实例方法的文档中指出: Methods also support accessing (but not setting) the arbitrary function attributes on t
大多数编译器都支持一些特殊的宏,例如 __FUNC__ 或 __PRETTY_FUNCTION__ 但我想知道如何在编译时验证它们是否可用,有这个来自 boost/current_function.h
谁能解释一下 Python datamodel reference 中关于用户定义函数 的以下部分是什么?是关于? When a user-defined method object is creat
在我正在处理的项目中给出以下代码: /* Pre-definitions in a pre-definitions file to be included in the project */ #ifd
我正在使用 gcc 编译 C99 代码。我想编写一个宏,它将返回一个包含函数名称和行号的字符串。 这是我的: #define INFO_MSG __FILE__ ":"__func__"()" 但是
我正在尝试构建一个调试日志消息函数,用于记录调用日志消息的文件、行和函数。 #define DEBUG_PANIC(p) CLogging::Debuglogf( "Debug marker (%s)
我是python新手,对python 2.7中的__func__不太了解。 我知道当我这样定义一个类时: class Foo: def f(self, arg): print
对于 gcc 项目,__FUNCTION__、__FILE__ 和 __func__ 返回的指针是否保证指向持久内存? (也就是说,我可以安全地引用另一个函数范围内的指针吗?)我知道 __func__
我想写一个 C 宏来接受这个: int foo() { MY_MACRO } 并将其扩展为: int foo() { _macro_var_foo++; } 我发现我不能使用 __func__
“C”标准是否支持类似于 __func__ 的函数参数名称? 最佳答案 不,C99 标准有以下内容: 6.10.8 Predefined macro names The following macro
我想定义一个宏来连接__func__(或__FUNCTION__)和__LINE__: 以下工作正常: // macro_test.cc #include #define STR2(X) #X #d
我是一名优秀的程序员,十分优秀!