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

时间:2014-06-07 06:27:23

标签: 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;
 }

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

2 个答案:

答案 0 :(得分:5)

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

--a;

更改 a的值。因此--3无效,您无法更改常量。

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

a = -3 - -25;
b = -3 - -(-3);

另外,请注意-(-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;
}

答案 1 :(得分:0)

-符号之间放置一些空格,让编译器知道您只想使用一元和二进制-,而不是递减运算符--

a= -3 - -25;
b= -3 - -(-3);  

由于--是递减运算符,因此编译器不会将a= -3--25;转换为a= -3 - -25;