Where Online Learning is simpler!
The C and C++ Include Header Files
cat -n /usr/include/x86_64-linux-gnu/c++/15/bits/os_defines.h
1 // Specific definitions for GNU/Linux -*- C++ -*- 2 3 // Copyright (C) 2000-2025 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 bits/os_defines.h 26 * This is an internal header file, included by other library headers. 27 * Do not attempt to use it directly. @headername{iosfwd} 28 */ 29 30 #ifndef _GLIBCXX_OS_DEFINES 31 #define _GLIBCXX_OS_DEFINES 1 32 33 // System-specific #define, typedefs, corrections, etc, go here. This 34 // file will come before all others. 35 36 // This keeps isalnum, et al from being propagated as macros. 37 #define __NO_CTYPE 1 38 39 #include <features.h> 40 41 // Provide a declaration for the possibly deprecated gets function, as 42 // glibc 2.15 and later does not declare gets for ISO C11 when 43 // __GNU_SOURCE is defined. 44 #if __GLIBC_PREREQ(2,15) && defined(_GNU_SOURCE) 45 # undef _GLIBCXX_HAVE_GETS 46 #endif 47 48 // Glibc 2.23 removed the obsolete isinf and isnan declarations. Check the 49 // version dynamically in case it has changed since libstdc++ was configured. 50 #define _GLIBCXX_NO_OBSOLETE_ISINF_ISNAN_DYNAMIC __GLIBC_PREREQ(2,23) 51 52 // Glibc 2.26 on i?86/x86-64/ia64/ppc64le added *f128 support. 53 // Glibc 2.27 added it also on many other arches but those have IEEE quad 54 // long double. 55 #if __GLIBC_PREREQ(2, 26) \ 56 && (defined(__i386__) || defined(__x86_64__) || defined (__ia64__) \ 57 || (defined(__powerpc__) && defined(_ARCH_PWR8) \ 58 && defined(__LITTLE_ENDIAN__) && (_CALL_ELF == 2) \ 59 && defined(__FLOAT128__))) 60 # define _GLIBCXX_HAVE_FLOAT128_MATH 1 61 #endif 62 63 // Enable __cxa_thread_atexit to rely on a (presumably libc-provided) 64 // __cxa_thread_atexit_impl, if it happens to be defined, even if 65 // configure couldn't find it during the build. 66 #define _GLIBCXX_MAY_HAVE___CXA_THREAD_ATEXIT_IMPL 1 67 68 #ifdef __linux__ 69 // The following libpthread properties only apply to Linux, not GNU/Hurd. 70 71 # if __GLIBC_PREREQ(2, 27) 72 // Since glibc 2.27 pthread_self() is usable without linking to libpthread. 73 # define _GLIBCXX_NATIVE_THREAD_ID pthread_self() 74 # else 75 // Before then it was in libc.so.6 but not libc.a, and always returns 0, 76 // which breaks the invariant this_thread::get_id() != thread::id{}. 77 // So only use it if we know the libpthread version is available. 78 // Otherwise use (__gthread_t)1 as the ID of the main (and only) thread. 79 # define _GLIBCXX_NATIVE_THREAD_ID \ 80 (__gthread_active_p() ? __gthread_self() : (__gthread_t)1) 81 # endif 82 83 # if __GLIBC_PREREQ(2, 34) 84 // Since glibc 2.34 all pthreads functions are usable without linking to 85 // libpthread. 86 # define _GLIBCXX_GTHREAD_USE_WEAK 0 87 # endif 88 #endif // __linux__ 89 90 #endif