2015/03/21

[c/c++]enumの符号

mbedでソースを書いているのだが、引数がenumで、一応範囲チェックをしようとした。
こんな感じ。

enum EnumKuma {
  FIRST,
  SECOND,
  THIRD
};

int Func(EnumKuma kuma)
{
  if ((kuma < FIRST) || (THIRD < kuma)) {
    return -1;
  }
・・・

 

そうすると、「kumaは0より小さくなることはない」みたいな警告が出てくる。
あれ、enumってint型扱いじゃないんだっけ?

Signedness of enum in C/C99/C++/C++x/GNU C/GNU C99 - Stack Overflow

整数型ではあるが、符号についてはコンパイラ依存とのこと。
ほほぅ、そうだったのか。
ARMのコンパイラ(armccかな?)では、一番小さい符号型にあわせられるらしい。

ARM Information Center

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。