谈谈C++预定义宏

谈谈C++预定义宏,第1张

谈谈C++预定义宏

文章目录

参考预定义宏`#` 与 `##`关于 `__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__

注意:在每个函数体的作用域内部都有一个名为 func 的特殊的函数局域预定义变量,它被定义为一个持有具有实现定义格式的函数名的静态字符数组。它不是预处理器宏,但它与 FILE 和 LINE 一起使用,例如 assert。

(C++11 起)

例子:

在 MSVC 和 LLVM 都成立:
而如:

则只在 clang++ 和 g++ 成立,因为没有写入标准,应该是属于 compiler intrinsic ?

从图片可见,前者会输出 foo ,而后者会输出 void foo()

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5715227.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存