Narrowest unsigned type
出典: GCC Wikia
目次 |
[編集] このページを編集する際は,編集に関する方針に従ってください.
[編集] 概要
- gcc-4.1.0/gcc/c-lex.cにて定義
- 型の決定
[編集] 引数
- unsigned HOST_WIDE_INT low
- unsigned HOST_WIDE_INT high
- unsigned int flags
[編集] 実装
495 /* Returns the narrowest C-visible unsigned type, starting with the 496 minimum specified by FLAGS, that can fit HIGH:LOW, or itk_none if 497 there isn't one. */ 498 499 static enum integer_type_kind 500 narrowest_unsigned_type (unsigned HOST_WIDE_INT low, 501 unsigned HOST_WIDE_INT high, 502 unsigned int flags) 503 { 504 enum integer_type_kind itk; 505
- flagを元に型を求める
506 if ((flags & CPP_N_WIDTH) == CPP_N_SMALL) 507 itk = itk_unsigned_int; 508 else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM) 509 itk = itk_unsigned_long; 510 else 511 itk = itk_unsigned_long_long; 512
- 先ほど決めたものを元に型の調整
513 for (; itk < itk_none; itk += 2 /* skip unsigned types */) 514 { 515 tree upper = TYPE_MAX_VALUE (integer_types[itk]); 516 517 if ((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (upper) > high 518 || ((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (upper) == high 519 && TREE_INT_CST_LOW (upper) >= low)) 520 return itk; 521 } 522
- 当てはまるものがなかった
523 return itk_none; 524 }
