Возможно ли иметь некоторую форму утверждения без среды выполнения? static_assert
требует постоянного выражения, а assert
является частью библиотеки C и, следовательно, полагается на вызовы операционной системы. Однако скажите, что у вас не было функций библиотеки, чтобы печатать что-либо на экране, и что у вас нет системных вызовов, чтобы заставить работу assert работать. Какой способ отладки вашей программы?
Все assert
- это call abort()
для преднамеренного сбоя программы, если ее аргумент равен нулю. Если ваша платформа не имеет функции abort
, вы можете написать ее, которая соответствующим образом завершает программу. Или, если вы abort
но это неподходящее, вы можете написать собственный собственный макрос assert
который сделает что-то еще. (Предположительно, ваша программа имеет какой-то способ производства продукции, или ваш вопрос будет намного шире, чем сделать полезным assert
.)
Если причина, по которой у вас нет системных вызовов, заключается в том, что вы пишете ядро (и, следовательно, вы отвечаете за выполнение системных вызовов), обратите внимание, что явный эквивалент ошибки утверждения называется паникой ядра.