声明甚至工作和执行罚款没有分号

时间:2016-07-06 16:40:42

标签: c output

所以我刚写了下面提到的程序:

@QueryParam

输出是a = -120,b = 119,这对我来说很好,但是当我运行上述程序时稍加修改就会产生一些奇怪的结果。

 #include<stdio.h>
int main()
{
    int a, b = 120;
    a = -b--;
    printf("a = %d, b = %d", a, b);
    return 0;
}

我想知道为什么这个程序能够运行,即使我没有关闭声明,我也没有看到任何错误。

编辑:如果没有分号则编译器意味着相同的语句,除非它看到分号。

3 个答案:

答案 0 :(得分:2)

您的第二个代码(删除注释引起的语法错误后)读取

a = b-- - printf("a = %d, b = %d", a, b);

由于printf返回一个值,即有效代码。当我初始化

int a = 0;

程序输出

a = 0, b = 120

在C行尾并不意味着语句结束。

答案 1 :(得分:1)

您的代码有效,因为printf()返回一个int(打印的字符数),因此您的操作是

a = (b--) - (printf("a = %d, b = %d", a, b));

答案 2 :(得分:1)

一元减号和一元减量不具有相同的优先级。一元减量更高。如果一元减去更高,则无法应用递减,因为它的参数将是一个表达式而不是左值,并且只能递减一个左值。

我不知道&#34;没有关闭声明&#34;手段。你的意思是以&#39;}&#39;?

结尾的功能定义

//这里很奇怪,因为程序在这里没有分号运行。 ?首先,它没有分号就不会编译,更不用说运行了。另外,您不能使用 * // 来开始逗号,因此也不会编译。它运行是因为没有这些错误的先前版本已成功编译和链接并生成了a.out;毫无疑问,你是重新执行这个旧的a.out。