В общем случае это не выполнимо во время компиляции, так как нет способа передать такие требования, и даже если бы они были, компилятор не мог бы доказать в каждом случае, что все пути кода, ведущие к get_something
сначала вызвали init
.
В некоторых особых случаях вы можете получить предупреждение во время компиляции через некоторые сомнительные хаки, например, если ваш something.h
содержит static void init(void) { real_init(); }
- тогда некоторые компиляторыс достаточным количеством включенных предупреждений будет предупреждать о неиспользованной static
функции init
, если вы не вызовите ее (откуда угодно - могут быть пути кода, которые ее не вызывают).
Во время выполнения вы могли бы сохранитьотслеживание того, был ли init
вызван и assert
, что он был вызван во всем, что от него зависит.(Макрос assert
затем может быть скомпилирован в пустой код в рабочем коде, см. Документацию.)