我有一份相当庞大的C和C ++代码(~200k loc),其中广泛使用可怕的宏:
/* ... */
#define PRIVATE static
#define BEGIN {
#define END }
/* ... */
#define WHILE(e) while (e) {
#define DO /* yep, it's empty */
#define ENDWHILE }
/* and it goes on and on, for every keyword of the language */
这是个问题,我想要去掉那个愚蠢的标题,清理代码,并适当地缩进。
起初,我想使用简单的
sed
替换所有这些宏,但似乎并不简单。
WHILE
的情况很棘手(其他语句也是如此)。我不能只用while
来替换WHILE
,因为左大括号会丢失。当然,由于DO
宏没有任何作用,它并不总是出现在代码中。因此,将DO
替换为{
行不通。我也不能使用换行符,因为条件经常分成多行:
WHILE (clsr_calibragedf_tabdisque.tab_disque[indice_disque].tab_date[indice_date] NE
clsr_calibragedf_tabdate [indice].date) DO
indice ++;
ENDWHILE
我能想到的最好解决方案是使用C预处理器来替换特定的宏,而不是扩展
#include
指令或其他宏。但我找不到这样的工具。
有什么想法吗?
while
和RE匹配文本(其中将包括,因此保留,开括号)进行替换即可。 - unwind'\(.+\) \{'
这样的正则表达式在实践中可能有效。 - unwind