Приведение указателя функции к другому типу
Я недавно спросил об этой function-pointers же проблеме, касающейся некоторого pointer-to-function кода в GLib. (GLib - это pointer-to-function основная библиотека для проекта function-pointers GNOME, написанная на C.) Мне pointer-to-function сказали, что от нее зависит function-pointers вся структура slots'n'signals.
В function-pointers коде есть множество примеров pointer-to-function приведения типов (1) к (2):
-
typedef int (*CompareFunc) (const void *a, const void *b)
-
typedef int (*CompareDataFunc) (const void *b, const void *b, void *user_data)
Это pointer-to-function обычное дело для сквозных c вызовов с такими вызовами:
int stuff_equal (GStuff *a,
GStuff *b,
CompareFunc compare_func)
{
return stuff_equal_with_data(a, b, (CompareDataFunc) compare_func, NULL);
}
int stuff_equal_with_data (GStuff *a,
GStuff *b,
CompareDataFunc compare_func,
void *user_data)
{
int result;
/* do some work here */
result = compare_func (data1, data2, user_data);
return result;
}
Убедитесь function-pointers сами, здесь, в g_array_sort()
: http://git.gnome.org/browse/glib/tree/glib/garray.c
Приведенные function-pointers выше ответы подробны и, вероятно, верны function-pointers - если вы входите в комитет по pointer-to-function стандартам. Адам и Йоханнес pointer-to-function заслуживают похвалы за их pointer-to-function хорошо исследованные ответы. Однако c в природе вы обнаружите, что function-pointers этот код отлично работает. Спорный? да. Учтите pointer-to-function это: GLib компилирует / работает function-pointers / тестирует на большом количестве c платформ (Linux / Solaris c / Windows / OS X) с широким c спектром компиляторов / компоновщиков pointer-to-function / загрузчиков ядра (GCC / CLang pointer-to-function / MSVC). Будь прокляты стандарты.
Некоторое pointer-to-function время я размышлял над этими pointer-to-function ответами. Вот мой вывод:
- Если вы пишете библиотеку обратного вызова, это может быть нормально. Caveat emptor - используйте на свой страх и риск.
- Иначе не делайте этого.
Если c подумать глубже после написания function-pointers этого ответа, я не удивлюсь, если pointer-to-function в коде компиляторов C используется function-pointers тот же трюк. И поскольку function-pointers (большинство / все?) Современные pointer-to-function компиляторы C загружаются, это function-pointers будет означать, что этот function-pointers трюк безопасен.
Более важный function-pointers вопрос для исследования: может pointer-to-function ли кто-нибудь найти платформу function-pointers / компилятор / компоновщик pointer-to-function / загрузчик, где этот трюк function-pointers не работает? Основные моменты pointer-to-function для этого. Бьюсь об заклад, есть c некоторые встроенные процессоры pointer-to-function / системы, которым это не pointer-to-function нравится. Однако для настольных pointer-to-function компьютеров (и, возможно, мобильных function-pointers устройств / планшетов) этот pointer-to-function трюк, вероятно, все еще работает.
c
function-pointers
Приведение указателя функции к другому типу
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.