C / C ++中的#define用法

时间:2010-06-05 17:43:20

标签: c++ c c-preprocessor

我需要在C / C ++中编写这样的定义

#define scanf( fscanf(inf,

为了用scanf(文学

替换每个fscanf(inf,

但我不知道怎么......

由于

5 个答案:

答案 0 :(得分:11)

您想使用Variadic macro

在你的情况下,我相信你想要:

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

答案 1 :(得分:4)

  

我需要在C ++中编写这样的定义

不,你没有。您真正想要做的是重定向stdin

freopen(inf, "r", stdin);

答案 2 :(得分:3)

使用fscanf编写所有代码,并使用宏定义文件名,如下所示:

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

fscanf(SCANF_FILE(blah), "%d", &a);

答案 3 :(得分:1)

当然不可能按照你的方式进行。

你必须做像

这样的事情
#define scanf(S, ...) fscanf(inf, S, __VA_ARGS__)

参见例如here

编辑:GNU cpp也支持可变参数宏;它是VA_ARGS前面有双下划线并以双下划线结束......我必须在这里学习转义标记......

答案 4 :(得分:0)

您无法替换括号。如果您使用的是Visual C ++,则可以使用可变参数宏来完成您想要的任务:

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

其他编译器可能有类似的功能,但我不熟悉它们。