std_limits.h
来自「gcc3.2.1源代码」· C头文件 代码 · 共 1,756 行 · 第 1/5 页
H
1,756 行
// The template and inlines for the -*- C++ -*- numeric_limits classes.// Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.//// This file is part of the GNU ISO C++ Library. This library is free// software; you can redistribute it and/or modify it under the// terms of the GNU General Public License as published by the// Free Software Foundation; either version 2, or (at your option)// any later version.// This library is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License along// with this library; see the file COPYING. If not, write to the Free// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,// USA.// As a special exception, you may use this file as part of a free software// library without restriction. Specifically, if other files instantiate// templates or use macros or inline functions from this file, or you compile// this file and link it with other files to produce an executable, this// file does not by itself cause the resulting executable to be covered by// the GNU General Public License. This exception does not however// invalidate any other reasons why the executable file might be covered by// the GNU General Public License.// Note: this is not a conforming implementation.// Written by Gabriel Dos Reis <gdr@codesourcery.com>//// ISO 14882:1998// 18.2.1///** @file limits * This is a Standard C++ Library header. You should @c #include this header * in your programs, rather than any of the "st[dl]_*.h" implementation files. */#ifndef _CPP_NUMERIC_LIMITS#define _CPP_NUMERIC_LIMITS 1#pragma GCC system_header#include <bits/cpu_limits.h>#include <bits/c++config.h>//// The numeric_limits<> traits document implementation-defined aspects// of fundamental arithmetic data types (integers and floating points).// From Standard C++ point of view, there are 13 such types:// * integers// bool (1)// char, signed char, unsigned char (3)// short, unsigned short (2)// int, unsigned (2)// long, unsigned long (2)//// * floating points// float (1)// double (1)// long double (1)//// GNU C++ undertstands (where supported by the host C-library) // * integer// long long, unsigned long long (2)//// which brings us to 15 fundamental arithmetic data types in GNU C++.//// // Since a numeric_limits<> is a bit tricky to get right, we rely on// an interface composed of macros which should be defined in config/os// or config/cpu when they differ from the generic (read arbitrary)// definitions given here.//// These values can be overridden in the target configuration file.// The default values are appropriate for many 32-bit targets.#ifndef __glibcpp_char_bits#define __glibcpp_char_bits 8#endif#ifdef __CHAR_UNSIGNED__#define __glibcpp_plain_char_is_signed false#else#define __glibcpp_plain_char_is_signed true#endif#ifndef __glibcpp_short_bits#define __glibcpp_short_bits 16#endif#ifndef __glibcpp_int_bits#define __glibcpp_int_bits 32#endif#ifndef __glibcpp_long_bits#define __glibcpp_long_bits 32#endif#ifndef __glibcpp_wchar_t_bits#define __glibcpp_wchar_t_bits 32#endif#ifndef __glibcpp_wchar_t_is_signed#define __glibcpp_wchar_t_is_signed true#endif#ifndef __glibcpp_long_long_bits#define __glibcpp_long_long_bits 64#endif#ifndef __glibcpp_float_bits#define __glibcpp_float_bits 32#endif#ifndef __glibcpp_double_bits#define __glibcpp_double_bits 64#endif#ifndef __glibcpp_long_double_bits#define __glibcpp_long_double_bits 128#endif#ifndef __glibcpp_char_traps#define __glibcpp_char_traps true#endif#ifndef __glibcpp_short_traps#define __glibcpp_short_traps true#endif#ifndef __glibcpp_int_traps#define __glibcpp_int_traps true#endif#ifndef __glibcpp_long_traps#define __glibcpp_long_traps true#endif#ifndef __glibcpp_wchar_t_traps#define __glibcpp_wchar_t_traps true#endif#ifndef __glibcpp_long_long_traps#define __glibcpp_long_long_traps true#endif// You should not need to define any macros below this point, unless// you have a machine with non-standard bit-widths.// These values are the minimums and maximums for standard data types// of common widths.#define __glibcpp_s8_max 127#define __glibcpp_s8_min (-__glibcpp_s8_max - 1)#define __glibcpp_s8_digits 7#define __glibcpp_s8_digits10 2#define __glibcpp_u8_min 0U#define __glibcpp_u8_max (__glibcpp_s8_max * 2 + 1)#define __glibcpp_u8_digits 8#define __glibcpp_u8_digits10 2#define __glibcpp_s16_max 32767#define __glibcpp_s16_min (-__glibcpp_s16_max - 1)#define __glibcpp_s16_digits 15#define __glibcpp_s16_digits10 4#define __glibcpp_u16_min 0U#define __glibcpp_u16_max (__glibcpp_s16_max * 2 + 1)#define __glibcpp_u16_digits 16#define __glibcpp_u16_digits10 4#define __glibcpp_s32_max 2147483647L#define __glibcpp_s32_min (-__glibcpp_s32_max - 1)#define __glibcpp_s32_digits 31#define __glibcpp_s32_digits10 9#define __glibcpp_u32_min 0UL#define __glibcpp_u32_max (__glibcpp_s32_max * 2U + 1)#define __glibcpp_u32_digits 32#define __glibcpp_u32_digits10 9#define __glibcpp_s64_max 9223372036854775807LL#define __glibcpp_s64_min (-__glibcpp_s64_max - 1)#define __glibcpp_s64_digits 63#define __glibcpp_s64_digits10 18#define __glibcpp_u64_min 0ULL#define __glibcpp_u64_max (__glibcpp_s64_max * 2ULL + 1)#define __glibcpp_u64_digits 64#define __glibcpp_u64_digits10 19#define __glibcpp_f32_min 1.17549435e-38F#define __glibcpp_f32_max 3.40282347e+38F#define __glibcpp_f32_digits 24#define __glibcpp_f32_digits10 6#define __glibcpp_f32_radix 2#define __glibcpp_f32_epsilon 1.19209290e-07F#define __glibcpp_f32_round_error 1.0F#define __glibcpp_f32_min_exponent -125#define __glibcpp_f32_min_exponent10 -37#define __glibcpp_f32_max_exponent 128#define __glibcpp_f32_max_exponent10 38#define __glibcpp_f64_min 2.2250738585072014e-308#define __glibcpp_f64_max 1.7976931348623157e+308#define __glibcpp_f64_digits 53#define __glibcpp_f64_digits10 15#define __glibcpp_f64_radix 2#define __glibcpp_f64_epsilon 2.2204460492503131e-16#define __glibcpp_f64_round_error 1.0#define __glibcpp_f64_min_exponent -1021#define __glibcpp_f64_min_exponent10 -307#define __glibcpp_f64_max_exponent 1024#define __glibcpp_f64_max_exponent10 308#define __glibcpp_f80_min 3.36210314311209350626e-4932L#define __glibcpp_f80_max 1.18973149535723176502e+4932L#define __glibcpp_f80_digits 64#define __glibcpp_f80_digits10 18#define __glibcpp_f80_radix 2#define __glibcpp_f80_epsilon 1.08420217248550443401e-19L#define __glibcpp_f80_round_error 1.0L#define __glibcpp_f80_min_exponent -16381#define __glibcpp_f80_min_exponent10 -4931#define __glibcpp_f80_max_exponent 16384#define __glibcpp_f80_max_exponent10 4932#define __glibcpp_f96_min 1.68105157155604675313e-4932L#define __glibcpp_f96_max 1.18973149535723176502e+4932L#define __glibcpp_f96_digits 64#define __glibcpp_f96_digits10 18#define __glibcpp_f96_radix 2#define __glibcpp_f96_epsilon 1.08420217248550443401e-19L#define __glibcpp_f96_round_error 1.0L#define __glibcpp_f96_min_exponent -16382#define __glibcpp_f96_min_exponent10 -4931#define __glibcpp_f96_max_exponent 16384#define __glibcpp_f96_max_exponent10 4932#define __glibcpp_f128_min 3.362103143112093506262677817321752603E-4932L#define __glibcpp_f128_max 1.189731495357231765085759326628007016E+4932L#define __glibcpp_f128_digits 113#define __glibcpp_f128_digits10 33#define __glibcpp_f128_radix 2#define __glibcpp_f128_epsilon 1.925929944387235853055977942584927319E-34L#define __glibcpp_f128_round_error 1.0L#define __glibcpp_f128_min_exponent -16381#define __glibcpp_f128_min_exponent10 -4931#define __glibcpp_f128_max_exponent 16384#define __glibcpp_f128_max_exponent10 4932// bool-specific hooks:// __glibcpp_bool_digits __glibcpp_int_traps __glibcpp_long_traps#ifndef __glibcpp_bool_digits#define __glibcpp_bool_digits 1#endif// char.#define __glibcpp_plain_char_traps true#define __glibcpp_signed_char_traps true#define __glibcpp_unsigned_char_traps true#ifndef __glibcpp_char_is_modulo#define __glibcpp_char_is_modulo true#endif#ifndef __glibcpp_signed_char_is_modulo#define __glibcpp_signed_char_is_modulo true#endif#if __glibcpp_char_bits == 8#define __glibcpp_signed_char_min __glibcpp_s8_min#define __glibcpp_signed_char_max __glibcpp_s8_max#define __glibcpp_signed_char_digits __glibcpp_s8_digits#define __glibcpp_signed_char_digits10 __glibcpp_s8_digits10#define __glibcpp_unsigned_char_min __glibcpp_u8_min#define __glibcpp_unsigned_char_max __glibcpp_u8_max#define __glibcpp_unsigned_char_digits __glibcpp_u8_digits#define __glibcpp_unsigned_char_digits10 __glibcpp_u8_digits10#elif __glibcpp_char_bits == 16#define __glibcpp_signed_char_min __glibcpp_s16_min#define __glibcpp_signed_char_max __glibcpp_s16_max#define __glibcpp_signed_char_digits __glibcpp_s16_digits#define __glibcpp_signed_char_digits10 __glibcpp_s16_digits10#define __glibcpp_unsigned_char_min __glibcpp_u16_min#define __glibcpp_unsigned_char_max __glibcpp_u16_max#define __glibcpp_unsigned_char_digits __glibcpp_u16_digits#define __glibcpp_unsigned_char_digits10 __glibcpp_u16_digits10#elif __glibcpp_char_bits == 32#define __glibcpp_signed_char_min (signed char)__glibcpp_s32_min#define __glibcpp_signed_char_max (signed char)__glibcpp_s32_max#define __glibcpp_signed_char_digits __glibcpp_s32_digits#define __glibcpp_signed_char_digits10 __glibcpp_s32_digits10#define __glibcpp_unsigned_char_min (unsigned char)__glibcpp_u32_min#define __glibcpp_unsigned_char_max (unsigned char)__glibcpp_u32_max#define __glibcpp_unsigned_char_digits __glibcpp_u32_digits#define __glibcpp_unsigned_char_digits10 __glibcpp_u32_digits10#elif __glibcpp_char_bits == 64#define __glibcpp_signed_char_min (signed char)__glibcpp_s64_min#define __glibcpp_signed_char_max (signed char)__glibcpp_s64_max#define __glibcpp_signed_char_digits __glibcpp_s64_digits#define __glibcpp_signed_char_digits10 __glibcpp_s64_digits10#define __glibcpp_unsigned_char_min (unsigned char)__glibcpp_u64_min#define __glibcpp_unsigned_char_max (unsigned char)__glibcpp_u64_max#define __glibcpp_unsigned_char_digits __glibcpp_u64_digits#define __glibcpp_unsigned_char_digits10 __glibcpp_u64_digits10#else// You must define these macros in the configuration file.#endif#if __glibcpp_plain_char_is_signed#define __glibcpp_char_min (char)__glibcpp_signed_char_min#define __glibcpp_char_max (char)__glibcpp_signed_char_max#define __glibcpp_char_digits __glibcpp_signed_char_digits#define __glibcpp_char_digits10 __glibcpp_signed_char_digits10#else#define __glibcpp_char_min (char)__glibcpp_unsigned_char_min#define __glibcpp_char_max (char)__glibcpp_unsigned_char_max#define __glibcpp_char_digits __glibcpp_unsigned_char_digits#define __glibcpp_char_digits10 __glibcpp_unsigned_char_digits10#endif// short#define __glibcpp_signed_short_traps true#define __glibcpp_unsigned_short_traps true#ifndef __glibcpp_signed_short_is_modulo#define __glibcpp_signed_short_is_modulo true#endif#if __glibcpp_short_bits == 8#define __glibcpp_signed_short_min __glibcpp_s8_min#define __glibcpp_signed_short_max __glibcpp_s8_max#define __glibcpp_signed_short_digits __glibcpp_s8_digits#define __glibcpp_signed_short_digits10 __glibcpp_s8_digits10#define __glibcpp_unsigned_short_min __glibcpp_u8_min#define __glibcpp_unsigned_short_max __glibcpp_u8_max#define __glibcpp_unsigned_short_digits __glibcpp_u8_digits#define __glibcpp_unsigned_short_digits10 __glibcpp_u8_digits10#elif __glibcpp_short_bits == 16#define __glibcpp_signed_short_min __glibcpp_s16_min#define __glibcpp_signed_short_max __glibcpp_s16_max#define __glibcpp_signed_short_digits __glibcpp_s16_digits#define __glibcpp_signed_short_digits10 __glibcpp_s16_digits10#define __glibcpp_unsigned_short_min __glibcpp_u16_min#define __glibcpp_unsigned_short_max __glibcpp_u16_max#define __glibcpp_unsigned_short_digits __glibcpp_u16_digits#define __glibcpp_unsigned_short_digits10 __glibcpp_u16_digits10#elif __glibcpp_short_bits == 32#define __glibcpp_signed_short_min (short)__glibcpp_s32_min#define __glibcpp_signed_short_max (short)__glibcpp_s32_max#define __glibcpp_signed_short_digits __glibcpp_s32_digits#define __glibcpp_signed_short_digits10 __glibcpp_s32_digits10#define __glibcpp_unsigned_short_min (unsigned short)__glibcpp_u32_min#define __glibcpp_unsigned_short_max (unsigned short)__glibcpp_u32_max#define __glibcpp_unsigned_short_digits __glibcpp_u32_digits#define __glibcpp_unsigned_short_digits10 __glibcpp_u32_digits10#elif __glibcpp_short_bits == 64#define __glibcpp_signed_short_min (short)__glibcpp_s64_min#define __glibcpp_signed_short_max (short)__glibcpp_s64_max#define __glibcpp_signed_short_digits __glibcpp_s64_digits#define __glibcpp_signed_short_digits10 __glibcpp_s64_digits10#define __glibcpp_unsigned_short_min (unsigned short)__glibcpp_u64_min#define __glibcpp_unsigned_short_max (unsigned short)__glibcpp_u64_max#define __glibcpp_unsigned_short_digits __glibcpp_u64_digits#define __glibcpp_unsigned_short_digits10 __glibcpp_u64_digits10#else// You must define these macros in the configuration file.#endif// int#define __glibcpp_signed_int_traps true
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?