_Generi c: подавить «ошибка: необъявленная (первое использование в этой функции)» - PullRequest
0 голосов
/ 17 февраля 2020

код:

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);
...