是否可以使用整数作为数组的名称?

时间:2016-12-28 21:38:55

标签: c arrays naming

我正在将一个游戏从Sega Genesis移植到Sega Saturn,并限制在C.我也在关注游戏如何在摩托罗拉68000汇编代码中编码尽可能接近,这需要许多很多阵列相同的结构。我说的是300以上。为了组织和可读性,用数字而不是字符串命名它们会更容易

例如,我会更喜欢

int 000[4] = {1, 2, 3, 4};
int 001[4] = {1, 2, 3, 4};

相反:

int zerozerozero[4] = {1, 2, 3, 4};
int zerozeroone[4]  = {1, 2, 3, 4};

但是我的编译器不会编译,除非数组名称以字符开头。有没有办法做到这一点?我想我可以在数组的前面抛出一个a,但如果可能的话,我想避免这种情况。

3 个答案:

答案 0 :(得分:72)

这是一个非常奇怪的设计。

在人类意义上,一个数字实际上不是一个名字。没有人阅读代码将理解名为_031的数组的含义。

你应该弄清楚所有这些数组的共同点,并使用一个带有描述性名称的多维数组。

所以而不是

int _001[4];
int _002[4];
...
int _300[4];

你应该有像

这样的东西
int whatever[300][4];

然后,只要您访问_002,您只需访问whatever[1]即可。更清洁。如果您愿意,可以添加一个并使其301并使用基于1的索引。

答案 1 :(得分:31)

不可能这样做,不。

但是,您可以使用任何有效字符(例如字母或下划线)开始变量名称,然后创建其余数字。

例如,您可以int 001[4]代替int _001[4]

对于那些只是阅读我的答案的人 - 请大家放松一下,他们在下面回答这对于人类阅读或可用性而言不是很好的设计。有关详细信息,请参阅并提出他的回答。

答案 2 :(得分:1)

不,永远不会。

记住小孩,标识符的正则表达式(C-wise)是[_a-zA-Z][0-9a-zA-Z]*,十进制数的正则表达式(C-wise)是[0-9]*!您的编译器可以将000(等)视为十进制数,而不是“错误地”#39;把它当作一个表达式,然后创建一个巨大的编译器灾难!

编辑:为什么C禁止使用带数字前缀的标识符?

C允许后缀的一个重要概念。

例如,考虑这个伪代码: int 01234; int 01234l;

如果我们将标识符的正则表达式修改为[_0-9a-zA-Z]*,不仅会使其与十进制数的范围重叠,还可能会重叠特殊后缀的范围,例如lulfd。我们人类可以确定阅读和分组这些东西,但计算机不能!计算机无法解决歧义,否则将永远死亡!

相关问题