Как мы знаем, в компиляторах нет стандартного способа стандартизировать макросы с компиляторами и разными операционными системами.

Поэтому я создал эту библиотеку, содержащую стандартизированные макросы и многое другое.

Репозиторий на гитхабе


Содержание:

  • Архитектура

    Этот раздел содержит некоторые макросы, которые могут обнаруживать более 20 архитектур.

  • Операционная система

    Этот раздел содержит некоторые макросы, которые могут обнаруживать более 66 операционных систем.

  • Компилятор

    Этот раздел содержит некоторые макросы, которые могут обнаруживать более 75 компиляторов и их версий.

  • Библиотека

    Этот раздел содержит некоторые макросы, которые могут обнаруживать более 11 библиотек и их версии.

  • Стандарт

    Этот раздел содержит стандартные макросы более 35 макросов.

  • Имеет макросы

    Этот раздел содержит __has макросы более 4 макросов.

  • Атрибуты

    Этот раздел содержит некоторые стандартные и общие атрибуты более 13 атрибутов.

  • Контроллеры

    Этот раздел содержит некоторые макросы, которые могут управлять некоторыми вещами в C/C++. более 7 контроллеров.

  • Макросы помощников

    Этот раздел содержит некоторые макросы, которые могут быть полезны при написании этой библиотеки.



Быстрые примеры

  /*                  Print architecture name                   */
  cout << X_ARCH                    << endl; // 👉 "x86_64"

  /*       Check for specific architecture using ID/Macro       */
  #ifdef X_ARCH_<ID>
  ...
Войти в полноэкранный режим

Выйти из полноэкранного режима

  /*                 Print operating system name                */
  cout << X_OS                      << endl; // 👉 "GNU/Linux"

  /*            Check for specific OS using ID/Macro            */
  #ifdef X_OS_<ID>
  ...
Войти в полноэкранный режим

Выйти из полноэкранного режима

  /*                    Print compiler info                     */
  cout << X_COMP                << endl; // 👉 "GCC"
  cout << X_COMP_MAJOR          << endl; // 👉 12
  cout << X_COMP_MINOR          << endl; // 👉 1
  cout << X_COMP_PATCH          << endl; // 👉 0
  cout << X_COMP_VERSION        << endl; // 👉 201392128
  cout << X_COMP_ORG_VERSION    << endl; // 👉 12

  /*         Check for specific compiler using ID/Macro         */
  #ifdef X_COMP_<ID>
  ...
Войти в полноэкранный режим

Выйти из полноэкранного режима

  /*                       Print lib info                       */
  cout << X_LIB                     << endl; // 👉 "GNU glibc"
  cout << X_LIB_MAJOR               << endl; // 👉 2
  cout << X_LIB_MINOR               << endl; // 👉 35
  cout << X_LIB_PATCH               << endl; // 👉 0
  cout << X_LIB_VERSION             << endl; // 👉 35848192
  cout << X_LIB_ORG_VERSION         << endl; // 👉 2

  /*           Check for specific lib using ID/Macro            */
  #ifdef X_LIB_<ID>
  ...
Войти в полноэкранный режим

Выйти из полноэкранного режима

  /*                       Print some info                      */
  cout << X_STD_CPP                 << endl; // 👉 20
  cout << X_STD_FILE                << endl; // 👉 "path/main.cpp"
  cout << X_STD_FUNC                << endl; // 👉 "main()"
  cout << X_STD_LINE                << endl; // 👉 4
  cout << X_STD_TIME                << endl; // 👉 "10:19:16"
  cout << X_STD_DATE                << endl; // 👉 "Oct 30 2022"

  /*           Check for specific Version                       */
  #if X_STD_CPP >= 20 // you can use (X_STD_C) for c language
  ...
Войти в полноэкранный режим

Выйти из полноэкранного режима

  /*                    Check for Attribute                     */
  #if X_HAS_ATTR(noreturn)
  ...

  /*                    Check for Feature                       */
  #if X_HAS_FEATURE(cxx_rvalue_references)
  ...

  /*                    Check for Include                       */
  #if X_HAS_INCLUDE("iostream")
  ...

  /*                    Check for Builtin                       */
  #if X_HAS_BUILTIN(__builtin_clz)
  ...
Войти в полноэкранный режим

Выйти из полноэкранного режима

  /*                    Usage of Attributes                     */
  X_ATTR_DEPRECATED("old version")
  X_ATTR_INLINE
  X_ATTR_HIDDEN
  void func(X_ATTR_MAYBE_UNUSED int i = 0)
  ...
Войти в полноэкранный режим

Выйти из полноэкранного режима

  /*                   Manage Exceptions                        */
  X_CONSTEXPR void func() X_NOEXCEPT
  // IF C++ && X_EXCEPTIONS  => constexpr void func() noexcept
  // ELSE                    => void func()
  ...

  /*                    Throw An Exception                      */
  X_THROW(exception);
  // IF C++ && X_EXCEPTIONS  => throw an exception
  // ELSE IF C++             => assert an error with exception message
  // ELSE                    => assert an error without        message
Войти в полноэкранный режим

Выйти из полноэкранного режима

  /*        Version Normalization (major, minor, patch)         */
  #define version X_VER(9,3,7)
Войти в полноэкранный режим

Выйти из полноэкранного режима



Тесты

Эта библиотека была протестирована на всех следующих устройствах:


Операционная система

  • Linux Убунту 22.04.1 ЛТС
  • Windows Виндовс 10 про


Компилятор

  • GCC 12.1
  • Clang 15.0.0
  • MSVC 19,0


использованная литература