#define debug(x) printf##x
a.cpp文件里有个宏
#define debug(x) printf##x
在程序里调用,还是很方便的,
debug(("WndProc->hWnd:%d\n", hWnd));
上面这个宏在VisualStudio里没报错,
但改为g++编译器,在cmake里就报错了
error: pasting "printf" and "(" does not give a valid preprocessing token
#define debug(x) printf##x
^
这个宏的意思是将输入内容x与printf拼接起来,
实际调用是,x 相当于 ("WndProc->hWnd:%d\n", hWnd)
也就是说,连括号一起传值,但g++不干了,
msvc里面的cl.exe没报错,
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你这种用法本身就不是一种标准化的用法,需要依赖编译器的支持,建议你不要这么用。
用不定参数的宏就可以实现你的需求,还不需要双重括号。
不清楚为什么会报错,但是这里有更好的替代办法:
输出: