реклама на сайте
подробности

 
 
> ASSERT
demiurg_spb
сообщение Aug 19 2008, 12:24
Сообщение #1


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Есть-ли какая-нибудь возможность сотворить макрос типа ASSERT,
чтобы в случае невыполнения условия вылезал error или warning на этапе компиляции?
Код
#define X 123U
ASSERT(X<10);

У меня такое никак не выходит....
Спасибо!


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sergeeff
сообщение Aug 27 2008, 19:59
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Не помню, где-то вычитал. Есть такая изящная штука, именуемая STATIC_ASSERT. Она именно выдает ошибку на этапе компиляции (обычный ASSERT - на этапе выполнения). Выглядит примитивно, но не тривиально. Два но:
1. катит только на C++
2. на разных компиляторах выдает совершенно различную интерпретацию кода ошибки, но точно показывает строку, где эта ошибка возникает.
Я просто в комментарии к этой строке пишу, что здесь контролируется.

template<bool> struct CompileTimeError;
template<> struct CompileTimeError<true> {};
#define STATIC_ASSERT(expr) \
(CompileTimeError<(expr) != 0>())


// Example of usage:
// STATIC_ASSERT(sizeof(int) > 4); - produce error in ARM or X86 machine
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 15:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.01414 секунд с 7
ELECTRONIX ©2004-2016