int32_tmain()和intmain()有什么区别
我见过有些人使用int main()main 函数,而有些人使用int32_t main(). 两者之间有什么区别以及在哪里使用哪个。
回答
(这个答案是给 C 的。)
对于托管 C 实现(与“独立”或“嵌入式”实现相比,2018 标准在 5.1.2.2.1 1 中main规定,应使用 返回类型定义int,但实现可以定义其他可接受的定义. 具体来说,它只是说返回类型应该是int,而不是与 兼容或宽度相同的类型int。
什么是int32_t?它由讨论 7.20 的 7.20 指定<stdint.h>。7.20 1 说这个头文件声明了各种整数类型。7.20.1.1 说“typedef 名称指定宽度为N、没有填充位和二进制补码表示的有符号整数类型……”它并不是说这些类型必须与类型、、、等相同,甚至如果他们的属性匹配。“typedef 名称”是另一种类型的别名,而不是本身的类型,但typedef 名称可以是除 之外的某种类型的名称,甚至是与 无法区分的类型。intN_tcharshortintlongint32_tintint
因此:
- 您的 C 实现可以有两种类型
int并且int32_t具有相同的属性,但它们是不同的类型,后者是某些内置类型的 typedef 名称。如果是这样,则这些是不同的类型,并且int32_t main(void)不满足 5.1.2.2.1 1 的要求,除非您的 C 实现专门记录了main可能以这种方式定义的文件。 - 您的 C 实现可能
int是 16 位类型,int32_t而是long. 同样,int32_t main(void)不会满足 5.1.2.2.1 1。 - 您的 C 实现可能
int32_t是int. 在这种情况下,int32_t main(void)将满足 5.1.2.2.1 1。
int32_t但是,使用 确实没有意义。int完成所有必要的工作。
附录
评论中有一些讨论int main()是错误的 C. C 2018 5.1.2.2.2.1 1 说main可能以“等效”其显示的形式的方式定义,int main(void)并且int main(int argc, char *argv[])。当一个函数被定义()为用于参数列表时,该函数被定义为没有参数,这相当于使用(void). (请注意,()在不是定义的声明中使用不会指定是否有任何参数,但定义会解决它。)