其他分享
首页 > 其他分享> > c – 使用#define定义静态数组的大小是否合法?

c – 使用#define定义静态数组的大小是否合法?

作者:互联网

我正在开发的系统中有很多类,在这些类中,我有一个关于某些东西的“名称”的数组.名称最多30个字符.

最初我只使用了10个字符,但现在我需要增加限制.增加限制需要时间,因为我在很多地方使用这种数组.如果我使用#define NAME_SIZE 30或类似的东西会更容易,然后我所要做的就是改变一个数而不是大约二十个.

但是我不确定这是否是C中的“合法”事情.

这将节省我未来的大量时间,这就是我要问的原因.

解决方法:

是的,它没有任何技术上的错误,除了#define通常不如const std :: size_t MAX_NAME_SIZE = 30;更好的是具有动态尺寸,例如使用std :: string.

Scott Meyers有一篇关于使用免费固定大小的系统的有趣专栏,名为The Keyhole Problem

The Keyhole Problem arises every time software artificially restricts
something you want to see or something you want to express. If you
want to see an image, but your image-viewing software artificially
restricts how much of that image you can see at a time, that’s the
keyhole problem. If you want to specify a password of a particular
length, but your software says it’s too long, that’s the keyhole
problem. If you want to type in your U.S. telephone number, but your
software refuses to let you punctuate it in the conventional manner
with a dash between the three-digit prefix and the four-digit
exchange, that’s the keyhole problem.

除了来自用户的annoynance之外,您还可以打开系统以解决各种安全问题(例如缓冲区溢出漏洞).

标签:c,c-preprocessor,dynamic,static-array
来源: https://codeday.me/bug/20190725/1537838.html