我目前正在研究一个C项目,该项目必须在不同的建筑环境中具有相当的可移植性。该项目的目标是在托管C环境中符合POSIX的系统。

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

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

任何帮助表示赞赏。

最佳答案

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

void foo(int *p, int *q)
{
    *p = (*q)++;
    ...

如果是p == q,则未定义。如果不解决停止问题,就无法提前确定是否会发生。

(编辑以纠正caf指出的错误。谢谢,caf。)

关于c - 严格的ISO C一致性测试,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3444123/

10-13 02:01