Ich habe dieses Programm in C
#include <stdio.h>
int main() {
char foo[10];
int i;
for(i = 0; i < 20 ; i++) {
foo[i] = 0;
}
return 0;
}
Wenn ich dieses Skript ausführe
#!/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
Es wird ausgegeben
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!
Das liegt daran, dass gcc dies nicht als Fehler betrachtete, aber trotzdem diese Warnungen ausgab stderr
.
Aber ich möchte das trotzdem im Bash-Skript erkennen.
Antwort1
Ich denke, die Antwort von @DavidPostill ist die richtige, aber wenn Sie die Unterscheidung zwischen Warnungen und Fehlern sowie die Erkennung von Hinweisen beibehalten möchten, können Sie 2>err
am Ende des gcc
Befehls Folgendes hinzufügen:
gcc -O3 -o hello hello.c
Dann machen Sie Ihren Test:
if [ $? -eq 0 -a ! -s err ]
Antwort2
gcc
habe das nicht als Fehler angesehen
Sie können den Schalter verwenden -Werror
.
-Werror
Machen Sie alle Warnungen zu Fehlern.
QuelleWarnoptionen – Verwenden der GNU Compiler Collection (GCC)