严格的ISO C一致性测试

ale*_*cov 10 c standards-compliance strict toolchain

我目前正在开发一个C项目,需要在不同的建筑环境中相当便携.该项目面向托管C环境中符合POSIX的系统.

实现良好程度的可移植性的一种方法是根据所选标准进行编码,但很难确定给定的翻译单元是否严格符合ISO C.例如,它可能违反某些翻译限制,或者它可能依赖于未定义的行为,而没有来自编译环境的任何诊断消息.我甚至不确定是否有可能检查大型项目的严格一致性.

考虑到这一点,是否有任何编译器,工具或方法在翻译单元的给定标准(例如,C89或C99)下测试严格的 ISO C一致性?

任何帮助表示赞赏.

Dav*_*ley 5

通常不可能找到未定义的运行时行为。例如,考虑

void foo(int *p, int *q)
{
    *p = (*q)++;
    ...
Run Code Online (Sandbox Code Playgroud)

如果 是未定义的p == q。如果不解决停机问题,就无法提前确定是否会发生这种情况。

(编辑以修复 caf 指出的错误。谢谢,caf。)

  • 你的例子实际上很好,即使`p == q` - 也许你的意思是`*p = (*q)++`,如果`p == q`是未定义的? (3认同)