0
点赞
收藏
分享

微信扫一扫

谈谈C++预定义宏

穆风1818 2022-01-31 阅读 111

文章目录

参考

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 的特殊的函数局域预定义变量,它被定义为一个持有具有实现定义格式的函数名的静态字符数组。它不是预处理器宏,但它与 FILELINE 一起使用,例如 assert。

(C++11 起)

例子:
在这里插入图片描述
在 MSVC 和 LLVM 都成立:在这里插入图片描述
而如:
在这里插入图片描述
则只在 clang++ 和 g++ 成立,因为没有写入标准,应该是属于 compiler intrinsic ?

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

举报

相关推荐

0 条评论