有时我想告诉我的学生局部变量必须在使用前进行初始化。但在某些情况下,它们会在未初始化的情况下获得初始值零。所以我的学生不相信我。例如在这段代码中。
#include <stdio.h>
int main(void){
int sum;
sum += 5;
printf("%d", sum);
return 0;
}
有时输出为 5。为了演示未将变量总和初始化为零的未定义行为,我正在寻找一个示例。
最佳答案
指向标准是好的。但我理解你想给你的学生树立榜样的愿望。我不确定最好的方法;但是为了增加看到未定义行为的机会,您可以声明多个编译器无法轻易优化掉的变量。
#include <stdio.h>
void main(){
int sum1;
int sum2;
int sum3;
int sum4;
int sum5;
int sum6;
int sum7;
int sum8;
int sum9;
int sum=sum1+sum2+sum3+sum4+sum5+sum6+sum7+sum8+sum9;
printf("%d\n",sum);
}
在我的系统上;最近的 Ubuntu,最近的 GCC 在每次运行时都会产生不正确的结果,而你原来的例子总是产生 5。但我不能对你的系统做出任何保证。
关于在 c 中的两次执行之间故意更改随机内存位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52828584/