相关疑难解决方法(0)

while(i - )s + = a [i]; 在C和C++中包含未定义的行为?

考虑简单的代码:

#include "stdio.h"

#define N 10U

int main() {
    int a[N] = {0};
    unsigned int i = N;
    int s = 0;

    // Fill a

    while(i--)
        s += a[i];

    printf("Sum is %d\n", s);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

while由于整数下溢,循环是否包含未定义的行为?编译器是否有权假设while循环条件始终为真,因此最终会出现无限循环?

如果i是的话signed int?它不包含与阵列访问相关的陷阱吗?

更新

我运行这个和类似的代码很多次,它工作正常.此外,它是向后迭代数组和向量的流行方式.我问这个问题,以确保从标准的角度来看这种方式是可行的.

乍一看,它显然不是无限的.另一方面,有时编译器可以"优化"某些条件和代码,假设代码不包含未定义的行为.它可能导致无限循环和其他不必要的后果.看到这个.

c c++ undefined-behavior

6
推荐指数
2
解决办法
381
查看次数

标签 统计

c ×1

c++ ×1

undefined-behavior ×1