"Сделать сложно - просто, сделать просто - сложно" (c) G.W.
Внимание! Пост проплачен здравым смыслом
Я перекопал достаточное количество чужого кода и думал что видел если не всё, то многое :)
Сегодня был приятно удивлен, что есть люди, которые внимательно следят за обновлениями стандарта С99. Итак, встречаем кусок С-шного файла:
call_mngr_cbs_t call_mngr_cbs = {
play_signal: play_signal_cb,
start_signal: start_signal_cb,
stop_signal: stop_signal_cb,
update_display: display_update_cb,
dialstring_is_complete: dialstring_is_complete_cb,
dialstring_to_addr: dialstring_to_addr_map_cb,
prepare_connection: line_connection_prepare_cb,
create_connection: line_connection_create_cb,
start_connection: line_connection_start_cb,
stop_connection: line_connection_stop_cb,
modify_connection: line_connection_modify_cb,
destroy_connection: line_connection_destroy_cb,
set_endpoint_context: line_connection_context_create,
free_endpoint_context: line_connection_context_destruct,
is_state: is_state_cb,
enum_codecs: enum_codecs_cb
};Пишу я в основном на С++ (дзен-буддизм Си приходит ко мне не всегда), пришлось подумать секунд 10 что это за хрень :): мозг прошел через все шаги типа "Ой - Фигасе - Ну и нафиг это".
Для тех, кому лень включать мозг -
ответ: инициализатор структур в С, в данном случае инициализирует члены структуры указателями на функции. Таких приспособлений в коде пачка, разобраться что и откуда вызывается - проблематично. Не пишите такой код, иначе вас настигнет кара - я гарантирую это :).
ИМХО, после того как все фичи Фортрана заклёпками приштопают к С, сам язык можно будет спокойно положить на полку и заменить на С++.