Подобный синтаксис, но каждый показывает ошибку, но другой не делает

Hiii все

Сегодня я сделал эту программу

int main()
{
   int a = 1,2; /* Shows error */
   int b = (1,2); /* No error */
}

Почему сначала каждый показывает ошибку, в то время как второй не делает? Просто () делает одну компиляцию программы. Почему?

- Shruti

8
задан adamk 14 August 2010 в 16:33
поделиться

5 ответов

(1,2) вычисляет последнее выражение в списке, то есть 2 .

Другой пример: (a, b, c) будет оцениваться как c .

Если вы хотите использовать дробное число, используйте тип float / double и точку в качестве десятичного символа: double d = 1.2;

0
ответ дан 5 December 2019 в 09:23
поделиться

int a = 1,2; 2 рассматривается как имя переменной, которое не может начинаться с числа, отсюда ошибка.

int b = (1,2); оператор запятая оценивает операнды слева направо и возвращает последнее выражение в списке, т.е. 2

9
ответ дан 5 December 2019 в 09:23
поделиться

Причина в том, что в вашем первом операторе int a = 1,2; запятая не является оператором последовательности. Она является частью списка объявлений и пытается инстанцировать целочисленную переменную с именем 2, что не разрешено языком.

Круглые скобки во втором выражении int b = (1,2); заставляют запятую быть разобранной как оператор последовательности.

3
ответ дан 5 December 2019 в 09:23
поделиться

Внутри круглых скобок язык указывает, что будет иметь место выражение. В этом случае (b) запятая представляет собой оператор запятой из языка C.

Без круглых скобок язык указывает, что объявления переменных разделяются запятыми. В примере a компилятор (синтаксический анализатор) ожидает дополнительных объявлений переменных.

6
ответ дан 5 December 2019 в 09:23
поделиться

Ни одна из них не имела смысла для меня вначале.

Но потом я вспомнил о множественных операциях в циклах for. Например:

for (a=1,b=2; a<1; a++)

Зная, что 1 является допустимым выражением, и что выражения являются допустимыми элементами языка, я сделал вывод, что (1,2) оценивает 1 (но ничего с ней не делает), затем оценивает 2 и возвращает 2.

И наконец:

b = (1,2);

Что делает: оценивает 1 и 2, как и раньше, возвращает 2 и присваивает его b.

0
ответ дан 5 December 2019 в 09:23
поделиться
Другие вопросы по тегам:

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