- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在我正在处理的项目中给出以下代码:
/* Pre-definitions in a pre-definitions file to be included in the project */
#ifdef WIN32
#define __FUNCNAME__ __FUNCTION__
#else
#define __FUNCNAME__ __func__
#endif
/* My definitions */
#define MAC() \
MAC1()
#define MAC1() \
myPrintFunction(__FUNCNAME__)
/* My print function */
void myPrintFunction(const char * functionName)
{
printf("\n func name: %s \n",functionName);
}
/* Macro usage example function */
void myFunction()
{
if (some_condition)
{
MAC();
}
}
函数名称显示为空字符串。知道为什么吗?我该如何解决?
代码在 Linux 机器上编译和测试,使用 GCC 编译器。
最佳答案
开箱即用地使用 __func__
。自 C99 以来,它一直是 C 标准的一部分。更改您的编译器设置以至少使用该标准。
请注意,__func__
不是宏,而是一个预定义的标识符,它采用的形式使得将它写在函数体内的任何地方都是相当于在那个时候使用它,先写了
static const char __func__[] = "函数名";
就在函数体的左大括号之后。
正式而言,您当前代码的行为是未定义。系统保留任何包含两个连续下划线的符号。 (包括宏名称、函数名称和变量名称。)
关于c - GCC __func__ 被评估为空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40978316/
名为 __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
我是一名优秀的程序员,十分优秀!