96 / 69 / 27
Регистрация: 26.08.2020
Сообщений: 361
|
|
1 | |
Тернарный оператор17.09.2020, 12:12. Показов 1087. Ответов 17
Почему вы говорите,что это неправильно:
!(fl==NULL)?:perror("Error"); Добавлено через 27 секунд смайлик - это двоеточие + return 1
0
|
17.09.2020, 12:12 | |
Ответы с готовыми решениями:
17
Тернарный оператор Тернарный оператор - пояснить код Тернарный оператор. Необходимо определить месяц Вычислить, используя тернарный условный оператор |
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,869
|
|
17.09.2020, 14:19 | 2 |
Сначала объясните почему вы хотите использовать именно эту конструкцию вместо обычного if?
0
|
96 / 69 / 27
Регистрация: 26.08.2020
Сообщений: 361
|
|
17.09.2020, 14:48 [ТС] | 3 |
однострочник понятный
0
|
5113 / 4552 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
|
||||||
17.09.2020, 15:11 | 4 | |||||
scanf, так совсем непонятно?
0
|
Вездепух
11690 / 6369 / 1723
Регистрация: 18.10.2014
Сообщений: 16,051
|
|
17.09.2020, 19:10 | 5 |
Что за странный вопрос? Потому что это невозможно даже скомпилировать, разумеется! Уже на уровне грамматики языка С не допускается "пустое место" в качество операнда оператора
?: .
0
|
96 / 69 / 27
Регистрация: 26.08.2020
Сообщений: 361
|
|
17.09.2020, 19:16 [ТС] | 6 |
это расширение компилятора
0
|
Вездепух
11690 / 6369 / 1723
Регистрация: 18.10.2014
Сообщений: 16,051
|
|
17.09.2020, 19:41 | 7 |
Вот вы и ответили на свой исходный вопрос о том, почему это плохо!
Но на самом деле - нет, это не "расширение компилятора". Компилятор языка С имеет право реализовывать какие угодно расширения, но при этом он обязан обеспечивать то, что компляция кода, являющегося ошибочным с точки зрения языка С (http://port70.net/~nsz/c/c11/n1570.html#5.1.1.3) приводит к выдаче диагностического сообщения. Ваш код нарушает синтаксис языка С. Выдал ли ваш компилятор диагностическое сообщение в ответ на ваш "расширенный" код? Нет? Значит это никакое не "расширение компилятора". Это либо баг компилятора, либо ваш компилятор вообще не является компилятором языка С.
1
|
Модератор
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
|
|
17.09.2020, 19:54 | 8 |
Да мало того! Тренарный оператор должен возвращать значение определённого типа. Нельзя в одном случае вернуть char* к примеру а в другом double. А здесь при TRUE вообще ничего нет, а при FALSE функция, возвращающая void. Фактически это дупель-пусто, а ни какое не расширение.
Добавлено через 6 минут Не сказал бы, что расширения компилятора это однозначно плохо. Иногда они сильно жизнь упрощают. Ну да, минус переносимость, но это когда она нужна...
0
|
Вездепух
11690 / 6369 / 1723
Регистрация: 18.10.2014
Сообщений: 16,051
|
|
17.09.2020, 19:56 | 9 |
Что делает GNU-шный расширенный
?: описано здесь https://gcc.gnu.org/onlinedocs... onals.html То есть это фактически попытка сделать из ?: то, что делает += из + и = . Но данный пример в это описание не вписывается. Что он будет делать интуитивно понятно, но, как видите, даже сами GNU-шники поленились предоставить полную спецификацию.
1
|
Модератор
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
|
|
17.09.2020, 20:09 | 10 |
0
|
96 / 69 / 27
Регистрация: 26.08.2020
Сообщений: 361
|
|
17.09.2020, 21:20 [ТС] | 11 |
учить перл как идея спс
0
|
5982 / 1991 / 323
Регистрация: 10.12.2013
Сообщений: 6,860
|
|||||||||||
12.02.2021, 08:55 | 12 | ||||||||||
у perl для этого
// оператор defined-or
0
|
из племени тумба-юбма
|
|
12.02.2021, 09:38 | 13 |
Даже если у вас компилируется и работает, вы сами не понимаете, что это не верный синтаксис? И что мешает вам сделать правильно, по канону языка?
0
|
Модератор
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
|
||||||
12.02.2021, 15:06 | 14 | |||||
volodin661, ну переменная-то может быть и определена
Добавлено через 6 минут Сознание того, что и так ?
0
|
193 / 140 / 36
Регистрация: 19.11.2020
Сообщений: 881
|
||||||
12.02.2021, 16:59 | 15 | |||||
Это говнокод. А значит ты остаёшься без работы, и без ЗП под забором у мусорки, что бы конкуренты не тырили плюшки от туда.
Добавлено через 1 минуту Видел как два бомжа дрались за грязную в краске парку, прям смачно друг друга лицом в грязь мокали за выброшенный мусор. Добавлено через 1 минуту Я бы упростил до
Что - то мне кажется что, компилятор увидит что присваивать значение некуда. И просто удалит тернарный оператор, сохранив логику условия, переделав под IF Программисты которые писали компилятор не дураки. Но в принципе только новичку придёт в голову написать этакое
0
|
5113 / 4552 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
|
|
12.02.2021, 17:28 | 16 |
0
|
5982 / 1991 / 323
Регистрация: 10.12.2013
Сообщений: 6,860
|
||||||
12.02.2021, 17:35 | 17 | |||||
так в исходном посте сравнивали с NULL, как бы намекая на тип pointer.
В 'C' компилятор заботливо оставит мусор в p после
( я просто в телефоне, лень проверять )
0
|
Модератор
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
|
|
12.02.2021, 18:32 | 18 |
volodin661, так сравнение с оператором ||= относилось к описанию gnu-того расширения тренарного оператора по ссылке из 9 поста.
0
|
12.02.2021, 18:32 | |
12.02.2021, 18:32 | |
Помогаю со студенческими работами здесь
18
Вывести название месяца используя тернарный оператор Тернарный оператор: Почему выводит ошибку lvalue required? Функция нахождения общего делителя, как работает тернарный оператор? Как оператор switch превратить в оператор if Оператор цикла, условный оператор Программа для вычисления выражение через оператор switch и тернарный оператор Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |