私は最近、ac プログラムを書く gcc 3.2.2 の次の動作に出くわしました:
if ステートメントで、関数の中かっこを忘れて次のように書きました。
if(myFunc)...
それ以外のif(myFunc())...
ほとんどすべての警告をオンにしていますが、これはエラーも警告も生成しませんでした。
単純に と評価されましたtrue
。そもそもなぜこれが合法的なコードを書いているのでしょうか? 関数が存在する/アドレスがあるためですか?そのような間違いを回避する方法や、私が見落とした警告オプションがあるかどうかを知っている人はいますか? この問題は、後の gcc バージョンでより適切に解決されていますか?
完全を期すための正確なコンパイラ呼び出しは次のとおりです。
msp430-gcc -g -Os -mmcu=msp430x1611 -Wall -W -Wfloat-equal -Wundef -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wwrite-strings -Wsign-compare -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations
-Wredundant-decls -Wnested-externs -Wimplicit-function-declaration -Werror
(私は gcc 3.2.3 を使用せざるを得ないため、-Wextra はありません)