Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何理解表达?_C - Fatal编程技术网

C 如何理解表达?

C 如何理解表达?,c,C,我用表达式做了一些实验。当我在处理一些代码时,我发现了这个不寻常的事情 初审 当我编译这段代码时,我得到了错误消息 第二次审判 这也会给我一条错误消息 第三次试验 1) 如果i5输出将 Output1 = 3 Output2 = 1 Output1 = 3

我用表达式做了一些实验。当我在处理一些代码时,我发现了这个不寻常的事情

  • 初审
当我编译这段代码时,我得到了错误消息

  • 第二次审判
这也会给我一条错误消息

  • 第三次试验
1) 如果
i5
输出将

Output1 = 3                                                                                         
Output2 = 1
Output1 = 3                                                                                         
Output2 = 0
为什么我的第一次审判和第二次审判都有错误,而第三次审判却没有受到伤害

我需要一些解释。

将评论转换为答案


在第一次试验中,陈述
j>=i对计算没有影响,因此编译器会忽略它。编译器设置可能会将该警告转换为错误,这是一件好事™.

第二次试验完全是语法错误。不能用比较代替初始值设定项

第三次试验很好,并给出了预期的结果。比较的值,如
5>=i
,如果比较为假,则为0;如果比较为真,则为1

但是在第三个例子中,在初始值设定项中也有一个比较,但它没有给出语法错误或编译错误

在第三个示例中,您有:

int j = …something…;
这是一个有效的初始值设定项(因为…某物…是一个有效的比较)。初始值设定项以
=
符号开头。在第二个例子中,你有
ntj>=i-这不是以
=
开头的,因此无效。注意,尝试
intj==i也将无效;符号是
=
,而不是
=

有关初始化器的语法,请参见C11和

这意味着初始化器中的比较结果为真,它输出1。如果为false,则输出0


是的,初始值设定项中的比较生成1(真)或0(假)-这是分配给
j
的值,如您的测试所示。

在第一次试验中,语句
j>=i对计算没有影响,因此编译器会忽略它。编译器设置可能会将该警告转换为错误,这是一件好事™.  第二次试验完全是语法错误。不能用比较代替初始值设定项。第三次试验很好,并给出了预期的结果。比较的值,如
5>=i
,如果比较为假,则为0;如果比较为真,则为1。但在第三个比较中,initializer中也有comparison,但它没有给出语法错误或编译错误。在第三个比较中,您有
int j=…某物…
,这是一个有效的初始值设定项(而
…something…
是一个有效的比较)。初始值设定项以
=
符号开头。在第二种情况下,您有
int j>=i;
-这不是以
=
开头的,因此无效。请注意,尝试
int j==i;
也将无效;符号是
=
,而不是
=
。有关初始值设定项的语法,请参阅C11和。是的,比较器是初始值设定项中的n生成1(真)或0(假)-这是分配给
j
的值,如测试所示。
Output1 = 3                                                                                         
Output2 = 1
Output1 = 3                                                                                         
Output2 = 0
int j = …something…;