用于查找全局变量的Shell脚本

问题描述 投票:0回答:1

如何编写一个 shell 脚本来查找给定 C 程序中的所有全局变量?

我不需要像这样的长队

global_vars=$(grep -E '^[[:space:]]*[a-zA-Z_][a-zA-Z0-9_]*[[:space:]]+[a-zA-Z_][a-zA-Z0-9_]*[[:space:]]*;' "$c_file" | awk '{print $2}')

,而是一个真正的解决方案/策略。

我想我可以以某种方式检查变量是否由大括号封装,这意味着它不是全局的,但我不知道如何实现它,而且看起来很复杂。

c shell variables global
1个回答
0
投票

这取决于问题的限制程度。如果您无法对所使用的编码约定做出假设,则必须使用比正则表达式更强大的工具。如果您可以假设一些事情,这是我曾经编写的脚本的起点:

BEGINFILE {
    current_function = ""
}

# Start of function.
/^\w.*\(.*\)\s*{?\s*$/ {
    current_function = $0
}

# End of function.
/^}\s*$/ {
    current_function = ""
}

如果

current_function
为空(在 awk 中意味着它是“假”),那么你不在函数内部。然后你可以做这样的事情:

! current_function &&
        /<regex which matches non-pathological variable declarations>/ &&
        ! /<regex of things that might be confused for a variable, like typedefs, macros, etc>/ {
    print "global: " $0
}
© www.soinside.com 2019 - 2024. All rights reserved.