C 用作数组索引时的标准无符号literal后缀
我为你读了建议 写C 用作数组索引时的标准无符号literal后缀,c,indexing,types,c99,C,Indexing,Types,C99,我为你读了建议 写未签名的便笺的标准便携方式是什么 为什么规范的方式不是: size_t i; unsigned char uchar[10U]; uchar[0U]=10U; for(i=2U;i<uchar[0U];i++) { uchar[i]=i; printf("%u\n",uchar[i]); } size\u ti; 无符号字符集[10U]; uchar[0U]=10U; 对于(i=2U;i而言,0U中的U只是噪声-因为它是一个简单的常数,它的类型并不重
未签名的便笺的标准便携方式是什么
为什么规范的方式不是:
size_t i;
unsigned char uchar[10U];
uchar[0U]=10U;
for(i=2U;i<uchar[0U];i++) {
uchar[i]=i;
printf("%u\n",uchar[i]);
}
size\u ti;
无符号字符集[10U];
uchar[0U]=10U;
对于(i=2U;i而言,0U
中的U
只是噪声-因为它是一个简单的常数,它的类型并不重要。更糟糕的是,size\U t
没有后缀
实际上,您很少需要后缀,甚至在这种情况下,更经常的情况是让唠叨的编译器保持沉默
size\u t
建议适用于用于存储数组索引和带有未知项的索引计算的对象,或者类似于1000*1000*1000*10
的数组维度计算的对象-这些应该发生在size\u t
中,其中存在整数溢出或环绕的危险。标准和端口写入无符号文字的有效方法是写入U
但是,由于各种原因,不建议在数组索引上使用此选项:
您将要使用的大多数常量数组索引都在INT\u MAX
和UINT\u MAX
下面
如果你使用的是常数数组索引,那么你应该考虑重新思考你的方法。< /P>
这些只会使您的代码更大(如果只有几个字节),更难理解
建议编写uchar[1U]吗?@OneArb否。U
是不需要的,所以它只是一个绒毛,使您的代码更难理解。@JL2210谢谢。我的想法是:无符号类型的常量应该有一个“U”,但括号中使用的索引不需要无符号或非负。a[-1]如果a
当前指向数组中的第2..n个元素,@OneArb该页是错误的。隐式转换规则已经涵盖了这一点。将文本索引和大小写入整数的正常标准方法是纯十进制(通常)整数-无符号字符uchar[10];uchar[9]='\0';
等等。其他任何事情都是不寻常的-必须有一个好的理由去做(而且很少有好的理由,所以很少做).对于变量-使用size\u t
是合理的,但使用普通int
通常也可以。在遇到size\u t
问题之前,您可能会遇到普通int
问题,但您正在处理极端情况。