参考预定义宏`#` 与 `##`关于 `__func__`
参考Cppreference:
https://zh.cppreference.com/w/cpp/preprocessor/replace
微软家(MSVC):
https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros?redirectedfrom=MSDN&view=msvc-170
GCC文档:
https://gcc.gnu.org/onlinedocs/gcc/
https://gcc.gnu.org/onlinedocs/gcc/Keyword-Index.html
CLANG:
https://clang.llvm.org/docs/
https://clang.llvm.org/docs/LanguageExtensions.html
可见,有的是预定义宏,写进C++标准的,比如:
例如在我的 OpenGL 笔记的第十点:https://blog.csdn.net/weixin_47652005/article/details/121964227
就写了如下宏去处理 error(用于定位错误):
#define GLCall(x) GLClearError(); x; ASSERT(GLLogCall(#x, __FILE__, __LINE__))# 与 ##
参考:
https://zhuanlan.zhihu.com/p/147496640
https://zh.cppreference.com/w/cpp/preprocessor/replace
注意:在每个函数体的作用域内部都有一个名为 func 的特殊的函数局域预定义变量,它被定义为一个持有具有实现定义格式的函数名的静态字符数组。它不是预处理器宏,但它与 FILE 和 LINE 一起使用,例如 assert。
(C++11 起)
例子:
在 MSVC 和 LLVM 都成立:
而如:
则只在 clang++ 和 g++ 成立,因为没有写入标准,应该是属于 compiler intrinsic ?
从图片可见,前者会输出 foo ,而后者会输出 void foo()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)