数组的索引和argc签名

Ber*_*ron 6 c arrays unsigned signed

C标准(5.1.2.2.1程序启动)说:

程序启动时调用的函数名为main.[...]
它应该定义为返回类型为int且没有参数:
int main(void) { /* ... */ }

或者有两个参数[...]:
int main(int argc, char *argv[]) { /* ... */ }

后来说:

argc的值应为非负值.

  • 为什么不应该 argc被定义为unsigned int,argc据说意思是"参数计数"?
  • 应该argc用作索引argv吗?

所以我开始想知道C标准是否说明了数组索引的类型.签了吗?

6.5.2.1数组下标:

其中一个表达式应具有类型'' 指向对象类型指针 '',另一个表达式应具有整数类型,结果具有类型'' type ''.

它没有说明它的签名(或者我没有找到它).看到使用负数组索引(array[-1])的代码是很常见但是不是未定义的行为?

  • 数组的索引应该是无符号的吗?

小智 6

main()中int的原因是历史性的 - 它始终是这样的,因为早在语言标准化之前.数组索引的要求是它在数组的范围内(或者在某些情况下,在结束之前) - 其他任何东西都是未定义的,因此签名是无关紧要的.