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

ksm*_*001 3 c++ dynamic static-array c-preprocessor

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

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

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

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

Tem*_*Rex 5

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

斯科特迈耶斯有一个有趣的专栏,关于使用免费固定尺寸的系统,称为锁孔问题

每当软件人为地限制 你想要看到的东西或你想要表达的东西时,就会出现锁孔问题.如果您想要查看图像,但是您的图像查看软件会人为地限制您一次可以看到的图像数量,那就是锁孔问题.如果你想指定一个特定长度的密码,但你的软件说它太长了,那就是锁孔问题.如果您想输入您的美国电话号码,但是您的软件拒绝让您以常规方式在三位数字前缀和四位数字交换机之间划线,那就是锁孔问题.

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