我找到了this project Github 上,一个使用 SDL 的简单贪吃蛇游戏。在这个项目中,这个人似乎在 file 中声明了一堆函数。带有 .p 扩展名。
这个扩展是什么?我以前从未遇到过这种情况。他们在 main function 之前调用此文件。 ,为什么 C 将其读取为有效格式并且似乎没有问题? .p 扩展名是我没有遇到过的语言的实际部分吗?如果不是,是否可以在文件末尾添加任何扩展名,只要它是有效的 C 语言,就可以编译它?
最佳答案
该项目中包含的文件snake.p
是一个C头文件。
C 编译器通常关心命令行上给出的源文件的名称。例如,C 源文件可能名为 foo.c
,因此
gcc -c foo.c
将使 gcc 假定它包含 C 源代码。其他后缀表示其他语言(.cpp
表示 C,.adb
表示 Ada 等)。 (还有一个选项可以显式指定语言,但它很少使用,我什至不记得它是什么,而且它很可能因不同的编译器而异。)
但是,头文件(也称为包含文件)通常不会作为编译器命令行上的参数传递,因此相同的要求不适用。对于 C 头文件使用 .h
扩展名几乎是通用的约定,但是当预处理器看到 #include
指令时,它真正关心的是 C 头文件的内容文件,而不是其名称的形式。
我见过一个 .inc
扩展名用于不寻常的包含文件(包含函数定义而不是大多数头文件中常见的声明)。
在此特定项目中,文件 snake.p
是使用名为 cproto
的工具从 snake.c
文件生成的。 Makefile
中的相关命令是:
.c.p:
@$(CPROTO) $(CPROTOFLAGS) $(INCLUDES) $< -o $@ &>/dev/null
其中表示可以通过运行 cproto
命令从 snake.c
生成 snake.p
,该命令生成 C 原型(prototype)(函数声明) 来自包含函数定义的 C 源代码。可能 .p
代表“原型(prototype)”。
将 snake.p
文件命名为 snake.h
更为常见,因为它只是一个头文件。更常见的情况是,不将该文件包含在发行版中,因为它是由构建过程自动生成的 - 但也许作者希望尚未安装 cproto
的用户> 能够构建项目。
底线:这只是该项目作者的一个不寻常的选择。我想不出使用 .p
扩展名而不是传统的 .h
扩展名的任何充分理由,但它不会破坏任何内容。
关于c - C 中的 .p 文件是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27674113/