#define 在 C/C 中的用法++

发布于 2024-09-04 13:30:23 字数 176 浏览 3 评论 0原文

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

#define scanf( fscanf(inf,

,以便将每个 scanf( 替换为 fscanf(inf, 文学

但我不知道如何...

谢谢

I need to write such a define in C/C++

#define scanf( fscanf(inf,

in order to replace each scanf( with fscanf(inf, literary

But I do not know how...

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

却一份温柔 2024-09-11 13:30:23

您想要使用可变参数宏

就你而言,我相信你想要:

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

You want to use a Variadic macro.

In your case, I believe you want:

#define scanf(...) fscanf(inf,__VA_ARGS__)
相守太难 2024-09-11 13:30:23

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

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

freopen(inf, "r", stdin);

I need to write such a define in C++

No, you don't. What you really want to do is redirect stdin.

freopen(inf, "r", stdin);
ゃ懵逼小萝莉 2024-09-11 13:30:23

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

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

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

Just write all your code using fscanf, and define the file name with a macro like this:

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

fscanf(SCANF_FILE(blah), "%d", &a);
爱殇璃 2024-09-11 13:30:23

当然不可能按照你尝试的方式。

你必须做类似的事情

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

参见这里

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

not possible the way you tried of course.

you have to do things like

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

See e.g. here

EDIT: GNU cpp supports variadic macros too; it is VA_ARGS preceded by double underscore and ended with double underscore... I have to study escaping markup here...

心清如水 2024-09-11 13:30:23

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

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

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

You can't replace a parenthesis. If you're using Visual C++, then you can use a variadic macro to accomplish what you want:

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

Other compilers may have a similar facility, but I'm not familiar with them.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文