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;
}

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

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

В том, что ты даже собрать не попытался.

null_or.c: In function ‘main’:
null_or.c:5:23: error: passing argument 1 of ‘puts’ makes pointer from integer without a cast [-Wint-conversion]
    5 |   puts( getenv("FOO") || "FOO is undefined" );
      |         ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
      |                       |
      |                       int
In file included from null_or.c:1:
/nix/store/74qjr01q87nwfl0dbsr1s45p8crw3q1f-glibc-2.40-66-dev/include/stdio.h:714:30: note: expected ‘const char *’ but argument is of type ‘int’
  714 | extern int puts (const char *__s);
Guillaume_de_Nogare
() автор топика
Ответ на: комментарий от Guillaume_de_Nogare

Во первых я вижу в комплекте с MSVC всякие clang-tidy/clang-format/clang-asan, но возможно нужно доустановить эти компоненты в инсталере. Однако все продакшен проекты, с которыми я знаком, используют msvc для винды.

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

Во первых я вижу в комплекте с MSVC всякие clang-tidy/clang-format/clang-asan, но возможно нужно доустановить эти компоненты в инсталере.

Тадаааам:

https://learn.microsoft.com/en-us/cpp/build/clang-support-msbuild?view=msvc-170

Однако все продакшен проекты, с которыми я знаком, используют msvc для винды.

Об убогих не будем тут..

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

Каких? Основная прибыль MS идет от клауда. А там линукс везде.

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

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

Не сторонник мелкомягких, но твой подход крайне не взрослый

Что именно в нём невзрослого? Я думаю, MS и сами бы рады избавиться от MSVC, да только портировать все вендовые расширения на LLVM и потом обеспечить совместимость со всем существующим кодом физически невозможно.

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

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

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

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

Что именно в нём невзрослого? Я думаю, MS и сами бы рады избавиться от MSVC,

Конечно, но вот почему они до сих пор этот чудо ЯП не разработали?

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

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

Наш опенсурсный линуксозагончик – самый прибыльный в IT. Кажется странным отрицать кучу софта для венды, но, при зарплаты там так себе.

anonymous
()

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

Всю жизнь стараюсь избегать тернарника, тем более всяких PHP-ных аналогов вроде ??.

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

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

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

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

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

удивительно это в сочетаниИ с приязнью к очень эффективного языка в sam/acme в части расширенныго(оригинально и по тексту ) регулярных выражений

плохой он из за энтропии и из-за не возможности избавлятся от не взлетевших фичей(ну и тех которые перекрываются более общими и лаконичными идиомами что делает сохранение старых попыток чисто сохранением совместимости и когнитивным удорожанием общего медиа)

т.е. проблема в отсутсвие чёткой версионости синтаксиса когда можно почти _автоматически переводить деприкейтед конструкции

жаль что такой способ сохранения обратной совместимости не популярен

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

Слова не мальчика, но Go-евангелиста :) Удивительно бы было услышать обратное, ведь в Go их нет.

Всю жизнь стараюсь избегать тернарника, тем более всяких PHP-ных аналогов вроде ??.

Кстати, мне крайне интересен феномен перебегания пхпшников на голанг. Какого гошника не ткнёшь, почти наверняка это бывший пхпшник. Как так?

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

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

Было бы гораздо проще, если бы if-else в Си был выражением и возвращал значение. Но почему-то в Си так нельзя делать.

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

То, что тебе закрытость - табу, это раз про высокие идеалы.

И с чего ты это взял? Сам придумал?

Закрытость – это не табу, но это достаточно весомый минус в некоторых случаях. Например, закрытые продукты развиваются медленнее, как в данном случае и происходит: в LLVM коммитят несколько жирных контор, а в MSVC – ровно одна.

Msvc скорее всего лучше работает с отладчиком в vs code / studio.

Было бы удивительно обратное, не находишь? Visual Studio вообще классная IDE, она и с Clang отлично работает. Одно время я даже думал держать венду в виртуалке тупо ради неё, чтобы писать софт под лялекс. Но это не отменяет общей убогости MSVC.

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

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

На собесах видел несколько случаев переписывания PHP на Go.

kaldeon
()

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

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

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

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

На си вообще писать не нужно, он плох практически во всем.

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

alysnix

Меня всего пару месяцев на ЛОРе не было. Что тут произошло?!

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

Я это взял с твоих сентенций про убогих.

Если проект пилят на msvc и ты приходишь туда работать, то и ок. А если там на проекте C++17 то вообще фиолетово, чем компилировать. Кстати на macos на продакшене скорее всего будут юзать не clang, а apple clang, который также отстает с поддержкой стандарта.

Кстати забавно, судя по https://en.cppreference.com/w/cpp/compiler_support.html поддержка C++20 в msvc лучше чем в clang. Более новые стандарты полностью не поддерживаются еще никаким компилятором. Так что твои выводы, что закрытый = медленно развивается не актуальны в данном случае. И ненависть к msvc кроме как религией не назовешь.

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

Если проект пилят на msvc и ты приходишь туда работать, то и ок. А если там на проекте C++17

В Visual Studio (не Code) с 19-й версии можно вести разработку для Linux и конечно отладка поддержана.

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

Кстати забавно, судя по https://en.cppreference.com/w/cpp/compiler_support.html поддержка C++20 в msvc лучше чем в clang.

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

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

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

И ненависть к msvc кроме как религией не назовешь.

Откуда ты про ненависть взял-то? Есть вполне обоснованная позиция, что отсутствие поддержки в MSVC в 98% случаев не является причиной не использовать фичу языка.

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

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

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

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

дык с sam всё так

не так с публикой которая предпочитает ad-hoc vi ->vim ->neovim

c привнесённой сложностью интерфейса с апелляцией к профессионализму такового интерфейса

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

Я писал про Windows, дяденька. Не про аппаратные платформы. У тебя совсем проблемы с чтением.

Во-первых у меня с чтением нет никаких проблем. Вот что ты написал:

MSVC – закрытый компилятор, поддерживающий ровно одну платформу,

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

LamerOk ★★★★★
()