Компилировать с отсутствием в MSVC __has_builtinC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Компилировать с отсутствием в MSVC __has_builtin

Сообщение Anonymous »

Я пытаюсь написать независимый от платформы код для программного создания точки останова. Я нашел std::breakpoint, которого, конечно, не существует до C++26. Я изучил предложение дальше и нашел эталонную реализацию. Я немного адаптировал его, включив в него стандартную версию по умолчанию, чтобы мечтать о будущем, но начал с первого фрагмента ссылки, в котором есть изящная работа препроцессора, включающая использование __has_builtin, который Я никогда раньше не видел. Вот куда я попал:

Код: Выделить всё

// If later than C++23, we can use the standard breakpoint function.
#if defined(__cplusplus) && __cplusplus > 202302L
#include 
#define breakpoint() std::breakpoint_if_debugging()
#endif

// Check if compiler has an already-available builtin debug breaking function.
#if !defined(breakpoint) && defined(__has_builtin) && !defined(__ibmxl__)
#if __has_builtin(__builtin_debugtrap)
#define breakpoint() __builtin_debugtrap()
#elif __has_builtin(__debugbreak)
#define breakpoint() __debugbreak()
#endif
#endif

// Failed to get a breakpointing function.
#if !defined(breakpoint)
#error There wasn't a simple breakpoint method.
#endif
И вот, Intellisense полагает, что путь __has_builtin(__debug_break) — это все, что мне нужно для получения определения точки останова (по крайней мере, для Windows). Я попытался скомпилировать для проверки и вместо этого сразу же нашел путь к ошибке.
  • Я не могу найти ничего, что явно описывало бы существование __has_builtin при использовании MSVC но, насколько я понимаю, __debug_break — это встроенная функция только для MSVC. Я здесь что-то не понимаю? Это для clang в Windows?
  • Есть ли опция компилятора, которую мне нужно включить, чтобы получить __has_builtin?
  • Наведение курсора на __has_builtin( __debugbreak) имеет intellisense, показывающий, что он расширяется до 1. Это просто классическая ложь IntelliSense? Он также показывает __has_builtin как «предопределенный динамический макрос», что звучит так, как будто на самом деле это означает «магическую функцию, которую обрабатывает компилятор».


Подробнее здесь: https://stackoverflow.com/questions/790 ... as-builtin
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Компилировать с отсутствием в MSVC __has_builtin
    Anonymous » » в форуме C++
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Компилировать с отсутствием в MSVC __has_builtin
    Anonymous » » в форуме C++
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • MSVC не может компилировать программу с функцией модуля C ++ 20
    Anonymous » » в форуме C++
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • MSVC не может компилировать программу с функцией модуля C ++ 20
    Anonymous » » в форуме C++
    0 Ответы
    36 Просмотры
    Последнее сообщение Anonymous
  • Как запустить код Python на хосте, как это делает модуль ansible.builtin.shell для Bash?
    Гость » » в форуме Python
    0 Ответы
    35 Просмотры
    Последнее сообщение Гость

Вернуться в «C++»