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
。
我正在处理一个使用 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 编译时,我得到了预期的警告:
警告:“
我可以删除警告的一种方法是以某种方式在生成的文件中添加 __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
。