代码之家  ›  专栏  ›  技术社区  ›  klutt Anjali Shah

程序是否在导致未定义行为的行之前定义良好?[副本]

  •  4
  • klutt Anjali Shah  · 技术社区  · 6 年前

    int main()
    {
        printf("Hello World!\n");
        int i;
        i = i++ + ++i; // UB
    }
    

    我发现 this 但是这个问题是关于C++的。这是关于C。

    这不是一个骗局 Undefined behavior and sequence points 因为它是C++。答案可能相同,也可能不同,但这个问题是关于C。

    1 回复  |  直到 4 年前
        1
  •  6
  •   Sander De Dycker    6 年前

    使用不可移植或错误的程序结构或错误的数据时的行为, 本国际标准对此没有要求

    注意:可能的未定义行为包括完全忽略不可预测的情况 环境(有或没有发出诊断消息),终止翻译或

    这意味着该标准不会对整个程序的行为(包括“早期”操作)施加任何保证。

    但是,特定的实现可能会为未定义行为的某些实例添加某些保证(例如,请参阅编译器文档)。以及 in practice ,许多实现的行为方式与您描述的方式基本相同。不过,优化往往使这一点难以保证。另外, compilers sometimes eliminate entire branches if they contain undefined behavior .