> В реализации ты
> кастишь void* указатель к чему нужно (другого рантайм полиморфизма в С
> нет, уж сорян) и пишешь в Doxygen, что следите за тем,
> что передаете в эту реализацию хука - внутри есть касты в
> такой-то тип. Не уследил - сам виноват, тут дикий запад и
> примитивнейшая типизация, недалеко ушедшая от ассемблера (там-то типы исключительно в
> голове у разработчика, а для процессора всё просто числа), пиши на
> Scala, например, тогда.Компьютер нам нужен для чего? Для того, чтобы автоматизировать рутину связанную с хранением, передачей и обработкой информации. Написание программ -- не исключение. Зачем писать в doxygen, если можно всё записать типами аргументов, и тогда оно не просто будет записано в понятном программисту виде, оно ещё и будет проверяться компилятором. Да мало того, если у тебя няшно всё описано типами, и правильно подобранными идентификаторами, то тебе IDE будет подсказывать сигнатуры функций/методов, и ты из этих сигнатур будешь извлекать всю информацию о том, как функцию можно использовать. Тебе не нужна будет документация.
Бывают ситуации, когда без документации не обойтись -- не подобрать хорошего идентификатора, или, например, glBegin/glEnd надо использовать в паре, и описать это на C не удастся. Но фишка в том, что даже это не какое-то там фундаментальное ограничение языков, скажем на lisp'е можно написать так:
(with-gl-begin :triangle-strip
(draw_triangles))
> Я все еще не понимаю, зачем это проверять.
А я не понимаю, почему бы это не проверять компилятором. Какой смысл отказываться от этой автоматической проверки? Ради того, чтобы почувствовать себя ковбоем на Диком Западе? Других способов самореализации не найти?