以下代码片段中的标记数是多少?

What is the number of tokens in the following code snippet?

printf("Some string here",++i++&&& i * * * a ) ;

我很困惑,如何计算此代码段的标记数。基本上,我不知道如何计算 &&&***

我觉得&&是1个token,&是1个,而***是3个token,不知道对不对。

我用空格编辑了代码以分隔标记。

有人可以用任何技术解释一下,以便我可以申请任何代码段吗?

任何帮助将不胜感激!!

您的分析是正确的。 C 中的标记化是贪婪的,这意味着当遇到 &&& 时,首先扫描可能的最长标记 &&。没有 ** 个标记,因此每个 * 个字符都是它自己的标记。

代币是:

  1. printf
  2. (
  3. "Some string here"
  4. ,
  5. ++
  6. i
  7. ++
  8. &&
  9. &
  10. i
  11. *
  12. *
  13. *
  14. a
  15. )
  16. ;

C 标记化是 "greedy" - 它首先尝试构建最长的合法标记。有关合法标点符号列表(&&++ 等),请参阅 online C 2011 draft standard 部分 6.4.6(标点符号)。

序列++i++&&&i***a将被标记为++i++&&&i, *, *, *, a。它将解析(++(i++)) && ((&i) * (**a)),这不是一个合法的表达式(i++的结果不是左值,所以它不能是一元的操作数++ 运算符)。