BOOLでちょっとしたお遊び
Objective-Cでは、
boolean型としてBOOLが提供されています。
ふと思いついたので、
BOOLで少しばかし遊んでみようかと思います。
内容はしょうもないですけどね。
下のコードみたいなことをしても、大丈夫なのです。
ただし、おすすめはしない。
というかやるべきではない。
BOOL str[] = "abCdef"; // アルファベットの小文字は大文字へ // 大文字は小文字へ printf("before onvert:%s\n", str); for ( int i=0; i<strlen( (char*)str ); i++) { if ( 65 <= str[i] && str[i] <= 90) str[i] += 32; else if ( 97<= str[i] && str[i] <= 119) str[i] -= 32; } printf("after onvert:%s\n", str);
BOOLの正体について
上のコードについては
BOOLの正体を知っている方、もしくは、察しの良い方にとっては、
「あぁ〜」
って感じでしょうか。
なにはともあれ、友達と仲良くなるには、
まず相手のことを知っていく必要があります。
では、早速BOOLを丸裸にしてやりましょう。
objc.hにBOOLの定義が書かれています。
BOOL は signed char で typedefされたもの
(google style guide では、
unsigned charと記述されていますが、
実際にobjc.hを見るとsigned char でした。
まぁ、何かがあったのでしょう。)
そう、BOOLの正体はsigned char でした。
では、YES と NO はというと、
それぞれ1と0をBOOLでキャストしたものです。
そして、上記コードからも分かる通り
BOOL は YES/NO 以外の値も取り得る
ことがわかります。
変な書き方するとバグ発生です。
BOOL型にキャストされたものとYESを比較したりとか。。。
気をつけましょう。