yacc生成C文件ccsid警告抑制

Yacc generated C file sccsid warning supression

我正在处理一个使用 yacc - 1.9 20130304 的遗留项目。 生成的 .c 文件包含 sccsid 字符串(来自 skeleton.c):

#ifndef lint
static const char <file_name>sccsid[] = "@(#)yaccpar        1.9 (Berkeley) 02/21/93";
#endif

使用 gcc -Wall 编译时,我得到了预期的警告:

警告:“sccsid”已定义但未使用 [-Wunused-const-variable=]

我可以删除警告的一种方法是以某种方式在生成的文件中添加 __attribute__((unused)) 但这会非常乏味,因为项目很大并且包含许多具有复杂 makefile 结构的解析器生成器.

所以想知道有没有更简单的方法。我可以告诉 yacc 不生成 sccs id 吗?或者我可以指示 gcc 在 #ifdef lint 上不发出警告吗?或者其他解决方案?

编辑:我无法升级到较新版本的 byacc(不插入 sccsid)或修改 skeleton.c 并重新编译 yacc,因为我们必须使用特定版本的 linux 和图书馆由于软件保证保证。

任何 suggestions/hints 不胜感激!

正在将评论转化为答案。

有多种可能性:

  • 您可以编辑 skeleton.c 文件吗?这是一个麻烦的修复程序,因为每次重新安装 Yacc 时您都必须在所有机器上重做它。
  • 看起来像 Byacc — Berkeley Yacc。您拥有更改代码的全部权利 — 这会让生活变得更简单(并且代码不会经常更改)。
  • 或者,将 -Wno-unused-const-variable 添加到您的 command-line 选项,但它可能会抑制有关您应注意的其他变量的其他警告。
  • 你能负担得起用 -Dlint 编译(语法文件)吗?它将从编译器的角度消除变量。

最后一个(使用 -Dlint 编译语法)可能是最好的。受 #ifndef lint 保护的代码很少对代码的运行至关重要。在使用 lint 的日子里,它被用来隐藏来自 lint 程序的可疑构造。如今,在适当小心使用 headers 和来自编译器的详细警告的情况下,很少使用 lint