config_info.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 1,083 行 · 第 1/3 页
CPP
1,083 行
// Boost config.hpp configuration test program file -----------------------//// (C) Copyright John Maddock 2001 - 2003. // (C) Copyright Jens Maurer 2001. // (C) Copyright Peter Dimov 2001. // (C) Copyright Darin Adler 2001. // (C) Copyright Beman Dawes 2002. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)// See http://www.boost.org/libs/config for most recent version.//// Revision $Id: config_info.cpp 49212 2008-10-09 16:08:03Z johnmaddock $//#include <boost/config.hpp>#include <boost/version.hpp>#include <iostream>#include <iomanip>#include <string.h>#include <limits.h>#include <stdlib.h>#include <stddef.h>#ifdef BOOST_HAS_UNISTD_H#include <unistd.h>#endifstatic unsigned int indent = 4;static unsigned int width = 40;using std::cout;using std::istream;void print_macro(const char* name, const char* value){ // if name == value+1 then then macro is not defined, // in which case we don't print anything: if(0 != strcmp(name, value+1)) { for(unsigned i = 0; i < indent; ++i) std::cout.put(' '); std::cout << std::setw(width); cout.setf(istream::left, istream::adjustfield); std::cout << name; if(value[1]) { // macro has a value: std::cout << value << "\n"; } else { // macro is defined but has no value: std::cout << " [no value]\n"; } }}#define PRINT_MACRO(X) print_macro(#X, BOOST_STRINGIZE(=X))template <class T>void print_expression(const char* expression, T val){ for(unsigned i = 0; i < indent; ++i) std::cout.put(' '); std::cout << std::setw(width); std::cout.setf(istream::left, istream::adjustfield); std::cout << expression << "=" << val << std::endl;}#define PRINT_EXPRESSION(E) print_expression(#E, E);template <class T>void print_byte_order(const char* what, T /* t */ ){ T val = 0; unsigned i; for(i = 1; i < sizeof(T); ++i) { val |= (CHAR_BIT * static_cast<T>(i)) << (CHAR_BIT * static_cast<T>(i)); } const char* p = reinterpret_cast<const char*>(&val); for(i = 0; i < indent; ++i) std::cout.put(' '); std::cout << std::setw(width); std::cout.setf(istream::left, istream::adjustfield); std::cout << what << "="; for(i = 0; i < sizeof(T); ++i) { std::cout << (int)p[i] << " "; } std::cout << std::endl;}#define PRINT_ORDER(T) print_byte_order(BOOST_STRINGIZE(byte order for type T), T())template <class T>void print_sign(const char* what, T t){ t = static_cast<T>(-1); // cast suppresses warnings for(unsigned i = 0; i < indent; ++i) std::cout.put(' '); std::cout << "Type " << what << " is " << ((t > 0) ? "unsigned" : "signed") << std::endl;}#define PRINT_SIGN(T) print_sign(#T, T())void print_compiler_macros(){ std::cout << BOOST_COMPILER << "\n"; // Borland options: PRINT_MACRO(__BORLANDC__); PRINT_MACRO(__CDECL__); PRINT_MACRO(_CHAR_UNSIGNED); PRINT_MACRO(__CODEGUARD__); PRINT_MACRO(__CONSOLE__); PRINT_MACRO(_CPPUNWIND); PRINT_MACRO(__cplusplus); PRINT_MACRO(__FLAT__); PRINT_MACRO(__FUNC__); PRINT_MACRO(_M_IX86); PRINT_MACRO(__MSDOS__); PRINT_MACRO(__MT__ ); PRINT_MACRO(__PASCAL__); PRINT_MACRO(__STDC__); PRINT_MACRO(__TLS__); PRINT_MACRO(_WCHAR_T); PRINT_MACRO(_Windows); PRINT_MACRO(__WIN32__); PRINT_MACRO(_WIN32); PRINT_MACRO(_WIN64); PRINT_MACRO(_WIN32_WCE); PRINT_MACRO(WIN32); PRINT_MACRO(_RTLDLL); PRINT_MACRO(__DEBUG);// Internal MSVC 7 error workaround (Peter Dimov)#ifndef _NATIVE_WCHAR_T_DEFINED PRINT_MACRO(_WCHAR_T_DEFINED);#endif // MSVC macros: PRINT_MACRO(_CPPRTTI); PRINT_MACRO(_DLL); PRINT_MACRO(_M_ALPHA); PRINT_MACRO(_M_MPPC); PRINT_MACRO(_M_MRX000); PRINT_MACRO(_M_PPC); PRINT_MACRO(_MFC_VER); PRINT_MACRO(_MSC_EXTENSIONS); PRINT_MACRO(_MSC_VER); PRINT_MACRO(_MSC_FULL_VER); PRINT_MACRO(_MT); PRINT_MACRO(_NATIVE_WCHAR_T_DEFINED); // GNUC options: PRINT_MACRO(__GNUC__); PRINT_MACRO(__GNUC_MINOR__); PRINT_MACRO(__STDC_VERSION__); PRINT_MACRO(__GNUG__); PRINT_MACRO(__STRICT_ANSI__); PRINT_MACRO(__VERSION__); PRINT_MACRO(__OPTIMIZE__); PRINT_MACRO(__CHAR_UNSIGNED__); PRINT_MACRO(__REGISTER_PREFIX__); PRINT_MACRO(__USER_LABEL_PREFIX__); PRINT_MACRO(__GNUPRO__); PRINT_MACRO(__EXCEPTIONS); PRINT_MACRO(__FreeBSD__); PRINT_MACRO(__FreeBSD_cc_version); PRINT_MACRO(__ELF__); PRINT_MACRO(__GNUPRO__); PRINT_MACRO(unix); PRINT_MACRO(bsd); PRINT_MACRO(vax); PRINT_MACRO(mc68000); PRINT_MACRO(m68k); PRINT_MACRO(M68020); PRINT_MACRO(_AM29K); PRINT_MACRO(ns32000); PRINT_MACRO(sun); PRINT_MACRO(pyr); PRINT_MACRO(sequent); PRINT_MACRO(__i386__); PRINT_MACRO(__sparc); PRINT_MACRO(__sparc__); PRINT_MACRO(__powerpc__); PRINT_MACRO(__hppa); PRINT_MACRO(__CYGWIN__); PRINT_MACRO(__MINGW32__); // HP aCC: PRINT_MACRO(__HP_aCC); PRINT_MACRO(_HPACC_); PRINT_MACRO(__LP64__); PRINT_MACRO(__RISC2_0__); PRINT_MACRO(__STDCPP__); PRINT_MACRO(__hppa); PRINT_MACRO(__hpux); PRINT_MACRO(__hp9000s800); PRINT_MACRO(__hp9000s700); PRINT_MACRO(_PA_RISC1_1); PRINT_MACRO(__HPUX_SOURCE); PRINT_MACRO(_INCLUDE__STDC_A1_SOURCE); // SGI IRIX: PRINT_MACRO(__sgi); PRINT_MACRO(_COMPILER_VERSION); // Sunpro: PRINT_MACRO(__SUNPRO_CC); PRINT_MACRO(__SUNPRO_CC_COMPAT); PRINT_MACRO(__BUILTIN_VA_ARG_INCR); PRINT_MACRO(__sun); PRINT_MACRO(__SVR4); PRINT_MACRO(__unix); PRINT_MACRO(__sparcv9); PRINT_MACRO(__i386); PRINT_MACRO(i386); // Metrowerks PRINT_MACRO(__MWERKS__); PRINT_MACRO(__MSL__); PRINT_MACRO(__MSL_CPP__); PRINT_MACRO(__A5__); PRINT_MACRO(__embedded_cplusplus); PRINT_MACRO(__fourbyteints__); PRINT_MACRO(__IEEEdoubles__); PRINT_MACRO(__MC68K__); PRINT_MACRO(__MC68020__); PRINT_MACRO(__MC68881__); PRINT_MACRO(__MIPS__); PRINT_MACRO(__MIPS_ISA2__); PRINT_MACRO(__MIPS_ISA3__); PRINT_MACRO(__MIPS_ISA4__); PRINT_MACRO(__MWBROWSER__); PRINT_MACRO(__profile__); PRINT_MACRO(__powerc); PRINT_MACRO(_powerc); PRINT_MACRO(__POWERPC__); PRINT_MACRO(macintosh); PRINT_MACRO(__MACH__); PRINT_MACRO(__APPLE__); PRINT_MACRO(__APPLE_CC__); // MPW (MrCpp and SCpp) PRINT_MACRO(__MRC__); PRINT_MACRO(__SC__); PRINT_MACRO(__FPCE__); PRINT_MACRO(__FPCE_IEEE__); PRINT_MACRO(MPW_CPLUS); PRINT_MACRO(MPW_C); PRINT_MACRO(__MC601); PRINT_MACRO(__POWERPC); PRINT_MACRO(__useAppleExts__); PRINT_MACRO(powerc); PRINT_MACRO(MC68000); PRINT_MACRO(THINK_PLUS); PRINT_MACRO(mc68881); PRINT_MACRO(__FAR_CODE__); PRINT_MACRO(__FAR_DATA__); PRINT_MACRO(__CFM68K__); // EDG PRINT_MACRO(__EDG__); PRINT_MACRO(__EDG_VERSION__); PRINT_MACRO(c_plusplus); // indication for strict mode PRINT_MACRO(_BOOL); PRINT_MACRO(_EXPLICIT); PRINT_MACRO(__SIGNED_CHARS__); PRINT_MACRO(_TYPENAME); PRINT_MACRO(_WCHAR_T); PRINT_MACRO(__ARRAY_OPERATORS); PRINT_MACRO(__EDG_ABI_COMPATIBILITY_VERSION); PRINT_MACRO(__EDG_IMPLICIT_USING_STD); PRINT_MACRO(__EDG_RUNTIME_USES_NAMESPACES); PRINT_MACRO(__BOOL_DEFINED); PRINT_MACRO(__RTTI); PRINT_MACRO(__PLACEMENT_DELETE); PRINT_MACRO(__NO_LONG_LONG); // Intel options: PRINT_MACRO(__INTEL__); PRINT_MACRO(__ICC); PRINT_MACRO(__ICL); PRINT_MACRO(__ECC); PRINT_MACRO(__INTEL_COMPILER); PRINT_MACRO(__INITIAL_POINTER_SIZE); PRINT_MACRO(_INTEGRAL_MAX_BITS); PRINT_MACRO(__INTEL_COMPILER_BUILD_DATE); PRINT_MACRO(__INTEL_MS_COMPAT_LEVEL); PRINT_MACRO(__LONG_DOUBLE_SIZE__); PRINT_MACRO(_M_X64); PRINT_MACRO(_OPENMP); PRINT_MACRO(_OPENMPT); PRINT_MACRO(_PGO_INSTRUMENT); PRINT_MACRO(__QMSPP_); // misc compilers not covered so far: PRINT_MACRO(__USLC__); PRINT_MACRO(__DECCXX); PRINT_MACRO(__IBMCPP__); PRINT_MACRO(_REENTRANT); PRINT_MACRO(_PTHREADS); PRINT_MACRO(__STDC_HOSTED__); PRINT_MACRO(__COMO__); PRINT_MACRO(__COMO_VERSION__); PRINT_MACRO(__DM__); PRINT_MACRO(__osf__); PRINT_MACRO(__OSF__); PRINT_MACRO(__QNXNTO__); PRINT_MACRO(__QNX__); PRINT_MACRO(_NTO_VERSION);}void print_stdlib_macros(){ std::cout << BOOST_STDLIB << std::endl; #ifdef _RWSTD_VER // Rogue Wave 2.x config options: PRINT_MACRO(__NO_EDG_EXCEPTION_CLASSES); PRINT_MACRO(_RWSTD_ALLOCATOR); PRINT_MACRO(_RWSTD_BAD_ALLOC_DEFINED); PRINT_MACRO(_RWSTD_BAD_EXCEPTION_DEFINED); PRINT_MACRO(_RWSTD_BOUNDS_CHECKING); PRINT_MACRO(_RWSTD_COMPILE_INSTANTIATE); PRINT_MACRO(_RWSTD_DEFAULT_PRECISION); PRINT_MACRO(_RWSTD_EXCEPTION_DEFINED); PRINT_MACRO(_RWSTD_EXCEPTION_HANDLER_IN_STD); PRINT_MACRO(_RWSTD_EXCEPTION_PREDEFINED); PRINT_MACRO(_RWSTD_FLT_ROUNDS_IS_CONSTANT); PRINT_MACRO(_RWSTD_LOCALIZED_ERRORS); PRINT_MACRO(_RWSTD_MESSAGE); PRINT_MACRO(_RWSTD_MUTEXATTR_DEFAULT); PRINT_MACRO(_RWSTD_NO_ANSI_SPRINTF); PRINT_MACRO(_RWSTD_NO_ARG_MATCH); PRINT_MACRO(_RWSTD_NO_BAD_CAST); PRINT_MACRO(_RWSTD_NO_BASE_CLASS_MATCH); PRINT_MACRO(_RWSTD_NO_BOOL); PRINT_MACRO(_RWSTD_NO_BUILTIN_CTOR); PRINT_MACRO(_RWSTD_NO_CATOPEN_CATGETS); PRINT_MACRO(_RWSTD_NO_CLASS_PARTIAL_SPEC); PRINT_MACRO(_RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES); PRINT_MACRO(_RWSTD_NO_COMPLICATED_EXCEPTIONS); PRINT_MACRO(_RWSTD_NO_COMPLICATED_TYPEDEF); PRINT_MACRO(_RWSTD_NO_CONST_INST); PRINT_MACRO(_RWSTD_NO_CTOR_RETURN); PRINT_MACRO(_RWSTD_NO_DEFAULT_FOR_TPARAM); PRINT_MACRO(_RWSTD_NO_DEFAULT_TEMPLATE_ARGS); PRINT_MACRO(_RWSTD_NO_DESTROY_BUILTIN); PRINT_MACRO(_RWSTD_NO_DESTROY_NONBUILTIN); PRINT_MACRO(_RWSTD_NO_EMBEDDED_TYPEDEF); PRINT_MACRO(_RWSTD_NO_EX_SPEC); PRINT_MACRO(_RWSTD_NO_EXCEPTIONS); PRINT_MACRO(_RWSTD_NO_EXPLICIT); PRINT_MACRO(_RWSTD_NO_EXPLICIT_ARG); PRINT_MACRO(_RWSTD_NO_EXPLICIT_FUNC_INSTANTIATION); PRINT_MACRO(_RWSTD_NO_EXPLICIT_INSTANTIATION); PRINT_MACRO(_RWSTD_NO_EXTENSION); PRINT_MACRO(_RWSTD_NO_FORWARD_SPECIALIZATIONS); PRINT_MACRO(_RWSTD_NO_FPOS_T); PRINT_MACRO(_RWSTD_NO_FRIEND_TEMPLATES); PRINT_MACRO(_RWSTD_NO_FUNC_PARTIAL_SPEC); PRINT_MACRO(_RWSTD_NO_GETTIMEOFDAY); PRINT_MACRO(_RWSTD_NO_GLOBAL_TZ); PRINT_MACRO(_RWSTD_NO_INHERITED_TYPEDEFS); PRINT_MACRO(_RWSTD_NO_INIT_CONST_TEMPLATE_REF_ARG); PRINT_MACRO(_RWSTD_NO_INT_TYPEDEF); PRINT_MACRO(_RWSTD_NO_LDIV);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?