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 + -
显示快捷键?