Проверьте, объявлена ​​ли функция с препроцессором 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;
}
16
задан Brian Tompsett - 汤莱恩 18 February 2016 в 11:54
поделиться

4 ответа

Нет. Препроцессор запускается перед компилятором C, а компилятор C обрабатывает объявления функций. Препроцессор предназначен только для обработки текста.

Однако большинство файлов заголовков содержат защитные макросы, такие как _STDIO_H_ , которые вы можете проверить на этапе препроцессора. Однако это решение непереносимо, поскольку имена макросов защиты включения не стандартизированы.

22
ответ дан 30 November 2019 в 21:03
поделиться

Поскольку препроцессор не знает языка C / C ++ (на самом деле он выполняет только замену текста), я бы предположил, что это невозможно. почему ты хочешь сделать это? Может быть, есть другой способ.

0
ответ дан 30 November 2019 в 21:03
поделиться

Препроцессор - это простая программа, которая почти ничего не знает о базовом языке. Он не может сказать, была ли объявлена ​​функция. Даже если бы это было возможно, функция может быть определена в другой библиотеке, и символ будет разрешен во время компоновки, поэтому препроцессор не может помочь в этом отношении.

1
ответ дан 30 November 2019 в 21:03
поделиться

Если вы посмотрите на такие инструменты, как autoconf, вы увидите, что они проходят множество тестов, чтобы определить, что на компьютере есть, а что нет, для правильной компиляции, а затем они устанавливают правильные #DEFINES.

Возможно, вам захочется взглянуть на эту модель и этот инструмент, если вы пользуетесь какой-то разновидностью unix, поскольку то, что вы хотите сделать, будет невозможным, как, несомненно, указывают другие.

5
ответ дан 30 November 2019 в 21:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: