LINUX.ORG.RU

Оказывается, в Си можно вот так...

 ,


0

4
#include <stdio.h>
#include <stdlib.h>

int main(void) {
  puts( getenv("FOO") ?: "FOO is undefined" );
  return 0;
}

GCC и Clang позволяют пропускать второй аргумент тернарного оператора, и в итоге можно делать вот такие штуки. Код выше аналогичен следующему:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
  char *tmp = getenv("FOO");
  if(!tmp)
    tmp = "FOO is undefined";
  puts(tmp);
  return 0;
}

Теперь я вообще не понимаю, как я без этого раньше-то на Си писал!

Ответ на: комментарий от Guillaume_de_Nogare

Забавно, что в MSVC C++23 вообще не поддерживается. А в clang поддерживается. И C++26 уже частично поддерживается в clang. Так что

Так что твои выводы, что закрытый = медленно развивается

очень актуальны в данном случае.

Да нихера они не актуальны. MSVC первым поддерживал фичи из C++11, пока гугл не пришёл и не спас впопенсурс.

LamerOk ★★★★★
()
Ответ на: комментарий от alysnix

Это уже было сделано в C++. Может быть, другими концепциями и другими средствами, но направление «улучшим сишечку» такое же. Поэтому сам C было бы лучше вообще особо не трогать. У него основная роль — не столько быть хорошим языком, сколько поддерживать самую огромную коллекцию легаси.

kaldeon
()
Ответ на: комментарий от Guillaume_de_Nogare

То, что поддерживается часть стандарта - это все равно, что не поддерживается вовсе. Поддержки C++23 полной нет нигде. Ты же смотришь на поддержку фич библиотеки тоже, да? Кто в здравом уме будет использовать компилятор без полной поддержки. Ну так и смысл использовать аргумент «в этом доме уже построено 6 этажей из 9, а в этом 3» ?

rumgot ★★★★★
()
Ответ на: комментарий от kaldeon

У него основная роль — не столько быть хорошим языком, сколько поддерживать самую огромную коллекцию легаси.

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

В «расширенном си» естессно должна быть совместимость с легаси. там только внешние доработки, чисто дополнения. Можно было сделать просто компиляцию в си, если без легаси никуда.

alysnix ★★★
()
Ответ на: комментарий от LamerOk

Тут нигде нет слова «Windows». Очевидно, что это не уменя проблемы с чтением, а у тебя - с написанием.

Конечно есть! Ведь ты не осилил прочитать остаток моего коммента.

MSVC – закрытый компилятор, поддерживающий ровно одну платформу, исключительно для которой сейчас пишут не то чтобы много софта – обычно стремятся захватить ещё хотя бы макось. Поддержку свежих стандартов в него добавляют достаточно медленно, если сравнивать с конкурентами. У него есть свои «особенности», которые требуется учитывать.

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

Тут нигде нет слова «Windows».

конкретно под венду

Точно нет? А если найду? Иди к разупорологу, у тебя хаскелисты в мозгу поселились и строят там синагогу.

Guillaume_de_Nogare
() автор топика
Ответ на: комментарий от LamerOk

Да нихера они не актуальны. MSVC первым поддерживал фичи из C++11, пока гугл не пришёл и не спас впопенсурс.

Ты тут про неактуальность рассказываешь и тут же приводишь в пример события 15-летней давности. Дядя, у тебя точно всё хорошо? Может, тебе валерьяночки попить?

Guillaume_de_Nogare
() автор топика
Ответ на: комментарий от rumgot

Я ж говорю, ты свою ненависть к msvc пытаешься оправдать фактами, но они у тебя не работают.

Но у меня нет ненависти к msvc. Как и к openwatcom, например. Это просто доисторические компиляторы, про которые можно забыть, потому что они потеряли актуальность.

Поэтому пора бы просто обновить свое мнение об msvc.

Не могу. Под линупсом он не запускается :((((((

Guillaume_de_Nogare
() автор топика
Ответ на: комментарий от Guillaume_de_Nogare

Господи, до чего же ты жалок.

Ведь ты не осилил прочитать остаток моего коммента.

Остаток твоего коммента - это логический вывод из заведомо ложного факта, что msvc якобы имеет поддержку только одной платформы.

Поскольку факт ложный, постольку и вывод - ложный.

LamerOk ★★★★★
()
Ответ на: комментарий от Guillaume_de_Nogare

Ты тут про неактуальность рассказываешь и тут же приводишь в пример события 15-летней давности. Дядя, у тебя точно всё хорошо?

Разумеется. Я же в отличие от тебя знаю логику, и знаю, что один факт опровергает общее утверждение.

Твоё общее утверждение

закрытый = медленно развивается

опровергнуто фактом быстрого развития msvc в начале 10-ых годов.

Может, тебе валерьяночки попить?

Чувак, это ты что не пост, то лажаешь в простейшей логике. Попробуй последовать своему совету сам.

LamerOk ★★★★★
()
Ответ на: комментарий от rumgot

То, что поддерживается часть стандарта - это все равно, что не поддерживается вовсе.

Тот же C11 полностью нигде не реализован, потому что там странные опциональные фичи, которые не особо нужны. Предлагаешь всем откатиться на ANSI C?

https://clang.llvm.org/c_status.html

https://gcc.gnu.org/projects/c-status.html

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

Ну, в лялексовом ведре вот используют как-то. А что именно тебя смущает?

Guillaume_de_Nogare
() автор топика
Ответ на: комментарий от LamerOk

Остаток твоего коммента - это логический вывод из заведомо ложного факта, что msvc якобы имеет поддержку только одной платформы.

MSVC умеет что-то кроме Windows? Можно пруфы? Хочу собирать люнексовое ведро в MSVC всем на потеху.

закрытый = медленно развивается

опровергнуто фактом быстрого развития msvc в начале 10-ых годов.

Как события 15-летней давности опровергают то, что происходит сегодня? Разупоролог тебя всё ещё ждёт!

Guillaume_de_Nogare
() автор топика
Ответ на: комментарий от LamerOk

А ты точно программист на хаскеле? Значение какого типа должен в теории возвращать произвольный if-else-if-else?

Одного и того же. А что? А Haskell, Rust, OCaml и даже в Си (тернарный оператор) же как-то возвращает.

Guillaume_de_Nogare
() автор топика

Мне нравится, как упоротые люнексоеды в этом треде залечивают мне про преимущества компилятора от Microsoft. Скоро начнут агитировать переход на Windows!

Guillaume_de_Nogare
() автор топика
Ответ на: комментарий от rumgot

Ты будешь утверждать, что clang можно полноценно использовать под этот стандарт?

Что такое «полноценно использовать»? Я утверждаю, что нет ни одной причины не использовать уже реализованные возможности из этого стандарта. Отсутствие реализации других возможностей такой причиной уж точно не является.

Guillaume_de_Nogare
() автор топика
Ответ на: комментарий от kaldeon

Всю жизнь стараюсь избегать тернарника … это плохой синтаксис, которым прячут плохой код, создавая видимость чего-то хорошего.

Вот только многие процессоры имеют такую инстукцию, типа select, которая позволяет установить маску во время сравнения и избежать явного условного оператора, который 1) медленный 2) невекторизованный и 3) не поддерживающий конвейризацию.

VIT
()
Ответ на: комментарий от VIT

Вот только многие процессоры имеют такую инстукцию, типа select, которая позволяет установить маску во время сравнения и избежать явного условного оператора, который 1) медленный 2) невекторизованный и 3) не поддерживающий конвейризацию.

Дядя, нормальный компилятор на if-else и тернарный оператор порождает ровно один и тот же код: https://godbolt.org/z/qzo4haa7n

Guillaume_de_Nogare
() автор топика
Ответ на: комментарий от Guillaume_de_Nogare

Я утверждаю, что нет ни одной причины не использовать уже реализованные возможности из этого стандарта

В крупных продакшен проектах так не работает. Тут определяется стандарт, фичи которого можно использовать. Поэтому поддержка части стандарта - это для хобби и своих проектах на коленке.

rumgot ★★★★★
()
Ответ на: комментарий от anonymous

ну да. но даже если оттуда убрать шаблоны (что облегчило бы компилятор) - все равно это будет язык совершенно иного уровня чем си.

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

alysnix ★★★
()
Ответ на: комментарий от LamerOk

Поскольку факт ложный, постольку и вывод - ложный.

из ложного всё

вывод может любой истиности

ложное основание лишь ложность доказаности следсвия

и эти люди проф программисты

реально наступили последнии времена

qulinxao3 ★☆
()

Элвис - инфернальное зло. Conditional operator - допустимое зло. Только if - добро. Только конченные долбогнусы могли в язык без null safety и с неявным приведением типов притащить Элвиса.

anonymous
()

Ух ты. Я знал что такое в пхп есть, в си проверить не догадался. Очень полезная штука, код вида if(!(x=f(...))) x=g(...); часто нужен, теперь буду короче писать.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Лишняя мусорная строка и лишняя мусорная переменная - ничего хорошего.

Она есть или пить просит? Это всего лишь символ, который практически наверняка уберет компилятор, зато этот символ помогает повысить читабельность и препятствует превращению кода в перловку.

anonymous
()
Ответ на: комментарий от rumgot

В крупных продакшен проектах так не работает.

В крупных продакшен проектах всё зависит от левой пятки главного разработчика. Как он сказал, так и будет. Тот же пейсбук, например, перелез на модули в C++ чуть ли не первым, потому что им очень всралось чтобы код быстрее собирался. Собственно, они были в числе тех, кто эти модули в полусыром виде в стандарт и присунул.

Guillaume_de_Nogare
() автор топика
Ответ на: комментарий от LongLiveUbuntu

А в итоге; «Памагити, у меня код упал».

Падающая сборка - это мелочи. Втихую меняющееся поведение - куда как опасней. Но сам я избегаю compiler-specific extensions если они не дают очевидных плюшек в генерируемом асме.

bugfixer ★★★★★
()
Ответ на: комментарий от Guillaume_de_Nogare

Это не правило. Не все продакшен проекты имеют рычаги для лоббирования требуемых фич в стандарт. И вообще хочу подробностей, что конкретно они пилят на c++ и под какую платформу?

И давай сделаем временное подведение итогов твоих аргументов: msvc убогий для убогих, он закрыт и оттого хуже развивается. При этом лучше интегрирован с отладчиком в винде, но это фигня. Т.к. главная фишка clang в том, что он на текущий момент реализовал больше вичей c++23/26 чем msvc, при том что меньше c++20, но все равно это не считается, главное, что реализовано больше фичей 23/26, хотя большинство прода их еще и не используют. А, да, также msvc фигня, потому что только под виндой, тогда как clang везде.

А теперь то, что будет в реальном мире: на macOS скорее всего в проде будет использоваться apple clang (который реализовал меньше фичей чем базовый clang). Таким образом для десктопа на проде будет винда - msvc, mac - apple clang, линукс - gcc/clang. И вывод: нужно быть реалистом, а не мечтателем, и использовать под каждую платформу подходящий инструмент.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 4)
Ответ на: комментарий от anonymous

ты не понял что речь идет о софтовой платформе

Никто не понял, что речь идёт о софтовой платформе, потому что нигде не было речи, что речь идёт о софтовой платформе. Впорись.

LamerOk ★★★★★
()
Ответ на: комментарий от qulinxao3

http://leetcode.com/problems/two-letter-card-game

Довольно сложная задачка была в последнем двухнедельном контесте. За полтора отведённых часа испробовал три решения и все оказались нерабочие. Индукция подводит.

Тесткейсы: http://0x0.st/KHtS.go

Edit: поправил линку

kaldeon
()
Последнее исправление: kaldeon (всего исправлений: 3)
Ответ на: комментарий от LamerOk

Никто не понял, что речь идёт о софтовой платформе, потому что нигде не было речи, что речь идёт о софтовой платформе. Впорись.

Ты пока единственный, кого заклинило. Тебе уже автор написал, анонимус написал, ещё один анонимус написал, а ты все все никак не осознаешь, что проблема в тебе.

anonymous
()
Ответ на: комментарий от anonymous

Потому что во мне её нет. Если какие-то малограмотные персонажи под "одной платформой" понимают две принципиально разных аппаратных архитектуры - это лишь очевидный результат их малограмотности. Завтра тут вообще могут объявится пять анонимусов, понимающих под "платформой" десиптиконов : интернет - бесконечный источник малограмотных, дураков и малограмотных дураков.

И да,

Ты пока единственный, кого заклинило.

Нет, я единственный, кто снизошёл. Не путай.

LamerOk ★★★★★
()
Последнее исправление: LamerOk (всего исправлений: 1)
Ответ на: комментарий от LamerOk

Потому что во мне её нет. Если какие-то малограмотные персонажи под «одной платформой» понимают две принципиально разных аппаратных архитектуры - это лишь очевидный результат их малограмотности.

Платформа разработки (development platform) – это общеупотребимый термин. Ты единственный в треде, кто не смог с первого раза понять. Окей, тебя объяснили, но ты продолжаешь делать вид, что не понял, хотя уже понятно, что понял. Зачем ты себя так ведешь, тебе внимания не хватает?

anonymous
()
Ответ на: комментарий от anonymous

Зачем ты себя так ведешь, тебе внимания не хватает?

Я в рамках наступающего учебного года оказываю бесплатную помощь малообразованным. Например, сейчас окажу тебе.

Платформа разработки (development platform) – это общеупотребимый термин.

Да, но в контексте компиляторов, а не тупых рекламных видосов для даунов с ютуба, гораздо более употребителен совсем другой термин - target platform. И когда говорят о поддержке платформ компилятором, имеют в виду именно его.

Видишь? Если бы не я, ты бы завтра пошёл в школу таким же малообразованным, как был сегодня, а благодаря мне ты будешь обогащён новым, доселе тебе не ведомым знанием.

LamerOk ★★★★★
()
Ответ на: комментарий от LamerOk

Да, но в контексте компиляторов, а не тупых рекламных видосов для даунов с ютуба, гораздо более употребителен совсем другой термин - target platform.

Эээ… как раз в контексте компиляторов термин «target platform» чаще всего означает «target triplet», куда входит вообще все, включая компилятор, вендора и архитектуру процессора.

Видишь? Если бы не я

… то я бы не прочитал такой классный клоунский взрыв жопы на пустом месте. Для этого ты и нужен, все так.

anonymous
()