我正试图用一行代码替换这三行相同的代码,以使我的代码更加紧凑和可读。
使用多行宏是我尝试的第一种方法。
所以,我想替换:
#ifndef OUTPUT_IN_BINARY
*fileOutputStream << endl;
#endif
通过一个宏调用。
所以我加了一句
#define WRITE_ENDLINE \
#ifndef OUTPUT_IN_BINARY \
*fileOutputStream << endl; \
#endif
在我的代码前面,我把我的行替换为:
WRITE_ENDLINE
但我犯了一系列错误:
> error C2121: '#': invalid character: possibly the result of a macro expansion
> error C2065: 'ifndef': undeclared identifier
> error C2143: syntax error: missing ';' before 'constant'
> error C2297: '*': illegal, right operand has type 'QDataStream *'
> error C2065: 'endif': undeclared identifier
我在这里研究了一些其他的问题和各种文档,但是我没有得到这里有什么问题?也许是语法错误,因为我混合了其他宏命令?
我知道可能有其他的解决方案来实现我的目标,但我想尝试宏观的解决方案...
谢谢!
1条答案
按热度按时间kfgdxczn1#
看看你的定义尝试
我猜你想要的是以下内容:如果我使用
WRITE_ENDLINE
,那么在没有定义WRITE_ENDLINE
的情况下,我希望它扩展为*fileOutputStream << endl;
。你不需要指定你想要的东西,如果定义了
WRITE_ENDLINE
,你想要扩展的东西。让我们假设您可以使用空行;我相信这是一个合理的假设,因为你没有提到任何替代代码。
为了达到这个目的,请使用这个定义:
这样你就可以在你所想的情况下得到想要的代码,而在另一种情况下仍然是一个有效的,尽管是空的定义。这反过来又允许你使用宏,不管
OUTPUT_IN_BINARY
是否被定义。