Книжка по препроцессору в сях
ИМХО, надо смотреть исходники достаточно сложных реальных проектов. Во всех известных мне книжках примеры использования препроцессора крайне примитивные по сравнению с практикой. Я, нпаример, повысил свой уровень владения препроцессором, поработав с исходниками компиляторов nesC + ОС TinyOS и, конечно, родного нашего gcc.
Хм, да, мне тут тоже посоветовали поразбирать сорцы с одного проекта, завтра вроде принесут Говорят там все классы через дефайны строятся. Спасибо за идею посмотреть сорцы gcc - уверен это будет интересно. А то, что в книжках только тривиальные примеры использования препроцессора очень плохо. Странно, что никто из великих не написал ничего существенного по препроцессору. Ведь это чрезвычайно мощный инструмент в C.
Если надо пользовать препроцессор, значит надо переходить на более высокий уровень - например, на шаблоны в 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.
Нет, ну фанаты сей любят их за низкоуровневость, вот и надо изобретать низкоуровневый, но симпатишный. Убить Страуструпа мало за то что он сделал Си подмножеством С++! Наверное КОНТРА прав, m4 над C++ самое то Прямо как php над html, такое же уродство извиняюсь
добавить функций, напрямую транслирующихся в ассемблерные команды, и всё
Да ну, забей, нельзя Си программиста переучить на lisp, а на Си+m4 можно.
Си-программисты, которых нельзя переучить, имхо давно юзают C++ для подобных дел.
Каких подобных? Вот ? Я называю Сями С++, очень многие программиреют на С++ и думают, что программируют на Си. Кстати и наоборот
Такое им и в голову не придёт, а если придёт, значит и другому языку смогут научиться.
---
...Я работаю антинаучным аферистом...
Оставить комментарий
Anturag
Существует ли какая-нибудь книжка (желательно электронная ) по эффективному использованию препроцессора в сях? Слышал разные интересные вещи, например, что с помощью него (теоретически) можно например реализовать большинство возможностей C++ ) Опять-таки куча разных задачек очень просто решается дефайнами, а без них - тяжело...