C术语:标题与签名

C术语:标题与签名,c,terminology,C,Terminology,据我所知,单词header通常指的是头文件,而单词签名指的是函数的参数和返回类型。例如,根据我的经验,这将被称为签名: int ptInPoly(Point q, Point p[], int n) 我的教授称这是我作业中的标题。我发现这让人困惑,我想知道这种不同的使用术语是常见的还是只有他才会这样做。谢谢 以下是有关术语标题使用的更多上下文: “您的程序必须有一个标题为:int ptInPoly(点q,点p[],int n)的函数,用于确定点q是否位于p中给定的多边形中”正确的术语是函数声明

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

int ptInPoly(Point q, Point p[], int n)
我的教授称这是我作业中的标题。我发现这让人困惑,我想知道这种不同的使用术语是常见的还是只有他才会这样做。谢谢

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

“您的程序必须有一个标题为:
int ptInPoly(点q,点p[],int n)
的函数,用于确定点q是否位于p中给定的多边形中”

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

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

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


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

标题从来都不是正确的术语。C11标准明确定义了标题,即表格中包含的标题;此处
是标题的名称。因此,
等都是标题。(但它们不需要是实际文件,也不需要是C源代码中的文件:):

182)头文件不一定是源文件,头文件名中的分隔序列也不一定是有效的源文件名


另一方面,签名稍微好一些,如果不是很精确的话,因为它不是标准使用的签名。标准使用术语prototype来声明指定参数类型的函数签名:

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

签名之所以有点模糊,是因为在C语言中,函数不需要原型,但这样的函数仍然可以被视为具有部分签名,但从最严格的意义上讲,它不是一个。此外,在C99和C11中,无原型声明被认为是过时的

6.11.6功能声明器

1使用带空括号的函数声明符(不是原型格式参数类型声明符)是一种过时的特性

6.11.7功能定义

1使用带有单独参数标识符和声明列表的函数定义(不是原型格式参数类型和标识符声明器)是一种过时的特性


因此,最好的措辞是

您的程序必须具有一个带有原型
int ptInPoly(点q,点p[],int n)
的函数,该函数确定点
q
是否位于
p
中给出的多边形中。”


我也有同样的问题,我明白这一点

int ptInPoly(Point q, Point p[], int n)
是一个标题,但是这个

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

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

是的,作业只是使用了错误的术语。你的教授不是唯一使用这个术语的人,但仍然是错误的。你会在论坛和像tutorialspoint这样糟糕的网站上看到。你的教授是正确的,直到学期结束;)当然,从这个意义上说,他是正确的,我只是对所考虑的内容感兴趣red correct和正确的术语实际上,两者都不是:在C中,这被称为原型。实际上,C标准没有说头是文件。相反,它将包含在
#include
中的头称为头,但在任何地方都没有说明它们需要是文件。我只是读了:D
-pedantic
@AnttiHaapala好的,当你发现一个C工具链不使用文件,而是使用其他…东西时,请与我联系。@AnttiHaapala如何看待同一节中的第1段:“a#include指令应标识可由实现处理的头文件或源文件。@Lundin:Palm pilot上运行了几个自托管的C编译器。由于PalMOS没有一个文件系统(它只有一个关系数据库),工具链必须存储和读取来自TabelSun原型函数的源代码,甚至自C99 .LundIn Tror被标记为过时,但我认为C99过时:D。