Tengo un programa en C, que sale con el código 1:

#include <stdlib.h>

...
datatype pop(stack* st){
    if (empty(st)) exit(1);
    return st->data[st->sp--];
}
...

int main(void){
    ...
    // a is empty at this time
    pop(a); 
    ...
    return 0;
}

Y tengo un script de bash:

run() {
    gcc -Wall -W -Wshadow -g -c "$filename.c"                                                                                                        
    echo "Exit code $?"                                                                                                                  
    gcc -Wall -W -Wshadow -g "$filename.o" -o "$filename" -lm  
    ./"$filename"
}

Cuando ejecuto un programa, obtengo Exit code 0, ¿no debería obtener Exit code 1?

0
ramazan793 24 nov. 2019 a las 02:26

1 respuesta

La mejor respuesta

Como señalan los comentarios, el problema principal con el script actual es que muestra el estado de GCC y no el estado de ejecución. También tenga en cuenta que poner el 'eco' cambiará el $ ?. Suponiendo que desea una función 'combinada' que construirá, ejecutará y devolverá el estado

run () {
    gcc -Wall -W -Wshadow -g -c "$filename.c" || return $?
    gcc -Wall -W -Wshadow -g "$filename.o" -o "$filename" -lm  || return $?
    ./"$filename"
}
run
Status saved in $X
X=$?
echo "Status=$?

El estado del 'combo' se guarda en X, cero si todo está bien, distinto de cero en caso contrario (incluido el error de compilación, el error de compilación, etc.)

1
dash-o 24 nov. 2019 a las 08:41