为什么编译器抱怨减去负数?

Ufo*_*mut -3 c

 #include <stdio.h>
 int main()
 {
  int a,b;
  a=-3--25;
  b=-3--(-3);
  printf("a=%d b=%d\n",a,b);
  return 0;
 }
Run Code Online (Sandbox Code Playgroud)

在这个程序中,我认为只是很好,但仍然在构建时我得到了错误[ |5|error: expected ';' before numeric constant|.]我不知道这个程序有什么问题.

T.J*_*der 5

--是减量运算符.您不能将减量运算符应用于数字常量,因为它会更改它应用的内容.那是

--a;
Run Code Online (Sandbox Code Playgroud)

改变a.的价值.所以--3无效,你不能改变常数.

如果你想减去一个负数,你需要在减号运算符-和否定运算符之间-或者()被否定的东西之间留一个空格:

a = -3 - -25;
b = -3 - -(-3);
Run Code Online (Sandbox Code Playgroud)

另外,请注意这-(-3)是一种冗长的写作方式3.


一般来说,空格和空白行不是敌人.在操作员周围放置空格,明智地使用空行,通常可以提高可读性.

#include<stdio.h>

int main()
{
    int a, b;

    a = -3 - -25;
    b = -3 - -(-3);
    printf("a = %d, b = %d\n", a, b);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)