код:
int foo_i(int i) { return i; }
#define foo(type) _Generic((type), int: foo_i, float: foo_f)
int main(void) {
int var1 = 42;
int var2 = foo(var1);
return 0;
}
G CC ошибка:
error: ‘foo_f’ undeclared (first use in this function)
#define foo(type) _Generic((type), int: foo_i, float: foo_f)
^
note: in expansion of macro ‘foo’
int var2 = foo(var1);
^~~
note: each undeclared identifier is reported only once for each function it appears in
#define foo(type) _Generic((type), int: foo_i, float: foo_f)
^
note: in expansion of macro ‘foo’
int var2 = foo(var1);
^~~
Вопрос:
В моем конкретном случае использования некоторые функции, такие как foo_f
, могут быть не объявлены, и это нормально, потому что они все равно не будут выбраны. Например, в приведенном выше примере foo_f
никогда не выбирается в моем источнике, только foo_i
. Как я могу попросить G CC не выдавать ошибку в этой ситуации, а только если / когда фактически выбрана необъявленная функция? Другими словами, я бы хотел, чтобы G CC только выдавал мне ошибку в этом случае
float var1 = 42;
int var2 = foo(var1);
, но не в этом случае
int var1 = 42;
int var2 = foo(var1);