我试图做这样的事情使用宏来放置的#ifdef代码
#define VB_S #ifdef VERBOSE
#define VB_E #endif
,这样的代码,而不是写
#ifdef VERBOSE
cout << "XYZ" << endl;
#endif
我可以写
VB_S
cout << "XYZ" << endl;
VB_E
这给了我一个编译时错误:在程序中放置'#'。
任何人都可以放轻对什么是做到这一点
我试图做这样的事情使用宏来放置的#ifdef代码
#define VB_S #ifdef VERBOSE
#define VB_E #endif
,这样的代码,而不是写
#ifdef VERBOSE
cout << "XYZ" << endl;
#endif
我可以写
VB_S
cout << "XYZ" << endl;
VB_E
这给了我一个编译时错误:在程序中放置'#'。
任何人都可以放轻对什么是做到这一点
你可以做这样的事情:
#ifdef VERBOSE
#define VB(x) x
#else
#define VB(x) do { } while (false)
#endif
VB(cout << "foo");
你不能把里面的指令宏的正确方法。 (#
宏作为另一个意义里面 - 它是字符串化操作和必须遵循的一个参数ID - 但限制要比这个意思以上)
埃里克的反应类似:
#ifdef VERBOSE
#define VB(...) __VA_ARGS__
#else
#define VB(...) /* nothing */
#endif
使用variadic macro具有可VB()
调用中的逗号的利益。另外,AFAIK,您可以删除do
... while
。
我更喜欢以下内容:
#define VERBOSE 1
// or 0, obviously
if (VERBOSE)
{
// Debug implementation
}
这是一个有点更具可读性,因为VB_S并不意味着什么给普通用户,但如果(详细)一样。
x可以带任何东西,例如我可能需要打印矩阵的循环 – Akhil 2011-04-15 16:41:30
@Akhil:对于任何带嵌入的东西都不会感到满意 - 您只需制作for循环并使用宏进行打印,编译器可能会优化掉一个无效的循环如果VERBOSE未定义。 – Erik 2011-04-15 16:43:19
我的大部分照片都是简单的cout。在同一方面,当我有for循环时,我将使用显式的ifdef,以及您为更简单的语句提供的技巧。非常感谢! – Akhil 2011-04-15 16:52:08