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

 
 
> build-time проверка условия
jcxz
сообщение Aug 31 2015, 06:02
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



В своих проектах беру себе за правило чтобы, если имеются какие-то дефайны, задающие некоторые условия компиляции, то где-то была проверка на допустимость значений этих дефайнов и, если они вне допустимых пределов, проект не собирался бы.
Например: имеется некий дефайн, задающий кол-во элементов массива N (размер элемента L), этот массив передаётся через некий интерфейс, размер кадра которого ограничен некоей величиной M.
В этом случае я добавляю проверку, чтобы: N*L <= M.
Если все величины известны на этапе препроцессора, всё ок - делаю: #if/#error/#endif
Но если контролируемое выражение нельзя рассчитать на этапе препроцессора (например: L=sizeof(...)), то приходится писать что-то вроде:
enum {CheckExp = 1 / ((N*L > M) ? 0: 1)};
в расчёте на ошибку "деление на ноль" при компиляции.
Работает конечно, но может есть более элегантное решение?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
CrimsonPig
сообщение Aug 31 2015, 08:44
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 329
Регистрация: 23-04-14
Пользователь №: 81 502



Цитата(jcxz @ Aug 31 2015, 07:02) *
Работает конечно, но может есть более элегантное решение?


Ну, я давным-давно сделал себе макрос и таскаю его между всеми своими проектами:

#define __ASSERT_COMPILE(x) void __compile_time_assert(int __check[(x)?1:-1])
Go to the top of the page
 
+Quote Post



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

 


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


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