GCC vs CLang:root@Csabi:~/lw/wav28svx# gcc wav28svx.c -O2 -o wav28svx && strip --strip-all wav28svx
root@Csabi:~/lw/wav28svx# clang wav28svx.c -O2 -o wav28svx && strip --strip-all wav28svx
wav28svx.c:261:13: warning: & has lower precedence than !=; != will be evaluated
first [-Wparentheses]
if (cnv & sign[bps] != 0)
^~~~~~~~~~~~~~~~
( )
wav28svx.c:261:13: note: place parentheses around the & expression to evaluate
it first
if (cnv & sign[bps] != 0)
^
( )
wav28svx.c:270:13: warning: using the result of an assignment as a condition
without parentheses [-Wparentheses]
if (dpos = 16384)
~~~~~^~~~~~~
( )
wav28svx.c:270:13: note: use '==' to turn this assignment into an equality
comparison
if (dpos = 16384)
^
==
4 diagnostics generated. A GCC szó nélkül lefordította, a CLang meg felhívta a figyelmem két olyan hibára is, ami szétbaszta volna a programot. Az egyenlőségjel még csakcsak kiszúrható, ha az ember tüzetesebben nézi a kódot, viszont a másik az sok időnyi debugba került volna, főleg mivel ez eszébe sem jut az embernek, hogy egy bináris operátor alacsonyabbrendű, mint egy logikai... Tényleg ezt magyarázza már el valaki, hogy C-ben egy bináris operátornak miért kisebb a prioritása, mint egy logikainak? |