Книжка по препроцессору в сях

Anturag

Существует ли какая-нибудь книжка (желательно электронная ) по эффективному использованию препроцессора в сях? Слышал разные интересные вещи, например, что с помощью него (теоретически) можно например реализовать большинство возможностей C++ ) Опять-таки куча разных задачек очень просто решается дефайнами, а без них - тяжело...

Defolt1

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

Anturag

Хм, да, мне тут тоже посоветовали поразбирать сорцы с одного проекта, завтра вроде принесут Говорят там все классы через дефайны строятся. Спасибо за идею посмотреть сорцы gcc - уверен это будет интересно. А то, что в книжках только тривиальные примеры использования препроцессора очень плохо. Странно, что никто из великих не написал ничего существенного по препроцессору. Ведь это чрезвычайно мощный инструмент в C.

yolki

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

rosali

На, напиши на шаблонах

#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" );
}
}

rosali

В Си (в С++ если угодно) нет человеческой рефлексии, я об этом уже много раз говорил. Нельзя, например, написать цикл по полям класса, из-за этого не получается автоматизировать сериализацию или хотя бы отладочную печать. Использование препроцессора - это мертвому припарка, просто нужен _другой_ язык.

Marinavo_0507

Ага, лисп или ещё какой smalltalk.

rosali

Нет, ну фанаты сей любят их за низкоуровневость, вот и надо изобретать низкоуровневый, но симпатишный. Убить Страуструпа мало за то что он сделал Си подмножеством С++! Наверное КОНТРА прав, m4 над C++ самое то Прямо как php над html, такое же уродство извиняюсь

Marinavo_0507

lisp - куда уж ниже
добавить функций, напрямую транслирующихся в ассемблерные команды, и всё

rosali

Да ну, забей, нельзя Си программиста переучить на lisp, а на Си+m4 можно.

Marinavo_0507

Си-программисты, которых нельзя переучить, имхо давно юзают C++ для подобных дел.

rosali

Каких подобных? Вот ? Я называю Сями С++, очень многие программиреют на С++ и думают, что программируют на Си. Кстати и наоборот

Marinavo_0507

Такое им и в голову не придёт, а если придёт, значит и другому языку смогут научиться.

Ivan8209

Добавить --- и получится форт.
---
...Я работаю антинаучным аферистом...
Оставить комментарий
Имя или ник:
Комментарий: