什么是C中的.p文件?

2 c sdl

我在Github上找到了这个项目,这是一个使用SDL的简单蛇游戏。在该项目中,此人似乎正向前宣告文件扩展名为.p的功能。

这是什么扩展名?我以前从未遇到过。他们在main函数之前调用此文件,为什么C将此读为有效格式并且似乎没有问题?.p扩展名是我没有遇到过的语言的实际部分吗?如果不是,是否可以将任何扩展名放在文件的末尾,并且只要它是有效的C,就可以对其进行编译?

Kei*_*son 5

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.psnake.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扩展的任何充分理由,但是它并没有破坏任何东西。