Использование #define в C/C++

Я должен записать такой определять в C/C++

#define scanf( fscanf(inf,

для замены каждого scanf( с fscanf(inf, литературный

Но я не знаю как...

Спасибо

5
задан a3f 31 March 2015 в 03:19
поделиться

5 ответов

Вы хотите использовать макрос Variadic .

В вашем случае, я полагаю, вы хотите:

#define scanf(...) fscanf(inf,__VA_ARGS__)
11
ответ дан 18 December 2019 в 08:26
поделиться

Просто напишите весь свой код, используя fscanf, и определите имя файла с помощью макроса вроде этого:

#ifdef USE_SCANF
#define SCANF_FILE(file) stdin
#else
#define SCANF_FILE(file) file
#endif

fscanf(SCANF_FILE(blah), "%d", &a);
3
ответ дан 18 December 2019 в 08:26
поделиться

не возможно так, как вы пытались, конечно.

нужно делать что-то вроде

#define scanf(S, ...) fscanf(inf, S, __VA_ARGS__)

Смотрите, например, здесь

EDIT: GNU cpp тоже поддерживает вариативные макросы; это VA_ARGS, которому предшествует двойное подчеркивание и который заканчивается двойным подчеркиванием... Я должен изучить разметку экранирования здесь...

1
ответ дан 18 December 2019 в 08:26
поделиться

Мне нужно написать такое определение на C ++

Нет, не надо. На самом деле вам нужно перенаправить stdin .

freopen(inf, "r", stdin);
4
ответ дан 18 December 2019 в 08:26
поделиться

Вы не можете заменить скобку. Если вы используете Visual C++, то вы можете использовать переменный макрос для достижения желаемого:

#define scanf( format, ... ) fscanf( inf, format, __VA_ARGS__ )

Другие компиляторы могут иметь подобные возможности, но я с ними не знаком.

0
ответ дан 18 December 2019 в 08:26
поделиться