Narrowest signed type
出典: GCC Wikia
目次 |
[編集] このページを編集する際は,編集に関する方針に従ってください.
[編集] 概要
- gcc-4.1.0/gcc/c-lex.cにて定義
- 型の決定
[編集] 引数
- unsigned HOST_WIDE_INT low
- unsigned HOST_WIDE_INT high
- unsigned int flags
[編集] 概要
526 /* Ditto, but narrowest signed type. */ 527 static enum integer_type_kind 528 narrowest_signed_type (unsigned HOST_WIDE_INT low, 529 unsigned HOST_WIDE_INT high, unsigned int flags) 530 { 531 enum integer_type_kind itk; 532
- flagを元に型を求める
533 if ((flags & CPP_N_WIDTH) == CPP_N_SMALL) 534 itk = itk_int; 535 else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM) 536 itk = itk_long; 537 else 538 itk = itk_long_long; 539 540
- 先ほど決めた型の調整
541 for (; itk < itk_none; itk += 2 /* skip signed types */) 542 { 543 tree upper = TYPE_MAX_VALUE (integer_types[itk]); 544 545 if ((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (upper) > high 546 || ((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (upper) == high 547 && TREE_INT_CST_LOW (upper) >= low)) 548 return itk; 549 } 550 551 return itk_none; 552 }
