У меня есть эта программа на языке C
#include <stdio.h>
int main() {
char foo[10];
int i;
for(i = 0; i < 20 ; i++) {
foo[i] = 0;
}
return 0;
}
Если я запущу этот скрипт
#!/bin/bash
gcc -O3 -o hello hello.c
if [ $? -eq 0 ]
then
echo -e "\033[1;32mcompilation sucess!\033[0m"
else
echo -e "\033[1;31mcompilation error!\033[0m"
fi
Он выведет
hello.c: In function ‘main’:
hello.c:8:10: warning: iteration 10u invokes undefined behavior [-Waggressive-loop-optimizations]
foo[i] = 0;
^
hello.c:6:2: note: containing loop
for(i = 0; i<20 ;i++)
^
compilation sucess!
Это потому, что gcc не посчитал это ошибкой, но все равно вывел эти предупреждения stderr
.
Но я все равно хочу обнаружить это в скрипте bash.
решение1
Я думаю, что ответ @DavidPostill правильный, но если вы хотите сохранить различие между предупреждениями и ошибками, а также обнаружить заметки, вы можете добавить 2>err
в конец команды gcc
:
gcc -O3 -o hello hello.c
Затем пройдите тест:
if [ $? -eq 0 -a ! -s err ]
решение2
gcc
не считал это ошибкой
Вы можете использовать -Werror
переключатель.
-Werror
Превратите все предупреждения в ошибки.
ИсточникПараметры предупреждения — использование коллекции компиляторов GNU (GCC)