FreeBSD の LLVM で C 言語の整数型リテラル値とマクロ定数の論理和を試す ― 2018年09月24日 11時33分41秒
確かに直打ちの定数では暗算で簡単に出来るかも知れない。それなら、マクロではどうなるかと思ったのが発端だ。
マクロを使って定数を書いてみた。このファイルでは上記されているが、業と読みづらくしたいのなら、読み込むヘッダファイルやコマンドラインからの変更も行える。
freebsd% cat logical-and-macro-int.c
#define TWO 2
int main()
{
return 1 && TWO;
}
LLVM の C コンパイラは、マクロの定数の論理和も好まないようだ。それなら、マクロの値をコマンドラインから渡してやる。
freebsd% cc logical-and-macro-int.c
logical-and-macro-int.c:4:14: warning: use of logical '&&' with constant operand
[-Wconstant-logical-operad]
return 1 && TWO;
^ ~~~
logical-and-macro-int.c:4:14: note: use '&' for a bitwise operation
return 1 && TWO;
^~
&
logical-and-macro-int.c:4:14: note: remove constant to silence this warning
return 1 && TWO;
~^~~~~~
1 warning generated.
SECRET の値を定義しないともちろんエラーになるが、 LLVM は SECRET がマクロであることに不満はないようだ。
freebsd% cat logical-and-secret-macro-int.c
int main()
{
return 1 && SECRET;
}
freebsd% cc logical-and-secret-macro-int.c
logical-and-secret-macro-int.c:3:17: error: use of undeclared identifier
'SECRET'
return 1 && SECRET;
^
1 error generated.
freebsd% cc -DSECRET=1 logical-and-secret-macro-int.c
freebsd% cc -DSECRET=0 logical-and-secret-macro-int.c
FreeBSD 11.2-RELEASE の LLVM 6.0.0 を利用。
最近のコメント