2016-10-17 6 views
1

Я пытался определить общую функцию, чтобы принимать входной сигнал с помощью _Generic в C, это то, что я написалКак определить общую функцию для ввода ввода в C с помощью _Generic?

#include <stdio.h> 

#define readlong(x) scanf("%lld",&x); 
#define read(x) scanf("%lld",&x); 

#define scan(x) _Generic((x), \ 
long long: readlong, \ 
default: read \ 
)(x) 

но когда я скомпилировать его с помощью gcc test.c -std=C11 на GCC 5.3.0, я получаю ошибку:

error: 'readlong' undeclared (first use in this function) 
+0

ли [этот вопрос] (http://stackoverflow.com/questions/9804371/syntax-and-sample-usage-of-generic-in-c11) помочь? –

+0

@MichaelWalz Я уже прочитал это. – Yogendra

+0

Удалить строки ';' после '# define'. –

ответ

0

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

static inline int readlong (long long *x) { return scanf("%lld", x); } 
static inline int readshort (short *x) { return scanf("%hd", x); } 
static inline int unknown (void) { return 0; } 

#define scan(x) _Generic((x), \ 
long long: readlong, \ 
short: readshort, \ 
default: unknown \ 
)(&x) 
0
readlong 

не является переменной, которую вы указали. В:

#define readlong(x) scanf("%11d",&x); 

Вы добавили (x). Это не позволит вам использовать readlong без них.

+0

Я уже пытался изменить 'readlong' на' readlong (x) ', но в этом случае я получил ошибку:' error: called object не является указателем функции или функции #define scan (x) _Generic ((x), \ ' – Yogendra

 Смежные вопросы

  • Нет связанных вопросов^_^