⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 config_info.cpp

📁 C++的一个好库。。。现在很流行
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//  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.

#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>
#endif

static 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(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(__INTEL__);
  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);
  // 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);
  
  // misc compilers not covered so far:
  PRINT_MACRO(__ICC);
  PRINT_MACRO(__ICL);
  PRINT_MACRO(__ECC);
  PRINT_MACRO(__INTEL_COMPILER);
  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__);
}

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);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -