C 错误:宏名称后缺少空格

发布于 2024-12-02 23:13:26 字数 200 浏览 0 评论 0原文

我编写了以下宏:

#define m[a,b] m.values[m.rows*(a)+(b)]

但是 gcc 给了我这个错误:

error: missing whitespace after the macro name

出了什么问题,如何修复它?

I wrote the following macro:

#define m[a,b] m.values[m.rows*(a)+(b)]

However gcc gives me this error:

error: missing whitespace after the macro name

What is wrong and how do I fix it?

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

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

发布评论

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

评论(3

梦幻之岛 2024-12-09 23:13:26

您不能使用 [] 作为宏参数的分隔符;您必须使用 。试试这个:

#define m(a,b) m.values[m.rows*(a)+(b)]

但请注意,将宏的名称定义为现有变量的名称可能会令人困惑。您应该避免像这样隐藏名称。

You cannot use [ and ] as delimiters for macro arguments; you must use ( and ). Try this:

#define m(a,b) m.values[m.rows*(a)+(b)]

But note that defining the name of a macro as the name of an existing variable may be confusing. You should avoid shadowing names like this.

☆獨立☆ 2024-12-09 23:13:26

我不熟悉任何使用方括号的 C 预处理器语法。更改

  #define m[a,b] m.values[m.rows*(a)+(b)]

  #define m(a,b) m.values[m.rows*(a)+(b)]

它应该可以工作。

I'm not familiar with any C preprocessor syntax that uses square brackets. Change

  #define m[a,b] m.values[m.rows*(a)+(b)]

to

  #define m(a,b) m.values[m.rows*(a)+(b)]

And it should work.

戏剧牡丹亭 2024-12-09 23:13:26

当您在方括号中提供参数时,您不能拥有这样一个会扩展的宏。无论您在何处认为宏是一种智能文本替换工具,事实恰恰相反:宏极其迟钝且愚蠢 em> 文本替换机制。你试图用宏做的事情绝对是没有根据的 - 只需编写一个命名函数即可。

You cannot have such a macro that will expand when you supply arguments in square brackets. Wherever you got the idea that macros are a smart text-substituting tool, it's just the other way round: macros are extremely obtuse and stupid text-substitution mechanism. What you're trying to do with a macro is absolutely unwarranted - just write a named function.

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