【问题标题】:Why would C files end in /*[]*/为什么 C 文件会以 /*[]*/ 结尾
【发布时间】:2013-10-22 13:57:02
【问题描述】:

我正在查看一些专有源代码:使用库的示例程序。

代码是用 C 和 C++ 编写的,使用 make 构建系统。

每个文件都以注释掉的[] 结尾:/*[]*/ 用于源文件,#[]# 用于生成文件。这可能是什么原因?

代码是使用 GCC 为 ARM 编译的,使用扩展。

【问题讨论】:

  • 那可能是vi
  • 我不会称其为编码风格,我猜它不是标准的 C。以# 开头的行通常是预处理器指令,[]# 不是标准的。你确定#[]#真的是每个文件的最后一行吗?
  • 我的猜测是 makefile 系统在某处使用了这些行。如果代码有足够老的 C 代码,它不一定依赖 // cmets,所以 # 将是一种添加单行非代码的方法,并且预编译器会将其过滤掉。也许是为了建立一个依赖树,还是什么?我的直觉是查看makefile。
  • @BasileStarynkevitch,我错了:编辑问题。
  • (仅供参考,我已使您的标题与您的文本一致。)C 编译器将像任何其他注释一样忽略 /*[]*/,并且 Make 同样会忽略 #[]#。我怀疑这是某种 IDE 的(空洞的)注释。是否有任何文件在方括号内有内容?原来是用什么IDE来写代码的?

标签: c coding-style


【解决方案1】:

它很可能是某种自动扩展的占位符。

通常类似 macrodef(或源代码控制过滤器之一)之类的东西会扩展此类项目以包含一些相关文本。由于通常只有受注释保护的括号会扩展,因此 cmets 将保留在原位,从而在编译时保护源代码免受实际扩展项的影响。

但是,您目前正在查看的可能是外部包含括号,其中所有内部扩展都已删除。这可能是在从一个源代码控制系统到另一个源代码控制系统的代码迁移期间完成的。尽管这样的想法是高度推测性的,但他们似乎并没有努力迁移扩展项目,而不仅仅是移除它们。

【讨论】:

    【解决方案2】:

    在我曾经工作过的一个项目中,每个 C 源文件最后都包含一个注释:

    /* End of file */
    

    原因是 gcc 警告

    Warning : No new line at end of file 
    

    所以我们有这个评论(后面有一个新行)以确保人们不会在评论之后写:)

    【讨论】:

    • 这毫无意义!只要编辑器允许,人们仍然可以删除该评论末尾的新行。
    • 这个主意不错,我也想提一下;但是,它无法解释为什么 make 文件具有相同的 cmets 样式。 Make 文件不会被编译,因此它们不会让gcc 发出编译器警告。
    • @rodrigo 当然,但是他们看到了评论,并且有点不写“在文件结尾之后”。确实有效。
    • @EdwinBuck 我们也有这个脚本,它有助于将分支与我们的旧 ClearCase 合并。
    猜你喜欢
    • 2010-10-18
    • 2021-03-30
    • 2011-12-25
    • 1970-01-01
    • 2016-01-26
    • 2011-01-19
    • 1970-01-01
    • 2012-06-12
    相关资源
    最近更新 更多