Самый очевидный способ архива такого поведения - установить команду #error
. Однако, поскольку невозможно построить «условную директиву #error
», я предполагаю, что следующий шаг - _Pragma
оператор, введенный в C99. Вот решение, которое производит сообщения во время компиляции:
#include <stdio.h>
#define DEBUG 1
#ifdef DEBUG
#define Func1(arg) _Pragma("message \"Function not supported.\"")
#endif
void (Func1)(int arg)
{
}
int main(void)
{
Func1(1);
Func1(2);
Func1(3);
return 0;
}
компиляции (с gcc
):
...
check.c:15: note: #pragma message: Function not supported.
check.c:16: note: #pragma message: Function not supported.
check.c:17: note: #pragma message: Function not supported.
Я знаю, что это не прямое решение (такое сообщение даже не рассматривается как предупреждение, так -Werror
Безразлично ничего не меняйте), однако вы можете использовать, например, grep
или любой другой способ сканирования результатов компилятора.
С GCC 4.8 также есть #pragma GCC error "message"
, что является прямым (но не переносным) решением. Проверьте this answer для получения дополнительной информации. Например:
#ifdef DEBUG
#define Func1(arg) _Pragma("GCC error \"Function not supported.\"")
#endif
Просьба уточнить «Выдает ошибку». Это ошибка компиляции? Ошибка выполнения? Укажите описание ошибки и код на сайте использования. – Arkadiy
точная ошибка: «Ошибка: выражение должно иметь тип функции« указатель-к »» .... Эта ошибка возникает в месте, где была вызвана эта функция. – Shubhi
Является ли сообщение таким важным? – zoska