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