C术语:标题与签名

时间:2017-04-03 05:45:29

标签: c terminology

据我所知,单词标题通常是引用头文件,而单词签名是参考函数的参数和返回类型。例如,根据我的经验,这将被称为签名:

int ptInPoly(Point q, Point p[], int n)

我的教授在我的作业中将其称为标题。我发现这令人困惑,并想知道这种不同的使用术语是否常见或只有他做的事情。感谢

以下是关于使用术语标题的更多上下文:

"您的程序必须有一个标题为int ptInPoly(Point q, Point p[], int n)的函数,用于确定点q是否在p&#34中给出的多边形中;

3 个答案:

答案 0 :(得分:3)

正确的术语是函数声明。当显式拼写参数类型时,如您的情况int ptInPoly(Point q, Point p[], int n);,它也可以称为函数原型。 (非原型格式被认为是非常糟糕的做法,现在很少使用。)函数原型是一个函数声明。

函数声明和函数原型是C标准使用的正式术语。

header 的含义确实是一个头文件,.h作为扩展名。 C标准使用术语标题来描述头文件。

所以你的教授使用了错误的术语。

答案 1 :(得分:2)

标题永远不是一个正确的术语。 C11标准明确定义 标题 #include <foo.h>形式中包含的标题;此处<foo.h>标题的名称。因此<stdio.h><stdlib.h>等标题。 (它们不一定是实际文件,也不是C源代码:C11 footnote 182):

  

182)标题不一定是源文件,也不是&lt;和&gt;头名中的分隔序列必须是有效的源文件名。

另一方面,签名虽然不是很精确,但稍微好一点,因为它不是标准使用的那个。该标准使用术语 prototype 来声明函数签名,该函数签名指定参数的类型。 (C11 6.2.1p2)

  

[...]函数原型是声明其参数类型的函数的声明。 [...]

为什么签名有些模糊是因为在C中函数不需要原型,但是这样的函数仍然可以考虑具有部分签名,但在最严格意义上不是type signature。此外,无原型声明在C99和C11中被视为 过时 (C11 6.11.6, 6.11.7)

  

6.11.6函数声明符

     

1使用带有空括号的函数声明符(不是prototype-format参数类型声明符)是一个过时的功能。

     

6.11.7函数定义

     

1使用具有单独参数标识符和声明列表(不是prototype-format参数类型和标识符声明符)的函数定义是一个过时的功能。

因此最好的措辞是

  

您的程序必须具有原型 int ptInPoly(Point q, Point p[], int n)的功能,以确定点q是否位于p&#34;

答案 2 :(得分:0)

我有同样的问题,我理解这个

int ptInPoly(Point q, Point p[], int n)

是标题,但是

 ptInPoly(Point q, Point p[], int n)

称为签名。它被赋予了不同的名称,因为在 函数重载 中,函数的签名(函数名+参数列表)很重要。