我在Github上找到了this project,这是一个简单的SDL蛇游戏。在这个项目中,这个人似乎是在file内用.p扩展名声明了一堆函数。
这是什么扩展名?我以前从未见过这个。他们在main function之前调用此文件,为什么C将其读作有效格式并且看起来没有问题? .p扩展名是我未遇到的语言的实际部分吗?如果没有,是否可以在文件末尾放置任何扩展名,只要它是有效的C就可以编译?
答案 0 :(得分:4)
该项目中包含的文件snake.p
是C头文件。
C编译器通常关心在命令行上给出的源文件的名称。例如,C源文件可能被称为foo.c
,因此
gcc -c foo.c
将导致gcc认为它包含C源代码。其他后缀表示其他语言(C代表.cpp
,Ada代表.adb
等)。 (还有一个选项可以明确指定语言,但它很少使用,我甚至不记得它是什么,并且它很可能因不同的编译器而异。)
但是,头文件(也称为包含文件)通常不作为参数传递给编译器的命令行,因此相同的要求不适用。对C头文件使用.h
扩展几乎是普遍的约定,但是当预处理器看到#include
指令时,它真正关心的是文件的内容,而不是它的名称形式
我见过一个.inc
扩展用于异常包含文件(包含函数定义,而不是大多数头文件中常见的声明)。
在此特定项目中,使用名为snake.p
的工具从snake.c
文件生成文件cproto
。 Makefile
中的相关命令是:
.c.p:
@$(CPROTO) $(CPROTOFLAGS) $(INCLUDES) $< -o $@ &>/dev/null
表示可以通过运行snake.p
命令从snake.c
生成cproto
,该命令从包含函数定义的C源代码生成C原型(函数声明)。可能.p
代表“原型”。
将snake.p
文件snake.h
命名为更常见的,因为它只是一个头文件。将该文件包含在发行版中也更常见 not ,因为它是由构建过程自动生成的 - 但是作者可能希望未安装cproto
的用户成为能够建立项目。
结论:这只是该项目作者的一个不寻常的选择。我无法想出使用.p
扩展名而不是传统.h
扩展程序的任何充分理由,但它不会破坏任何内容。
答案 1 :(得分:0)
我从未听说过.p
扩展程序,但它看起来像一个头文件。你说C编译器不关心你给它的扩展名是对的。
答案 2 :(得分:0)
.p通常与matlab应用程序相关联。 link打破了其他语言与.p相关联的内容 并且是的,编译器并不关心文件的扩展名