gcc
не считал это ошибкой
Вы можете использовать -Werror
переключатель.
-Werror
Превратите все предупреждения в ошибки.
Параметры предупреждения об источнике - Использование коллекции компиляторов GNU (GCC)
У меня есть эта программа на 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.
gcc
не считал это ошибкойВы можете использовать -Werror
переключатель.
-Werror
Превратите все предупреждения в ошибки.
Параметры предупреждения об источнике - Использование коллекции компиляторов GNU (GCC)
Я думаю, что ответ @ DavidPostill является правильным, но если вы хотите сохранить различие между предупреждениями и ошибками, а также обнаружением заметок, вы можете добавить 2>err
в конец gcc
команды:
gcc -O3 -o hello hello.c
Тогда сделайте свой тест:
if [ $? -eq 0 -a ! -s err ]