謎の warning: array subscript has type 'char'
どもです。
筋トレの効果か,若干,大胸筋の形が変わったかなぁと,
いや,変わっているぞ,と自分に言い聞かせて,よっしゃよっしゃと
思っているです。
さて,久しぶりに,C を使う機会がありました。
ほいで,タイトルの warning が出てなんじゃこりゃ? と。
warning ゼロ運動推進派としてはほっておけないわけです。
で,マルタイを抜き出すと下記の通り。
コンパイルオプションは,gcc -Wall -W -g test_isalpha.c -o test_isalpha です。
cygwin 1.7.7, gcc4。
結果,調べたけどわからなかった。orz。すんまそん。
というかさぁ,そもそもインデックスに char を使ってねえし。
isalpha() に渡すときのみ警告され,下の方で,0 で参照する際は怒られない。
うーん。謎だ。0 が char と解釈されている?
だとすると,下の方でも警告がでないと筋が通らんぞ。ぷんぷん。
この現象の理由を知っている人いたら教えて下さい。
isalpha ってマクロだったよね,たしか。そするとそのマクロを展開してみると
わかるのかも・・・?
#include <stdio.h> #include <ctype.h> int main(void) { char buf[128] = { '\0' }; /* test_isalpha.c:8: warning: array subscript has type 'char' */ if (isalpha(buf[0])) { printf("isalpha\n"); } /* no warning issued */ int c = buf[0]; if (isalpha(c)) { printf("isalpha\n"); } return 0; }