【问题标题】:How do I open and use old ANSI C code from 1996 on a Mac?如何在 Mac 上打开和使用 1996 年的旧 ANSI C 代码?
【发布时间】:2017-01-10 13:15:54
【问题描述】:

对于 uni 项目,我必须使用 1996 年 GSM 语音编码标准中提供的 ANSI C 代码。 zip存档可以在这里找到 https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=281

我有一台运行 OS X 10.11.6 的 MacBook Pro。

当尝试使用clang在终端中安装xcode编译其/C目录(主目录)中的所有不同文件时:

clang dtx.c err_conc.c globdefs.c gsm_hr.c homing.c host.c mathdp31.c mathhalf.c sp_dec.c sp_enc.c sp_frm.c SP_rom.c sp_sfrm.c utils.c vad.c male.inp -o GSMHR

它给出了多个错误,例如:

In file included from dtx.c:37:
./mathhalf.h:75:11: warning: incompatible redeclaration of library function 'round' [-Wincompatible-library-redeclaration]
Shortword round(Longword L_var1);      /* 1 ops */

我认为这是因为新编译器定义了当时未定义的函数?

无论如何,让这段代码可用的最简单方法是什么?

【问题讨论】:

  • -std=c89 选项是否让您失败了?
  • 在做类似工作的时候,我使用“sed”来重命名下载文件中所有冲突的函数。

标签: c xcode macos gsm ansi


【解决方案1】:

POSIX(和其他标准化机构)定义了一个 C 函数 round,它接受并返回一个浮点类型。似乎在 mathhalf.h 文件中声明的函数 round 可能在 mathhalf.c 文件中实现,并接受并返回 integer 类型(显然是 32 位和 16 位)。此函数与编译器自带的round 冲突。

假设函数在mathhalf.c 中实现,只需在.c 和.h 文件中将其重命名为例如intRound

【讨论】:

  • 是 1996 mac posix 吗?
  • @user3528438 不,但是带有 clang 的 201x MacOS X 是。没有人在谈论 1996 年的 Mac。
  • 是的,搜索所有文件并将所有内容更改为 rounded() 工作。我也对如何将命令行参数传递给它感到困惑,但我现在想通了。谢谢
猜你喜欢
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
  • 2017-05-27
  • 2019-08-16
  • 1970-01-01
  • 2015-03-16
  • 2011-04-07
  • 1970-01-01
相关资源
最近更新 更多