По сути вы пытаетесь получить компилятор, чтобы найти функцию по адресу памяти 0 (NULL
). Это невозможно сделать на C без конкретных конструкторских/компиляторных конструкций.
Один вопрос, хотя, почему вы когда-нибудь захотите это сделать. C - статический язык, поэтому, если вы знаете, что функция никогда не будет существовать во время компиляции, вы можете просто использовать предварительный процессор, чтобы рассказать остальной части программы об этом во время компиляции. В самом деле, эти виды подстановок времени компиляции являются именно тем, почему препроцессор существует в первую очередь.
Я хотел бы создать макрос, который вы определяете, если ваша функция существует следующим образом:
#define THE_SOMETHING_FUNCTION_EXISTS
Затем замените в любом месте вы бы испытывали на something == NULL
с #ifdef
вместо этого.
Конечно, если существование функции может измениться во время выполнения, тогда правильный способ реализовать поведение, которое вы хотите, - сделать something
указателем на функцию.
Компилятор не имеет значения; вы заботитесь о компоновщике. Возможно, вы хотите попробовать 'dlopen' и' dlsym': http://tldp.org/HOWTO/Program-Library-HOWTO/dl-libraries.html –