Книжка по препроцессору в сях
ИМХО, надо смотреть исходники достаточно сложных реальных проектов. Во всех известных мне книжках примеры использования препроцессора крайне примитивные по сравнению с практикой. Я, нпаример, повысил свой уровень владения препроцессором, поработав с исходниками компиляторов nesC + ОС TinyOS и, конечно, родного нашего gcc.



Если надо пользовать препроцессор, значит надо переходить на более высокий уровень - например, на шаблоны в C++.
Всякие
DECLARE_DO_FUNC(aaa);
DECLARE_DO_FUNC(bbb);
DECLARE_DO_FUNC(ccc);
- это же функции по шаблону

#define ERROR_LIST \
ERROR_INFO(ERROR_NUMBER_1, = 1, "Error number 1") \
ERROR_INFO(ERROR_NUMBER_2, , "Error number 2") \
ERROR_INFO(ERROR_NUMBER_3, , "Error number 3") \
ERROR_INFO(ERROR_FATAL, = 100, "A fatal error")
#define ERROR_INFO( A , B , C ) A B,
enum error_t {
ERROR_LIST
ERROR_LAST
};
#undef ERROR_INFO
const char * show(error_t err)
{
switch(err)
{
#define ERROR_INFO(A, B, C) \
case A: return( C );
ERROR_LIST
#undef ERROR_INFO
default: return( "Unknown error_t value" );
}
}
В Си (в С++ если угодно) нет человеческой рефлексии, я об этом уже много раз говорил. Нельзя, например, написать цикл по полям класса, из-за этого не получается автоматизировать сериализацию или хотя бы отладочную печать. Использование препроцессора - это мертвому припарка, просто нужен _другой_ язык.
Ага, лисп или ещё какой smalltalk.



добавить функций, напрямую транслирующихся в ассемблерные команды, и всё
Да ну, забей, нельзя Си программиста переучить на lisp, а на Си+m4 можно.
Си-программисты, которых нельзя переучить, имхо давно юзают C++ для подобных дел.

Такое им и в голову не придёт, а если придёт, значит и другому языку смогут научиться.
---
...Я работаю антинаучным аферистом...
Оставить комментарий
Anturag
Существует ли какая-нибудь книжка (желательно электронная