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

Is it possible to use integers as names for arrays?

我正在将一款游戏从 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,但我想尽可能避免这种情况。

这是不可能的,不。

但是,您可以将任何有效字符(例如字母或下划线)作为变量名称的开头,然后将其余部分设为数字。

例如,您可以 int _001[4].

而不是 int 001[4]

对于刚刚阅读我的回答的人 - 大喊放松,他们在下面回答说这不是人类阅读或可用性的好设计。有关更多详细信息,请查看并支持他的回答。

这个设计很奇怪。

在人类意义上,数字确实不是名字。阅读代码的人不会理解名为 _031.

的数组的含义

您应该找出所有这些数组的共同点,并使用具有描述性名称的单个多维数组。

所以

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

你应该有类似的东西

int whatever[300][4];

然后,无论您过去访问 _002,您都只需访问 whatever[1]。干净多了。如果您愿意,可以添加一个并使其成为 301 并使用基于 1 的索引。

没有,从来没有。

记住孩子们,标识符 (C-wise) 的正则表达式是 [_a-zA-Z][0-9a-zA-Z]*,十进制数 (C-wise) 的正则表达式是 [0-9]*!您的编译器可以从字面上将 000(等)视为十进制数,而不是 'wrongfully' 将其视为表达式,这将造成巨大的编译器灾难!

编辑:为什么 C 不允许数字前缀标识符?

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

例如,考虑这个 pseudo-code: int 01234; int 01234l;

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