为什么常量语法中没有符号字符?

Sab*_*ina 4 c syntax

为什么标准在常量语法中不包含符号字符?

值得一提的是,只有数字和符号字符才会出现在指数中.

das*_*ght 7

该标准不会对数字文字前面的符号感到烦恼,因为它会是多余的.

语法已经将符号捕获为一元加+和一元减-运算符的一部分.当你写作

int a = -4;
Run Code Online (Sandbox Code Playgroud)

右侧的语法可以充分描述为-带有操作数的一元减去表达式4.这是标准采用的方法.

  • @Dolda2000:不,每个文字(C标准称它们为"常量",但它们是相同的想法)具有特定类型.规则见[N1570](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf)第6.4.1.1节.未加十进制的十进制整数常量的类型是其值适合的`int`,`long int`或`long long int`中的第一个. (3认同)
  • @ShadowRanger:这可能是一个问题.如果`INT_MIN`是-32768,则表达式`-32768`的类型为`long`,而不是`int`类型.您可能会在``limits.h>`中定义`INT_MIN`,就像``(-32767-1)`. (3认同)
  • @ShadowRanger:文字本身不需要符合"int"的范围.您可以将它们视为任意精度整数,这些整数被"转换"为它们实际用作的数据类型. (2认同)

ric*_*ici 5

如果-是常量的一部分,-2那么4-2将是一个语法错误(因为令牌是始终的最长可能的序列).此外,语义-2147483648- 2147483648将是不同的(第一个将是int和第二个a long,假设int是32位并且long更长).这两件事都会令人困惑.

如果-它始终是一个运算符,那么语义-2147483648有时会出乎意料,但更常见的x-1是按预期工作.这就是大多数编程语言(包括C)的工作方式.