可能重复:
How can I make the preprocessor insert linebreaks into the macro expansion result?我可以强制C预处理器生成新行吗?
#define IDENTIFIER { /*new line here*/\
my_multiline(); /*new line here*/\
macro(); /*new line here*/\
} /*new line here*/
我可以强制Ç预处理器生成一个新的生产线,在它的扩张?我不相信有一个标准的方法来做到这一点,但我不介意Visual C++(2008)和gcc的特定于平台的黑客攻击。
我不想通过m4或单独的预处理器来完成此操作。
为什么我问这:
这或多或少只是好奇。由于这是一个黑客,我不会在生产中尝试这个,但我想知道我是否能够做到这一点。前几天我偶然到了这个问题:
Can you turn off (specific) compiler warnings for any header included from a specific location?
这是我想解决自己的问题。我想创建一个用于包含头部的宏,但是使用正确的编译指示可以在包含之前禁用警告,包括我希望关闭警告的头部,在包含之后启用警告。
当然,我可以创建一个脚本来生成包含警告和包含的附注的模拟包含。
我的第一个问题是,由于#include
是一个预处理器指令,所以一个宏在生成它时会有点无用。但后来我发现这个答案:
Is there a way to do a #define inside of another #define?
有了这个,我相信我可以产生特殊的宏包括如果我能够迫使编译器生成的换行符在它的扩张。
我现在在家,但明天我会在工作时发布我的代码。
您的#define需要一个标识符。无论如何,空白的目的是什么?你永远不会看到扩展的代码。 – GManNickG 2010-07-22 23:32:00
@GMan:他可能只是希望宏本身更具可读性。 – CookieOfFortune 2010-07-22 23:32:53
你能否提供一些背景知道你为什么要这样做?是否有你想写的特定宏?也许你的问题有不同的解决方案。 – 2010-07-22 23:33:06