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 сначала увеличивался.