我们可以在结构声明中使用#define常量作为数组大小吗?

发布于 2024-12-09 03:44:47 字数 287 浏览 1 评论 0原文

我正在 C 中执行以下操作

#define MAX_DATA_SIZE 500;

struct reliable_state {

  char dataBuffer[MAX_DATA_SIZE]; 

}

,即我想在结构声明中使用 #define 常量作为数组大小。 但上面的代码给出了奇怪的错误

.c:36: error: expected ‘]’ before ‘;’ token

那么还有其他方法可以做到这一点吗?

I am doing the following in C

#define MAX_DATA_SIZE 500;

struct reliable_state {

  char dataBuffer[MAX_DATA_SIZE]; 

}

i.e I want to use the #define constant as array size in structure declaration.
But above code gives weird error

.c:36: error: expected ‘]’ before ‘;’ token

So is there any other way to do this?

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

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

发布评论

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

评论(3

冰火雁神 2024-12-16 03:44:47

是的,你可以,只需删除“;”在你的定义行中:

#define MAX_DATA_SIZE 500

使用定义,编译器实际上会“看到”你的结构定义,因为

char dataBuffer[500;];

这显然是错误的。

Yes you can, just remove ';' in your define line:

#define MAX_DATA_SIZE 500

With define you have compiler will actually 'see' your struct definition as

char dataBuffer[500;];

which is clearly erroneous.

鸠魁 2024-12-16 03:44:47

当您使用#define时,右侧的宏将“按原样”定义。例如,在这里,您只需将其更正为

#define MAX_DATA_SIZE 500  /* no semicolon */

When you use #define, the macro on the right side is defined "as is". E.g. here, you've just have to correct it to

#define MAX_DATA_SIZE 500  /* no semicolon */
把人绕傻吧 2024-12-16 03:44:47

非空类对象宏定义的语法为

#define MACRO_IDENTIFIER    REPLACEMENT

请注意,与 C 声明和语句不同,此语法中没有终止分号。您的分号成为替换的一部分,并插入到您使用宏标识符的位置,产生

char dataBuffer[500;];

编译器诊断的语法错误。

The syntax for a non-empty object-like macro definitions is

#define MACRO_IDENTIFIER    REPLACEMENT

Note that there is no terminating semicolon in this syntax, unlike for C declarations and statements. Your semicolon became part of the REPLACEMENT and was inserted where you used the macro identifier, yielding

char dataBuffer[500;];

which is a syntax error the compiler diagnosed.

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