Есть ли подмножество C, может записать как это: я = + 1?

Я не забываю читать книгу, говорящую о стандарте язык программирования C. Это сказало в некотором C, что можно записать i = + 1, который равняется мне + = 1. Таким образом, я (оператор) = (выражение) равняюсь мне = (оператор) (выражение). Я никогда не вижу этот вид C, есть ли кто-то, кто может объяснить это?

Наилучшие пожелания и спасибо, Fan

9
задан luke 6 January 2010 в 16:34
поделиться

6 ответов

Это правда. Эта версия C называется CRM C (CRM означает "C Reference Manual" - документ, написанный Деннисом Ричи). Есть много странных вещей в этой версии C.

Вы можете скачать документ здесь http://cm.bell-labs.com/cm/cs/who/dmr/cman.pdf

14
ответ дан 4 December 2019 в 06:08
поделиться

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, что, возможно, и предполагалось.

8
ответ дан 4 December 2019 в 06:08
поделиться

Это, скорее всего, даст проблемы, когда необходимо присвоить переменной отрицательное число. Что же тогда решает, что вы имеете в виду? Пространства? (фу!) Или скобки (двойной фу!). Вот несколько примеров, показывающих 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

Как указано в комментариях, символ *, который используется для разыменования указателей, представляет собой точно такой же вопрос, как и знак минус.

.
1
ответ дан 4 December 2019 в 06:08
поделиться

Это не C. В стандарте C это эквивалентно i=1 . Может быть, вы ищете i++?

?
0
ответ дан 4 December 2019 в 06:08
поделиться

Это был очень важный синтаксис для оператора += в C. Я думаю, что он был устарел еще до первого издания книги K&R.

EDIT: PDF-файл со справочным манаулом C можно найти здесь: http://www.math.utah.edu/computing/compilers/c/Ritchie-CReferenceManual.pdf смотрите на 7.14.1

(Увы, размещенный АнТ больше недействителен)

22
ответ дан 4 December 2019 в 06:08
поделиться

Небольшой пробел может помочь вам прояснить это.

Когда вы пишете 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 .

Аналогично, оператор - может использоваться для уменьшения (уменьшения) переменной на единицу, аналогично тому, как ++ увеличивает (увеличивает) переменную на единицу. К обоим операторам применяются одинаковые правила размещения оператора до или после переменной.

Надеюсь, это немного проясняет ситуацию.

0
ответ дан 4 December 2019 в 06:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: