是否可以使用整数作为数组的名称?
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]等特殊后缀的范围=]、f
或 d
。我们人类肯定可以阅读和分组这些东西,但计算机不能!计算机无法解决歧义,否则将永远死亡!
我正在将一款游戏从 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]等特殊后缀的范围=]、f
或 d
。我们人类肯定可以阅读和分组这些东西,但计算机不能!计算机无法解决歧义,否则将永远死亡!