J'ai ce programme en C
#include <stdio.h>
int main() {
char foo[10];
int i;
for(i = 0; i < 20 ; i++) {
foo[i] = 0;
}
return 0;
}
Si je lance ce script
#!/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
Il va sortir
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!
C’est parce que gcc n’a pas considéré cette erreur comme une erreur, mais a quand même émis ces avertissements stderr
.
Mais je veux toujours détecter cela dans le script bash.
gcc
commande et effectuer votre testif [ $? -eq 0 -a ! -s err ]
.Réponses:
Je pense que la réponse de @ DavidPostill est la bonne, mais si vous souhaitez conserver la distinction entre les avertissements et les erreurs, ainsi que la détection des notes, vous pouvez ajouter
2>err
à la fin de lagcc
commande:Alors faites votre test:
la source
gcc
n'a pas considéré cela comme une erreurVous pouvez utiliser le
-Werror
commutateur.Options d'avertissement source - Utilisation de la collection de compilateurs GNU (GCC)
la source