c - 在错误/警告输出中禁用某些宏的扩展
问题描述
我有一个非常常用的、有些复杂的宏(MAC(...)
为了这个问题,我们称之为),它必须是一个宏(因为它是非常通用的)。该宏在语法上的行为类似于函数调用,但在内部调用了 10 多个其他宏。
因此,如果我在调用时出错,MAC()
例如,如果我这样做:
MAC(1-)
gcc/clang 将向我转储相当长的预处理器堆栈跟踪MAC()
,我对此完全不感兴趣。
如果我这样定义 MAC() :
#if DEBUG_MAC
int MAC(); //so I get a nice preprocessor stack trace
#else
#define MAC(...) //here would come the actual definition
#endif
然后,在遇到我重新编译的错误时-DDEBUG_MAC
,我得到了一个很好的(=不存在的)预处理器堆栈跟踪,但这种方法感觉很笨拙,只适用于诊断硬错误,而不是警告。
有没有办法让 gcc 或 clang 表现得像这样,即,为了错误报告的目的,将宏视为不透明的函数调用,而不进行这种声明/宏改组?
解决方案
推荐阅读
- mysql - MySQL - 查找第一个匹配项或通配符
- python - 根据其他列中的数据创建动态列
- java - Java中自定义对象的空检查
- tags - 仅在未指定标签时运行 ansible 任务
- elasticsearch - 如何在 Elasticsearch 中修复“curl: (23) Failed writing body (4096 != 9142)”
- wcf - 使用 SwaggerWcf 时如何查看我的 Swagger 文档?
- forms - 内联表单输入和提交按钮在屏幕宽度 < 576 像素处未对齐
- python-2.7 - pypi 上 GEOS 的更高版本
- python - 使用 Python 合并 PDF 文件
- php - 如何将 API 请求限制为每个用户同时一个?