Как раскрутить Си-макросы

Опубликовано в рубрике "Статьи", 28 ноября, 2010.
Тэги: , , автор:

Да, знаю, сложные Си-макросы – это очень плохо. Но, иногда, без них приходится писать такую кучу кода, что неизвестно, что лучше. Вот и мне понадобилось наваять макро-кодогенератор, вот такой (только не спрашивайте, зачем :) ) —

1#define EXPORT_CLASS_FUNC_0(class_name, func_name) \
2 DevResult class_name ##_ ##func_name() { \
3 DevResult result; \
4 try { result = GetMyInstance()-›##func_name(); } \
5 catch(…) { return DEVRESULT_ERR; } \
6 return result; }


Но как увидеть, что он нагенерил? Оказывается, все просто. Для этого, запускаем cpp компилятор от Visual Studio со следующими ключами:

1cl.exe /P /C имя_файла.cpp


Он создаст файл имя_файла.i, куда положит исходный код с развернутыми макросами.




Комментарии
  1. DeimosIsHere написал(а) 28 ноября, 2010 в 11:33

    Зло. )))

    BSVi Reply:

    ТруЪ-зло, нужно кодогенераторы освоить. Начал было cog осваивать, но что-то питон пока меня совсем не прет, нужно пару деньков выделить, разобраться.

    Vovanium Reply:

    Ну, хорошо написанные макросы избавляют от ночей бдения над кодогенераторами (и настройки под них IDE, скриптов сборки и т. д.) как и от тупой писанины лишнего кода. Например, макросами можно сгенерить таблицу (типа char[0x100], если надо выводить байт в порт, а ноги пришлось перепутать (типа PIN0=bit5, PIN1=bit3…) например, для подключения некоторых ЖКИ. Ради одной таблицы прицеплять кодогенератор обычно как-то не по детски лень.
    И да, в gcc тоже так можно: gcc -E, и думаю, во многих других компиляторах тоже.

    BSVi Reply:

    Да, знаю, что у других есть, просто малоизвестная фича (или это я так от жизни отстал) вот и захотелось показать народу.

    Думается мне, что кодогенератор — еще большее зло, чем макросы. Пока стараюсь писать нативно )

Создать новую ветку комментариев


Вы должны войти или зарегистрироваться чтобы оставить комментарий.