Я не забываю читать книгу, говорящую о стандарте язык программирования C. Это сказало в некотором C, что можно записать i = + 1, который равняется мне + = 1. Таким образом, я (оператор) = (выражение) равняюсь мне = (оператор) (выражение). Я никогда не вижу этот вид C, есть ли кто-то, кто может объяснить это?
Наилучшие пожелания и спасибо, Fan
Это правда. Эта версия C называется CRM C (CRM означает "C Reference Manual" - документ, написанный Деннисом Ричи). Есть много странных вещей в этой версии C.
Вы можете скачать документ здесь http://cm.bell-labs.com/cm/cs/who/dmr/cman.pdf
Kernighan and Ritchie's The C Programming Language , первое издание объясняет это. Я нашел цитату в в этом посте на comp.lang.c
. Открывающая часть цитаты:
Поскольку С - развивающийся язык, некоторые устаревшие конструкции могут быть следующими в старых программах. Хотя большинство версий компилятора поддерживают такие анахронизмы [-- как в 1978--], в конце концов, они исчезнут, оставив позади только проблему переносимости.
В предыдущих версиях С для присваивания использовалась форма
=op
вместоop=
. Операторы. Это приводит к неоднозначности, типизированнойx=-1.
, которые на самом деле декреты
x
, поскольку=
и-
являются смежными, но которая может быть легко предназначена для присвоения-1
кx
.
Википедия также имеет аналогичное описание. Из их записи для C, говоря о K&R C и "старых C" различиях:
составные операторы присваивания формы
=op
(такие как=-
) были изменены на формуop=
для устранения семантической неоднозначности, создаваемой такими конструкциями какi=-10
, которые были интерпретированы какi =- 10
, а не какi = -10
, что, возможно, и предполагалось.
Это, скорее всего, даст проблемы, когда необходимо присвоить переменной отрицательное число. Что же тогда решает, что вы имеете в виду? Пространства? (фу!) Или скобки (двойной фу!). Вот несколько примеров, показывающих issues
i = -1; //Is this any different from the line below? Since when have spaces in these kind of cases mattered?
i =- 1; //If the suggested syntax existed, what would these two lines mean?
//The only thing left now (if we rule out making spaces matter) is to use parenthetis in my eyes, but...
i =(-1); //This is just ugly
Как указано в комментариях, символ *, который используется для разыменования указателей, представляет собой точно такой же вопрос, как и знак минус.
. Это не C. В стандарте C это эквивалентно i=1
. Может быть, вы ищете i++
?
Это был очень важный синтаксис для оператора += в C. Я думаю, что он был устарел еще до первого издания книги K&R.
EDIT: PDF-файл со справочным манаулом C можно найти здесь: http://www.math.utah.edu/computing/compilers/c/Ritchie-CReferenceManual.pdf смотрите на 7.14.1
(Увы, размещенный АнТ больше недействителен)
Небольшой пробел может помочь вам прояснить это.
Когда вы пишете i = + 1
, на самом деле происходит i = +1
. Это связано с тем, что в C. нет оператора = +. Оператор =
рассматривается как отдельный оператор, а +
является унарным оператором, действующим на константу 1
]. Таким образом, вычисление этого оператора начинается с правой стороны оператора =
. +1
вычислит значение 1
, а оператор =
затем присвоит это значение переменной i
.
+ =
- это собственный оператор в C, что означает «добавить значение выражения в правой части этого оператора к переменной в левой части и присвоить его этой переменной, так что что-то вроде следующее:
i = 3;
i += 2;
будет оценивать как 5
, потому что оператор + =
будет оценивать правую часть оператора (в данном случае 2
, и добавит его слева (в данном случае i имеет значение 3) и присвоит его переменной слева. По сути, это становится i = (2 + 3)
. Следовательно, переменная i
будет иметь окончательное значение 5
.
Если вы просто добавляете значение 1
к целочисленной переменной, вы можете использовать Вместо этого оператор] ++
. Добавление этого оператора после переменной (например, i ++
) приведет к тому, что текущая строка кода выполнит перед , увеличивая переменную на единицу. Префикс оператора перед переменной приведет к тому, что оператор будет выполняется после переменная увеличивается.
например:
i = 5;
j = i++;
приведет к i = 6
и `j = 5 ', тогда как
i = 5;
j = ++i;
приведет к i = 6
и j = 6
.
Аналогично, оператор -
может использоваться для уменьшения (уменьшения) переменной на единицу, аналогично тому, как ++
увеличивает (увеличивает) переменную на единицу. К обоим операторам применяются одинаковые правила размещения оператора до или после переменной.
Надеюсь, это немного проясняет ситуацию.