各種コンパイラで C 言語とC++ の小数型リテラル値の論理和を試す2018年10月05日 11時37分17秒

FreeBSD の LLVM で C 言語とC++ の小数型リテラル値の論理和を試すで、FreeBSD の LLVM の動作を確認したので、今回は、それ以外を一気に。

まずは、復讐を兼ねて FreeBSD 11.2-RELEASE の llvm の出力。

freebsd% cat logical-and-double.c
int main()
{   
    return 1 && .2;
}
freebsd% cc logical-and-double.c
logical-and-double.c:3:17: warning: implicit conversion from 'double' to '_Bool'
      changes value from 0.2 to true [-Wliteral-conversion]
    return 1 && .2;
             ~~ ^~
1 warning generated.
LLVM のみ、この様な警告を表示し、他のコンパイラは何も出さない。

AIX の xlc コンパイラで。

aix% cat logical-and-double.c
int main()
{   
    return 1 && .2;
}
aix% xlc logical-and-double.c 
aix%

Solaris の cc コンパイラ。

solaris% cat logical-and-double.c
int main()
{   
    return 1 && .2;
}
solaris% cc logical-and-double.c 
solaris%

最後に、Linux の gcc コンパイラ。

linux% cat logical-and-double.c
int main()
{   
    return 1 && .2;
}
linux% gcc logical-and-double.c
linux%

LLVM が一番厳しくコードを検査する様だ。

前回次回