如何以编程方式检查C代码的语法正确性?

时间:2019-06-03 16:31:57

标签: c gcc syntax

我正在研究C源文件的软件software窃检测方法。为此,我编写了一个程序来简化源代码的语法,例如使所有变量名称相同,并使所有循环类型相同。显然,我无法对语法不正确(因此无法编译)的代码执行此操作。

有一个GCC命令可以查看C源代码gcc -c -fsyntax-only assignment1.c上的语法问题。该命令打印出assignment1.c代码,其中包含一些奇怪的行和语法问题(如果存在)。但是我需要一个布尔输出,只需指定代码是否正确编写即可。有命令吗?或如何为此目的使用-fsyntax-only命令? (顺便说一句,我不想​​编译代码,我只需要检查它们的语法即可。)

编辑:我想我被误解了。我需要阅读C源文件,然后以编程方式检查其语法。因此,我应该在创建的程序中使用命令gcc -c -fsyntax-only assignment1.c的输出。

1 个答案:

答案 0 :(得分:1)

GCC的-fsyntax-only标志可用于测试输入文件在语法上是否有效而不产生任何输出文件。返回值取决于输入是否有效。

因此,以下在sh / Bash中起作用:

input=file.c

if gcc -c -fsyntax-only "$input" >/dev/null 2>&1; then
    echo "$input is valid C code"
else
    echo "$input is invalid"
fi

添加了输出重定向以抑制语法错误消息。