问有人有工具可以将旧式 C 程序转换为 ANSI C,或反之亦然,或自动生成原型吗?
答有两个程序,protoize 和 unprotoize,可以在原型和“旧式”函数定义和声明之间进行双向转换。(这些程序不处理“经典” C 和 ANSI C 之间的完整翻译。)这些程序是 FSF 的 GNU C 编译器发行版的一部分;请参阅问题 18.3。
unproto 程序(/pub/unix/unproto5.shar.Z 在 ftp.win.tue.nl 上)是一个过滤器,它位于预处理器和下一个编译器传递之间,可以实时将大多数 ANSI C 转换为传统的 C。
GNU GhostScript 包附带一个名为 ansi2knr 的小程序。
在将 ANSI C 转换回旧式之前,请注意,这种转换并非总是可以同时安全且自动地进行。ANSI C 引入了 K&R C 中不存在的新特性和复杂性。您尤其需要注意带原型的函数调用;您可能需要插入显式转换。另请参阅问题 11.3 和 11.29a。
存在几个原型生成器,许多是对lint的修改。一个名为 CPROTO 的程序于 1992 年 3 月发布到 comp.sources.misc。还有一个名为“cextract”的程序。许多供应商会在其编译器中提供此类简单实用程序。另请参阅问题 18.16。(但生成带有“狭窄”参数的旧函数的原型时要小心;请参阅问题 11.3。)