我将C文件命名为什么?

时间:2013-08-23 16:07:15

标签: c

在Java中,编译器需要为文件命名<Classname>.java。在C中,文件名是什么意思?

6 个答案:

答案 0 :(得分:15)

不,源文件原则上可以被调用。但是,名称应反映文件的内容以提高可读性。头文件也不会具有被调用与相应的源文件相同;他们只是应该

答案 1 :(得分:3)

根据C89 draft standard(但更新标准也存在类似限制),3.8.2部分:

  

在分隔序列和外部源文件名之间应该有一个实现定义的映射。实现应为由一个或多个字母(如2.2.1中定义)组成的序列提供唯一映射,后跟句点(。)和单个字母。实现可以忽略字母大小写的区别,并在该句点之前将映射限制为六个重要字符。

因此,实施可能对所包含文件的名称构成一些限制,并且这些限制可能也适用于任何源文件(不仅是#include d个)。

在现代实现中,文件名长度的限制不应该太严格,但在命名源文件时我会坚持使用纯ASCII。无论如何,您选择的编译器的文档应该提到可能的限制。

附录:根据附件J(可移植性问题)中的最新C99草案(ISO-IEC 9899-TC3,又名WG14/N1256),有(强调我的):

  

J.3实现定义的行为

     

需要符合要求的实施 来记录 其每个行为的选择   本子条款中列出的区域。以下是实施定义:
  [...]

     

J.3.11预处理指令

     

[...]
   - 两种形式的标题名称中的序列如何映射到标题或外部   源文件名(6.4.7)。

这也证实了我上面对C99的陈述:实施可能对有效的源文件名施加限制(并且必须记录哪些文件)。

答案 2 :(得分:1)

不,文件中的任何内容都不需要与文件名匹配。但是,有些C编译器不喜欢不以多个扩展名之一结尾的名称。作为示例,GCC尝试通过查看已经通过预处理器运行的C的C .i的扩展名.c来检测文件是C还是C ++,因此不应再次通过C预处理器和.C(大写C vs早期的小写c),. cc .cpp,.cxx,.ii(比如.i仅适用于C ++)和C ++的更多内容。

答案 3 :(得分:1)

唯一的限制似乎是#include ed的文件可能只包含来自源字符集的字符,即允许写入实际源代码的字符集。

所以要解决这个问题:如果你没有#include文件C没有对命名进行任何限制。

详情请参阅C-Standard 6.4.7和5.2.1(源字符集)。

答案 4 :(得分:0)

如果要将多个C文件编译为一个可执行文件,则需要确保每个文件都有自己唯一的名称。

答案 5 :(得分:0)

不,在C语言中没有必要,但为了便于阅读,名称文件必须包含与其内容相关的名称,并且必须是唯一的。