在宏定义中如何添加__FUNCTION__?
代码如下:
#include <cstdio>void _LOG(const char* strFormat, ...) { printf("res=%s\n", strFormat);}#define LOG(strFormat, ...) _LOG(__FUNCTION__ ":" strFormat, ##__VA_ARGS__) //在这里添加__FUNCTION__后编译会报错,添加其它字符串就不会报错。int main() { LOG("%s", "Hello, world!"); return 0;}
尝试将__FUNCTION__改为字符串就不会报错。
__FUNCTION__
__FUNCTION__
是一个变量,不是一个宏。现在标准里用的名字是 __func__
。
因为它是一个变量,所以它不能进行字符串拼接。
你可以用 %s
输出它:
#define LOG(strFormat, ...) _LOG( "%s:" strFormat, __FUNCTION__, ##__VA_ARGS__)
在C++中,__FUNCTION__
是一个预处理器宏,它被展开为当前函数的名称。在你的例子中,你试图在宏定义中使用它,但是你遇到了一些问题。
问题在于,宏替换是在编译之前进行的,而__FUNCTION__
宏是在编译时被替换的。这意味着当宏替换发生时,__FUNCTION__
还未定义,因此会导致编译错误。
如果你想在宏中使用当前函数的名称,你可以使用一个函数参数来传递这个名称。例如:
#include <cstdio>void _LOG(const char* strFunction, const char* strFormat, ...) { printf("%s: %s\n", strFunction, strFormat);}#define LOG(strFormat, ...) _LOG(__func__, strFormat, ##__VA_ARGS__)int main() { LOG("%s", "Hello, world!"); return 0;}
在这个例子中,我添加了一个新的函数参数strFunction
来接收当前函数的名称。我使用了一个新的宏__func__
来获取当前函数的名称,这个宏在C++11及以后的版本中可用。然后,我在LOG宏中使用这个新的函数参数来传递当前函数的名称。这样,无论何时调用LOG宏,它都会将当前函数的名称传递给_LOG函数。
我在我的网站上使用MathJax,我想添加一些语义支持。 目前,我的MathJax配置是接收TeX输入并输出HTML-CSS输出(不幸的是,MathML在Chrome中工作不太好)。我还有一个jQuery函数,它接受任何类并将其转储到属性中。 下面的HTML。。。 用下面的脚本。。。 将输出。。。 显然,的内容将使用一系列跨度、类和样式进行样式化。我只是不打算在这里打这些。无论如何,在呈现数学之后
#define 叫做 宏定义命令,它也是C语言预处理命令的一种。所谓 宏定义,就是用一个标识符来表示一个字符串,如果在后面的代码中出现了该标识符,那么就全部替换成指定的字符串。 我们先通过一个例子来看一下 #define 的用法: 运行结果: 120 注意第 6 行代码 , 被 代替了。 就是宏定义, 为宏名, 是宏的内容(宏所表示的字符串)。在预处理阶段,对程序中所有出现的“宏名”,预处理器都会
是否有一个时间格式来指定这样的日期序列到轴在D3和v4?
我想在向url发送请求时添加假用户代理。但它并没有添加假useragent,而是使用默认的useragent。
本文向大家介绍在C++中自定义宏的简单方法,包括了在C++中自定义宏的简单方法的使用技巧和注意事项,需要的朋友参考一下 可以使用宏定义没有返回值的“函数”。例如: 这样的“函数”与真正意义上的函数有本质的区别,因为宏是一个编译前行为,仅仅是编译前对文本进行替换。在Python源码中,经常可以看到下面类似的宏定义: 为什么要使用do { ... } while (0)这样的语法而
问题内容: 我正在使用Twitter Bootstrap添加图标,没有问题。他们有很多选择。 http://twitter.github.com/bootstrap/base- css.html#icons 但是,我找不到菜单项之一的适当图标。关于“汽车”。我想要的是我想添加我的自定义图标。我怎样才能做到这一点? 问题答案: 您可以通过在自己的类(如)中定义图标来创建自己的图标: 当然要记住使用前