我的代码:
#include <stdio.h>
int main(){
int a = 5;
int b,c;
if (a==4){
b = 6;
c = 7;
}
printf("%d %d\n",b,c);
}
我知道结果应该是0 0,但代码块给出答案50 8.我尝试了在线编译器,我得到了答案0 0.那么codeblocks有什么问题?我正在使用最新版本的codeblocks和gcc c编译器。我将来如何避免这类问题?
答案 0 :(得分:1)
我知道结果应该是0 0
你的猜测错了
变量b,c
是自动(存储说明符),未初始化变量 - &gt;不确定的价值 - &gt;不保证他们的价值观 - &gt;的 UB 强>!
在你的情况下,你得到50,8
你可能会得到其他值/打印垃圾/崩溃......
答案 1 :(得分:1)
b
和c
变量的值是垃圾,因为if()
条件变为false
。这意味着,它是未定义的行为。
C11部分6.7.9初始化:
第10段:
如果未初始化具有自动存储持续时间的对象 显然,它的价值是不确定的。
答案 2 :(得分:0)
b和c的值在此程序中未定义,因为它们在打印之前未初始化
答案 3 :(得分:0)
好的查看代码并逐步分析,
#include <stdio.h>
int main(){
int a = 5;//You've assigned the value of 5 to integer a.
int b,c;//You've declared two integer variables "b" and "c".
if (a==4)/*Compiler checks whether the if condition is true,which in your case is not*/
{
b = 6;/*Assigning value 6 to the b variable but no effect as the if condition of your's is not satisfied*/
c = 7;/*The same above condition applies here.*/
}
printf("%d %d\n",b,c);/*Here your trying to print the values of b and c,
But remember you have not given them any value. So the compiler automatically prints the garbage value(random value). It need not be 0 all the time.*/
return 0;//You forgot this step btw:)
}