栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

谈谈C++预定义宏

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

谈谈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()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/718910.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号