将C99代码转换为C89

时间:2016-05-11 13:17:34

标签: c visual-studio-2012 c99 c89

我有一个符合C99标准的VS2015代码,用于构建用于项目其他部分的静态和动态库。

我希望为其他VS版本构建库,但需要将代码转换为C89标准。

我找到了这个工具,https://github.com/libav/c99-to-c89 然后继续下载用于转换的二进制文件,而不是首先从源代码构建它。

所以我得到了这三个必须使用的文件:" c99wrap.exe" " c99conv.exe" " makedef"

所有Readme说使用它是: " 使用

c99conv转换预处理的C源,提供的c99wrap使用C预处理器,转换其输出并将其提供给C编译器。

c99wrap $ CC $ CFLAGS来源

"

任何人都可以帮助我并告诉我如何使用这些.exe文件将C99 C代码转换为相应的C-89代码?

我只需要转换代码。哪个可以在C89格式之后的任何VS版本上使用。

1 个答案:

答案 0 :(得分:3)

许多C99功能一开始就无法移植到C89。所以“魔术工具”只能做到这么多,你必须手动做很多。最常用功能的示例:

不便携:

  • 有效类型和严格别名。 C89“等效”是未定义的行为。
  • restrict指针。 C89没有等价物。
  • VLAS。 C89没有等价物。
  • 灵活的阵列成员。 C89“等效”是未定义的行为。
  • long long int支持。 C89没有等价物,但可能支持编译器扩展。
  • 有符号整数的可靠整数除法。 C89没有等价物。

便携式:

  • stdint.hinttypes.hstdbool.h。可能支持编译器扩展。或者你可以自己输入def。
  • 复合文字。可以用临时局部变量替换。
  • 任何地方的变量声明。只需将它们移动到块的顶部/循环外。
  • //评论。最有可能支持编译器扩展。否则用/ * * /
  • 替换
  • 指定的初始化程序。可以直接替换为老式的初始化列表。
  • 内联函数。可能支持编译器扩展。