謎の 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;
}