//
Since we don't want this visible in C, we put it in a comment.
&>/dev/null
Unfortunately //
is interpreted as an invalid shell command and produces an error message, so we need to redirect that to /dev/null
to get rid of it.
;x="${0%.*}"
This determines what our compiled filename will be by using string replacement to get rid of any extensions on the current filename.
;[ ! "$x" -ot "$0" ]||
This check if there already is a compiled version newer than the source file. If not...
(rm -f "$x";cc -o "$x" "$0")
...we delete any existing version and then compile our code, using our chosen compiled filename.
&&exec "$x" "$@"
If the compile was successful or unnecessary, pass execution to the compiled code, passing on the arguments given to this script.