【问题标题】:What is the terminology for 1st line of main function?第一行主要功能的术语是什么?
【发布时间】:2021-07-11 17:34:08
【问题描述】:

如附件快照中突出显示的,主函数的起始行,我知道它是主函数的起始点,但它的正确术语是什么?我们可以称之为函数声明行吗?

【问题讨论】:

  • 函数签名是您要查找的术语吗?
  • main 也叫入口点.. ?
  • 您在寻找:函数main定义
  • 我认为没有合适的车道。最接近的可能是函数声明?但它肯定不是声明line。该声明可以很容易地分成多行,并且定义也可以是第一行的一部分。 C++ 不太关心行。
  • 它没有特定的标准名称。在 C 和 C++ 语法中,它由多个部分组成,语法中没有任何东西可以将 int main() 部分与其余部分区分开来。您可以将其称为没有主体的函数定义的一部分。但你为什么想要?这不是一个修辞问题。如果您正在寻找术语,大概是您想与某人交流一些东西。什么?交流的目的可能是阐明交流的良好措辞。

标签: c++ c terminology


【解决方案1】:

这一行

int main()

在函数定义中(同时是一个函数声明)被称为函数声明器,它具有返回类型(类型说明符)int

就是这段代码sn-p的整体

int main()
{
    //...
}

是在文件范围内引入标识符main 的函数声明。

注意根据C标准,不接受参数的main的函数声明器应该声明为

int main( void )

【讨论】:

  • main() 是声明者。 int 是一个说明符,不是声明符的一部分。
【解决方案2】:

我不了解 C,但这里有一些来自 C++23 草案的 sn-ps:

dcl.fct.def/3

示例1:完整函数定义的简单示例是

int max(int a, int b, int c) {
  int m = (a > b) ? a : b;
  return (m > c) ? m : c;
}

这里intdecl-specifier-seqmax(int a, int b, int c)声明符; { /* ... */ } 是函数体。 —结束示例]

所以,在int main() 中,我们得到intdecl-specifier-seqmain()声明符

我们还有另一个例子(抱歉只找到例子dcl.fct/9:

[示例 5:声明

int fseek(FILE*, long, int);

声明一个函数,接受三个指定类型的参数,并返回int ([dcl.type])。 —结束示例]

(虽然不是正式的),我推断 decl-specifier-seqdeclarator 的组合使 int main() 部分成为 声明

【讨论】:

  • @IanAbbott 我明白了。这就是使用多种语言标签的危险。我没有注意到它有一个 C 标签(我不订阅 C 问题)。
  • 更正我的(已删除)评论:C 标准使用略有不同的术语:intdeclaration-specifiersmax(int a, int b, int c)declarator,{ ... }复合语句
  • @IanAbbott 知道了!我将编辑并明确说明我的答案仅适用于 C++。
【解决方案3】:

在 C 和 C++ 中有两个术语有共同的用法,不幸的是经常相互混淆。这些术语是声明定义

声明告诉编译器某些东西(“名称”)存在于程序的某处。定义是所声明事物的实现。

对于函数,可以同时有声明和定义。

例如,假设您的程序有一个名为foo 的函数,它接受一个int 参数并返回一个int 值。可以声明为:

int foo(int arg);

函数的这种声明也称为声明函数的原型。你需要在调用函数之前有这个声明,否则编译器不会知道它存在。声明后就可以调用函数了,编译器不需要查看函数的完整实现,只需要查看声明即可。

然后我们有了定义,我们在哪里实现函数:

int foo(int arg)
{
    return arg * 2;
}

现在让我们使用另一个函数bar,它不接受任何参数并且不返回任何值。它没有先前的声明,只有一个定义:

void bar(void)
{
    // Does something here...
}

但是因为在定义之前没有现有的声明,所以定义是是声明。


另请注意,在函数声明方面,C 和 C++ 之间存在很大差异。

在 C 中,不带参数的函数必须使用参数类型void。不指定任何参数:

void some_function();

实际上将函数some_function 声明为采用不确定数量的不确定类型的参数。然后,C 编译器将在第一次调用或找到另一个指定参数的声明(或定义)时填写缺少的参数详细信息。

在 C++ 中,这样的声明将函数声明为采用 no 参数。

这只是 C 和 C++ 之间的一个区别,也是我们这里的许多人不喜欢用两种语言或术语“C/C++”来标记问题的原因。 p>

【讨论】:

  • 这个答案没有回答所提出的问题(什么是函数定义的特定部分的术语),没有提到定义是一个声明,并且暗示只有函数可以有同时声明和定义(其他类型的标识符可以同时定义和声明)。
【解决方案4】:

简单来说,函数声明就是声明函数名、参数和返回类型。
例如

int foo(int x, int y);  ==> Function declaration ends with semicolon ;

功能定义意味着您实际上是在定义功能。 例如

int foo(int x, int y){
      return x+y;
}  ==> Function definition enclosed within curly braces { }

给定的main()函数就是函数定义。

一般而言,出于常规目的,您可以将函数定义的第一行称为“函数头”。

函数定义的大括号 { } 中的整个代码为“函数体”。

【讨论】:

    猜你喜欢
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 2012-01-30
    • 2023-01-30
    • 1970-01-01
    • 2020-02-15
    相关资源
    最近更新 更多