Проверьте, объявлена ли функция с препроцессором C?
Можно ли сообщить препроцессору C, чтобы проверить, объявлена ли функция (а не макрос)? Я попробовал следующее, но он не работает:
#include <stdio.h>
int main(void)
{
#if defined(printf)
printf("You support printf!\n");
#else
puts("Either you don't support printf, or this test doesn't work.");
#endif
return 0;
}
Ответы
Ответ 1
Нет. Препроцессор запускается перед компилятором C и компиляторами процессов компилятора процессов. Препроцессор доступен только для обработки текста.
Однако большинство файлов заголовков включают защитные макросы, такие как _STDIO_H_
, которые можно проверить на этапе препроцессора. Тем не менее, это решение не переносимо, поскольку имена макросов include включают не стандартизованные.
Ответ 2
Если вы посмотрите на такие инструменты, как autoconf, вы увидите, что они проходят множество тестов, чтобы определить, что компьютер имеет или нет, для правильной компиляции, затем они устанавливают правильные #DEFINES.
Возможно, вам захочется взглянуть на эту модель, и этот инструмент, если вы используете какой-то вкус unix, поскольку то, что вы хотите сделать, не будет возможным, как другие, несомненно, указывают.
Ответ 3
Препроцессор - простая программа и почти ничего не знает о базовом языке. Он не может определить, объявлена ли функция. Даже если это возможно, функция может быть определена в другой библиотеке, и символ будет разрешен во время связывания, поэтому препроцессор не смог бы помочь в этом отношении.
Ответ 4
Поскольку препроцессор не знает языка C/С++ (он действительно только заменяет текст), я бы предположил, что это невозможно. почему ты хочешь сделать это? Возможно, есть и другой способ.