3 плюс символы между двумя переменными (например, +++ b) в C
#include <stdio.h>
int main()
{
int a=8,b=9,c;
c=a+++b;
printf("%d%d%d\n",a,b,c);
return 0;
}
Программа выше выводит a=9 b=9
и c=17
. В a+++b
почему компилятор принимает a++
, а затем добавляет с помощью b
. Почему он не принимает a +
и
++b
? Есть ли конкретное имя для этого a+++b
. Пожалуйста, помогите мне понять.
Ответы
Ответ 1
Мне нравится объяснение от Expert C Programming:
Стандарт ANSI определяет соглашение, которое стало известно как стратегия максимальной маркировки. Максимальный munch говорит, что если там больше чем одна возможность для следующего токена, компилятор предпочтет укусить ту, которая включает в себя самую длинную последовательность символов. Итак пример будет проанализирован
c = a++ + b;
Ответ 2
Прочитайте Максимальный принцип Мунк
"максимальный munch" или "longest match" - это принцип, что при создании какой-либо конструкции следует потреблять большую часть доступного ввода.
У каждого компилятора есть токенизатор, который является компонентом, который анализирует исходный файл в разных токенах (ключевые слова, операторы, идентификаторы и т.д.). Одно из правил токенизатора называется "максимальным munch", в котором говорится, что токенизатор должен продолжать считывать символы из исходного файла, пока не добавится еще один символ, который заставит текущий токен перестать воспринимать
Ответ 3
Порядок операций в C диктует, что унарные операции имеют более высокий приоритет, чем двоичные операции.
Вы можете использовать + (++ b), если хотите, чтобы b сначала увеличивался.