小编Ira*_*ues的帖子

如何计算一组C文件中有多少个#ifdef子句至少具有#elif但没有#else?

我有一堆C文件,我需要计算有多少#ifdef子句具有#elif子句,但在那些文件中没有#else子句,包括可能嵌套的#ifdef子句。例如,在第一个代码段中没有匹配项,而在第二个代码段中有两个匹配项:

1:没有匹配项(#ifdef包含#else子句)

#ifdef A
...
#elif B
...
#else
...
#endif
Run Code Online (Sandbox Code Playgroud)

2:两次匹配(有两个#ifdef子句带有#elif子句,但没有对应的#else)

#ifdef X1
...
#elif X2
...
#endif
...
#ifdef Y1
...
#elif Y2
...
#elif Y3
...
#endif
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种使用某些命令行工具(例如grep,awk或sed)执行此操作的方法,但到目前为止还没有运气。因此,我仍然愿意寻求更简便的选择(如果有)。

我已经使用grep尝试过此正则表达式:('^(?=.*#elif)((?!#elif|#else).)(?=.*\#endif).)*$'一个#elif后面没有另一个#elif或#else并具有一个对应的#endif),但是它不起作用,因为子句位于不同的行。

regex awk grep sed c-preprocessor

1
推荐指数
1
解决办法
390
查看次数

标签 统计

awk ×1

c-preprocessor ×1

grep ×1

regex ×1

sed ×1