我已经使用表达式做了一些实验。当我使用一些代码时,我发现了这不寻常的事情。
int i = 3;
int j = 5;
j >= i;
printf("Output1 = %d\n", i);
printf("Output2 = %d", j);
当我编译这段代码时,我得到错误消息。
int i = 3;
int j >= i;
printf("Output1 = %d\n", i);
printf("Output2 = %d", j);
return 0;
这也给我一个错误消息。
int i = 3;
int j = 5 >= i;
printf("Output1 = %d\n", i);
printf("Output2 = %d", j);
1)如果将输出i <= 5
Output1 = 3
Output2 = 1
2)如果将输出i > 5
Output1 = 3
Output2 = 0
为什么我的第一个试验和第二个试验给出了错误,而第三个试验没有受到损害?
我需要一些解释。
答案 0 :(得分:2)
将评论转换为答案。
在第一次试用中,语句j >= i;
对计算没有影响,因此编译器将其忽略。您的编译器设置可能会将该警告转换为错误,这是一件好事。
第二次试用是完全语法错误。您不能使用比较代替初始化器。
第三次试验很好,并给出了预期的结果。比较之类的值,例如5 >= i
,如果比较结果为false,则为0;如果比较结果为true,则为1。
但是在第三个示例中,初始化程序中也有一个比较,但是没有给出语法错误或编译错误
在第三个中,您具有:
int j = …something…;
这是一个有效的初始值设定项(因为…something…是有效的比较)。初始化程序以=
符号开头。在第二个中,您有nt j >= i;
-这不是以=
开头,因此无效。请注意,尝试int j == i;
也是无效的;符号是==
而不是=
。
有关初始化器的语法,请参见C11 §6.7.9 Initialization和§6.7 Declarations。
这意味着在初始值设定项中的比较为true,则输出1。如果为false,则输出0。
是的,初始化程序中的比较会生成1(真)或0(假),这就是分配给j
的值,如测试所示。