1 // -*- C++ -*- forwarding header. 2 3 // Copyright (C) 1997-2014 Free Software Foundation, Inc. 4 // 5 // This file is part of the GNU ISO C++ Library. This library is free 6 // software; you can redistribute it and/or modify it under the 7 // terms of the GNU General Public License as published by the 8 // Free Software Foundation; either version 3, or (at your option) 9 // any later version. 10 11 // This library is distributed in the hope that it will be useful, 12 // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 // GNU General Public License for more details. 15 16 // Under Section 7 of GPL version 3, you are granted additional 17 // permissions described in the GCC Runtime Library Exception, version 18 // 3.1, as published by the Free Software Foundation. 19 20 // You should have received a copy of the GNU General Public License and 21 // a copy of the GCC Runtime Library Exception along with this program; 22 // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 23 // <http://www.gnu.org/licenses/>. 24 25 /** @file include/cstdlib 26 * This is a Standard C++ Library file. You should @c \#include this file 27 * in your programs, rather than any of the @a *.h implementation files. 28 * 29 * This is the C++ version of the Standard C Library header @c stdlib.h, 30 * and its contents are (mostly) the same as that header, but are all 31 * contained in the namespace @c std (except for names which are defined 32 * as macros in C). 33 */ 34 35 // 36 // ISO C++ 14882: 20.4.6 C library 37 // 38 39 #pragma GCC system_header 40 41 #include <bits/c++config.h> 42 43 #ifndef _GLIBCXX_CSTDLIB 44 #define _GLIBCXX_CSTDLIB 1 45 46 #if !_GLIBCXX_HOSTED 47 // The C standard does not require a freestanding implementation to 48 // provide <stdlib.h>. However, the C++ standard does still require 49 // <cstdlib> -- but only the functionality mentioned in 50 // [lib.support.start.term]. 51 52 #define EXIT_SUCCESS 0 53 #define EXIT_FAILURE 1 54 55 namespace std 56 { 57 extern "C" void abort(void) throw () _GLIBCXX_NORETURN; 58 extern "C" int atexit(void (*)(void)) throw (); 59 extern "C" void exit(int) throw () _GLIBCXX_NORETURN; 60 #if __cplusplus >= 201103L 61 # ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT 62 extern "C" int at_quick_exit(void (*)(void)) throw (); 63 # endif 64 # ifdef _GLIBCXX_HAVE_QUICK_EXIT 65 extern "C" void quick_exit(int) throw() _GLIBCXX_NORETURN; 66 # endif 67 #endif 68 } // namespace std 69 70 #else 71 72 #include <stdlib.h> 73 74 // Get rid of those macros defined in <stdlib.h> in lieu of real functions. 75 #undef abort 76 #undef abs 77 #undef atexit 78 #if __cplusplus >= 201103L 79 # ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT 80 # undef at_quick_exit 81 # endif 82 #endif 83 #undef atof 84 #undef atoi 85 #undef atol 86 #undef bsearch 87 #undef calloc 88 #undef div 89 #undef exit 90 #undef free 91 #undef getenv 92 #undef labs 93 #undef ldiv 94 #undef malloc 95 #undef mblen 96 #undef mbstowcs 97 #undef mbtowc 98 #undef qsort 99 #if __cplusplus >= 201103L 100 # ifdef _GLIBCXX_HAVE_QUICK_EXIT 101 # undef quick_exit 102 # endif 103 #endif 104 #undef rand 105 #undef realloc 106 #undef srand 107 #undef strtod 108 #undef strtol 109 #undef strtoul 110 #undef system 111 #undef wcstombs 112 #undef wctomb 113 114 namespace std _GLIBCXX_VISIBILITY(default) 115 { 116 _GLIBCXX_BEGIN_NAMESPACE_VERSION 117 118 using ::div_t; 119 using ::ldiv_t; 120 121 using ::abort; 122 using ::abs; 123 using ::atexit; 124 #if __cplusplus >= 201103L 125 # ifdef _GLIBCXX_HAVE_AT_QUICK_EXIT 126 using ::at_quick_exit; 127 # endif 128 #endif 129 using ::atof; 130 using ::atoi; 131 using ::atol; 132 using ::bsearch; 133 using ::calloc; 134 using ::div; 135 using ::exit; 136 using ::free; 137 using ::getenv; 138 using ::labs; 139 using ::ldiv; 140 using ::malloc; 141 #ifdef _GLIBCXX_HAVE_MBSTATE_T 142 using ::mblen; 143 using ::mbstowcs; 144 using ::mbtowc; 145 #endif // _GLIBCXX_HAVE_MBSTATE_T 146 using ::qsort; 147 #if __cplusplus >= 201103L 148 # ifdef _GLIBCXX_HAVE_QUICK_EXIT 149 using ::quick_exit; 150 # endif 151 #endif 152 using ::rand; 153 using ::realloc; 154 using ::srand; 155 using ::strtod; 156 using ::strtol; 157 using ::strtoul; 158 using ::system; 159 #ifdef _GLIBCXX_USE_WCHAR_T 160 using ::wcstombs; 161 using ::wctomb; 162 #endif // _GLIBCXX_USE_WCHAR_T 163 164 #ifndef __CORRECT_ISO_CPP_STDLIB_H_PROTO 165 inline long 166 abs(long __i) { return __builtin_labs(__i); } 167 168 inline ldiv_t 169 div(long __i, long __j) { return ldiv(__i, __j); } 170 #endif 171 172 #ifdef _GLIBCXX_USE_LONG_LONG 173 inline long long 174 abs(long long __x) { return __builtin_llabs (__x); } 175 #endif 176 177 #if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128) 178 inline __int128 179 abs(__int128 __x) { return __x >= 0 ? __x : -__x; } 180 #endif 181 182 _GLIBCXX_END_NAMESPACE_VERSION 183 } // namespace 184 185 #if _GLIBCXX_USE_C99 186 187 #undef _Exit 188 #undef llabs 189 #undef lldiv 190 #undef atoll 191 #undef strtoll 192 #undef strtoull 193 #undef strtof 194 #undef strtold 195 196 namespace __gnu_cxx _GLIBCXX_VISIBILITY(default) 197 { 198 _GLIBCXX_BEGIN_NAMESPACE_VERSION 199 200 #if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC 201 using ::lldiv_t; 202 #endif 203 #if _GLIBCXX_USE_C99_CHECK || _GLIBCXX_USE_C99_DYNAMIC 204 extern "C" void (_Exit)(int) throw () _GLIBCXX_NORETURN; 205 #endif 206 #if !_GLIBCXX_USE_C99_DYNAMIC 207 using ::_Exit; 208 #endif 209 210 #if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC 211 using ::llabs; 212 213 inline lldiv_t 214 div(long long __n, long long __d) 215 { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; } 216 217 using ::lldiv; 218 #endif 219 220 #if _GLIBCXX_USE_C99_LONG_LONG_CHECK || _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC 221 extern "C" long long int (atoll)(const char *) throw (); 222 extern "C" long long int 223 (strtoll)(const char * __restrict, char ** __restrict, int) throw (); 224 extern "C" unsigned long long int 225 (strtoull)(const char * __restrict, char ** __restrict, int) throw (); 226 #endif 227 #if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC 228 using ::atoll; 229 using ::strtoll; 230 using ::strtoull; 231 #endif 232 using ::strtof; 233 using ::strtold; 234 235 _GLIBCXX_END_NAMESPACE_VERSION 236 } // namespace __gnu_cxx 237 238 namespace std 239 { 240 #if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC 241 using ::__gnu_cxx::lldiv_t; 242 #endif 243 using ::__gnu_cxx::_Exit; 244 #if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC 245 using ::__gnu_cxx::llabs; 246 using ::__gnu_cxx::div; 247 using ::__gnu_cxx::lldiv; 248 #endif 249 using ::__gnu_cxx::atoll; 250 using ::__gnu_cxx::strtof; 251 using ::__gnu_cxx::strtoll; 252 using ::__gnu_cxx::strtoull; 253 using ::__gnu_cxx::strtold; 254 } // namespace std 255 256 #endif // _GLIBCXX_USE_C99 257 258 #endif // !_GLIBCXX_HOSTED 259 260 #endif 261