【发布时间】:2015-04-02 23:40:33
【问题描述】:
我正在尝试定义一个 NOOP 宏。我经历了How do I implement a no-op macro or template in C++。但是我收到unused variable 错误。我无法更改 gcc 标志。所以我必须解决这个问题。你能帮忙吗?这是代码。
#define TRACE(...)
int main() {
int a = 10, b = 20;
int c = 30;
TRACE(a, b);
TRACE(c);
}
#define TRACE(...) (void)0 给我error: 'va_start' was not declared in this scope,error: 'va_end' was not declared in this scope。
如何解决这个问题?
【问题讨论】:
-
TRACE 应该做什么?它应该抑制未使用的警告吗?
-
它应该只是转换为 NOOP。这样的程序可能毫无意义,但我在更大的代码库中面临完全相同的情况。有很多 TRACE 宏。现在我不想去评论他们每个人。所以我想把那个宏改成 NOOP
-
查看C
#definemacro for debug printing 以获取有关密切相关主题的大量信息。实际上,我认为它应该涵盖您想要的内容。你得到了哪些错误?未使用的变量或未声明的宏(va_start、va_end),还是两者兼而有之?您可以通过使用它们来避免未使用的变量;请参阅调试打印宏问题。目前尚不清楚va_start()或va_end()的使用位置,但它们在<stdarg.h>中定义,包括在内应该可以解决错误。 -
你考虑过使用
assert宏吗? -
您需要显示重现
va_start/va_end问题所需的最少代码。显示的代码不是那个代码——至少在我可以访问的任何机器上。 (请参阅如何创建 MCVE (Minimal, Complete, Verifiable Example) 或 SSCCE (Short, Self-Contained, Correct Example) - 两个名称和链接用于相同的想法)。您显示的内容可能会产生未使用的变量警告/错误,但不会产生va_start/va_end问题。
标签: c