如何理解表情?

时间:2019-09-22 17:16:27

标签: c

我已经使用表达式做了一些实验。当我使用一些代码时,我发现了这不寻常的事情。

  • 初审
    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

为什么我的第一个试验和第二个试验给出了错误,而第三个试验没有受到损害?

我需要一些解释。

1 个答案:

答案 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的值,如测试所示。