是否可以让bash检测C中的编译错误?

时间:2015-05-04 09:39:26

标签: c bash

我有一个棘手的要求:

我需要使用bash编译100个程序,比如1.c2.c3.c ... 100.c,我想保留那些被编译的c程序成功并删除编译错误的c程序

到目前为止,我只能实现编译这100个程序的目标,但我确实不知道如何检测这100个程序中的编译是否失败

2 个答案:

答案 0 :(得分:7)

只检查返回代码是否为非零,如果文件非零,则删除该文件。运行编译器后,返回代码存储在shell变量$?中。

以下是这种脚本的长形式。

for i in {1..99}; 
do
    gcc ${i}.c 2> /dev/null > /dev/null

    if [[ $? -ne 0 ]]; then
        rm ${i}.c
    fi

done

作为user268396,中间部分可以缩短为以下内容。

gcc ${i}.c || rm ${i}.c

使用短路运算符||将确保后一语句仅在前一语句失败时才会运行(即,以非零返回码退出)。

答案 1 :(得分:0)

您可以检查编译器返回的错误代码,它存储在$?

for f in *.c; do
    t=${f%.c}      # Strip the .c from the source file name
    gcc -o $t $f   # Try to compile
    if [[ "$?" -ne 0 ]]; then
        rm $f
    fi
done