为什么这个C代码有效? (它不应该)

时间:2016-11-21 07:20:57

标签: c comma-operator

我正在检查学生的作业。 分配是将大量英文字母打印到控制台。 出于某种原因,他所做的工作(第7行):

 int main(void)
 {
     char first = 'A';
     char last = 'Z';
     int amount = 0;

     amount = ("%d - %d", last - first + 1);
     printf("The amount of letters in the English alphabet is %d\n", amount); 
     return(0);
 }

看到它之后,我尝试将其他东西放在括号中,而不是“%d - %d”。无论我放在那里以及有多少逗号,它只会在最后一个逗号之后(这是正确的句子)。

那里到底发生了什么?

1 个答案:

答案 0 :(得分:3)

这是comma operator的使用示例之一。在

的情况下
 ("%d - %d", last - first + 1);

计算逗号运算符("%d - %d")的LHS操作数,结果被丢弃,然后计算RHS(last - first + 1)并作为结果返回。然后,结果会分配给amount,因此,amount会保留操作last - first + 1的结果。

引用C11,章节§6.5.17,逗号运算符

  

逗号运算符的左操作数被计算为void表达式;有一个   其评估与右操作数之间的序列点。然后是正确的   操作数被评估;结果有其类型和价值。

FWIW,在这种情况下,"%d - %d"只是另一个字符串文字,它不带任何特殊含义。