Проверьте, объявлена ​​ли функция с препроцессором 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/С++ (он действительно только заменяет текст), я бы предположил, что это невозможно. почему ты хочешь сделать это? Возможно, есть и другой способ.