正确声明ANSI C中的main()函数[英] correctly declaring the main() function in ANSI C

本文是小编为大家收集整理的关于正确声明ANSI C中的main()函数的处理方法,想解了正确声明ANSI C中的main()函数的问题怎么解决?正确声明ANSI C中的main()函数问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

C标准说:

在程序启动时调用的函数 被命名为Main.实施 对此声明没有原型 功能.它应用 返回类型的int,没有 参数:

int main(void) { /* ... */ }

或有两个参数(参考 在这里作为argc和argv,虽然有的话 可以使用名称,因为它们是本地的 到它们的功能 声明):

int main(int argc, char *argv[]) { /*
... */ }

或等效或其他 实施定义的方式.

但是,克尼原和里奇在其第二版中(规范ANSI C)圣经只使用:

main()
{
  /* taram pampam ... */

  return 0;
}

谁是对的? 它是否与函数有关,而无需返回值自动假定在C?

中返回int

推荐答案

好吧,如果您想要ANSI C,那么根据定义,标准是正确的.

在C89/C90中暗示返回类型,因此K&R定义是可以接受的.

在C99中不再是这种情况.

C90标准具有以下措辞(5.1.2.2.1程序启动),该措辞与C99措辞非常相似(可能最重要的是它使用了较不强的" can"而不是"应"):

程序启动时调用的函数名为main.该实施不明该功能没有原型.可以在没有参数的情况下定义:

int main(void) { /* ... */ }

或带有两个参数(此处称为argc和argv,尽管可以使用任何名称,因为它们是声明的函数本地的):

int main(int argc, char *argv[]) { /* ... */ }

如果定义了它们,则main函数的参数应遵守以下约束:

[等. ...]

该部分没有直接关于离开返回类型的事实将导致其默认为int.

坦率地说,我很难准确地找到标准指定该行为的位置.我可以最接近的是6.7.1(函数定义),其中函数定义的语法表明"声明指示符"是可选的,示例说:

示例:

  1. 在下面:

      extern int max(int a, int b)
      {
          return a > b ? a : b;
      }
    

    extern是存储类规范符,int是类型说明符(每个类型都可以省略为默认值)...

其他推荐答案

是的,在C89(原始C标准)中,如果在没有返回类型的情况下声明了函数,则假定返回int. C99需要所有功能上的明确返回类型.

其他推荐答案

另外,main()和main(void)之间存在微妙的差异(至少在声明中) -

main()

是一个函数(隐式)返回int并采用未指定的参数数

main(void)

采用 no 参数.

本文地址:https://www.itbaoku.cn/post/359197.html