能否在Ubuntu 22.04.4上编译非ANSI C代码?
当然可以尝试在Ubuntu 22.04.4上编译你的非ANSI C代码!不过得先了解几个关键要点,帮你顺利推进这件事:
利用GCC的兼容模式:GCC对旧版C标准(比如你提到的System 5 Unix常用的K&R C,也就是非ANSI C)有不错的兼容性。你可以先用
-traditional参数来编译,这个参数专门针对K&R风格的代码。比如执行命令:gcc -traditional your_old_code.c -o your_program。如果遇到小问题,也可以试试-std=c90(ANSI C的第一个标准,和非ANSI差异相对小),看能不能顺利通过。处理语法差异:非ANSI C和现代ANSI C(比如C89及以后)有不少语法区别,比如K&R风格的函数声明(参数类型写在括号外)、隐式int类型、某些旧的预处理语法等等。如果编译时出现错误,你可能需要逐个调整这些地方——正如你所说,直接转换成ANSI C其实是个很稳妥的方案,这样代码不仅能在Ubuntu上正常运行,后续维护也会更方便。
注意库的兼容性:System 5 Unix的系统库和Ubuntu用的GNU C库(glibc)可能存在一些差异,比如某些旧的系统调用、库函数的接口变化。遇到这类问题时,可以查看glibc的相关文档,找到对应的替代函数,或者添加一些兼容宏定义来适配。
特别理解你这种时隔多年重拾旧代码的心情——虽然代码经验有点生锈,但对Unix/Linux的热爱一直没变!先试试兼容编译,遇到具体错误再针对性调整,实在不行转ANSI C也是个一劳永逸的选择。
备注:内容来源于stack exchange,提问作者Dr Bruce Stafford

