所以我刚写了下面提到的程序:
@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;
}
我想知道为什么这个程序能够运行,即使我没有关闭声明,我也没有看到任何错误。
编辑:如果没有分号则编译器意味着相同的语句,除非它看到分号。
答案 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。