Код: Выделить всё
// 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
- Я не могу найти ничего, что явно описывало бы существование __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