该snake.p项目中包含的文件是C头文件。
C编译器通常关心在命令行上给定的源文件的名称。例如,一个C源文件可能称为foo.c,因此
gcc -c foo.c
Run Code Online (Sandbox Code Playgroud)
将使gcc假定它包含C源代码。其他后缀表示其他语言(.cpp用于C,.adb用于Ada等)。(还有一个选项可以明确指定语言,但是这种语言很少使用,我什至都不记得它是什么,而且很可能因不同的编译器而有所不同。)
但是,头文件(也称为包含文件)通常不会在编译器的命令行中作为参数传递,因此相同的要求不适用。在.hC头文件中使用扩展名几乎是一种通用的约定,但是当预处理器看到#include指令时,它真正关心的只是文件的内容,而不是文件名的形式。
我已经看到了.inc用于不寻常包含文件的扩展名(包含函数定义,而不是大多数头文件中常见的声明)。
在此特定项目中,使用称为的工具snake.p从snake.c文件生成文件cproto。中的相关命令Makefile是:
gcc -c foo.c
Run Code Online (Sandbox Code Playgroud)
表示snake.p可以snake.c通过运行cproto命令来生成,该命令将从包含函数定义的C源代码生成C原型(函数声明)。可能.p代表“原型”。
命名snake.p文件会更常见snake.h,因为它只是头文件。通常也不会在发行版中包含该文件,因为它是由构建过程自动生成的-但也许作者希望尚未安装的用户cproto能够构建项目。
底线:这只是项目作者的不寻常选择。我想不出使用.p扩展而不是常规.h扩展的任何充分理由,但是它并没有破坏任何东西。