我想在一个大型项目中用#pragma once
替换旧的包含保护宏。
#ifndef FOO_H
#define FOO_H
class foo
{
};
#endif
我想知道,替换#ifndef #define #endif
块的可靠策略是什么?正则表达式仍然适合于此吗?我觉得在模板头文件和类似内容的情况下,解析标头的顶部(对于#define
和底部(对于#endif
)可能容易出错。
答案 0 :(得分:1)
您可以使用正则表达式
import re
s = '''
#ifndef FOO_H
#define FOO_H
class foo
{
// ensure regex is greedy
#ifndef A
#define A
#endif
};
#endif'''
regexpr = re.compile(r'#ifndef [A-Za-z_]+\s+#define [A-Za-z_]+\s+(.*)\s+#endif',
re.DOTALL)
newf = '#pragma once\n\n{}'.format(regexpr.search(s).group(1))
输出
#pragma once
class foo
{
// ensure regex is greedy
#ifndef A
#define A
#endif
};