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

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

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

Лукавите, товарищ. Платформа – суть все вместе уровни абстракции для исполнения софта. Это конечно и архитектура процессора и ОС и среда исполнения и библиотеки.

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

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

Ты только что изобрёл C++. Который оказался никому не нужен.

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

Ты не жопой полыхай в интернетах, а портфель собирай.

Очень странная попытка съехать. Это ты третью страницу не можешь прочитать написанное и страдаешь что термины не термины.

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

+ отстраиваться от специфики окружения (ака абстрагироваться ака инкапсулировать в интерфейс «platphorm_is_» - что тоже имеет свою цену

либо держать колхозы разрабов по числу целей - что то же тот ещё для управляющих пастухов рай для проведения натурных измерений

ваще вроде вся индустрия скорости упирается как и главное в когда транслировать божественный сырец в цель

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

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

ох утро :)

пре: контесты (даже анонимно и может быть и только анонимно как молитва) одно из лучших упражнений в смирении humble programmer

ща не заметил про x и долго думал почему задача не hard %|

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

Это всего лишь символ, который практически наверняка уберет компилятор

Верно. Компилятору и правда всё равно.

зато этот символ помогает повысить читабельность

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

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

Это не правило. Не все продакшен проекты имеют рычаги для лоббирования требуемых фич в стандарт.

Ичо? Это не мешает использовать то, что реализовано в компиляторах и о чём авторы этих компиляторов говорят, что меняться 100% не будет.

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

Facebook? Они пилят Facebook, внезапно. Посмотри их технические презы на ютубе.

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

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

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

Ичо?

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

Facebook? Они пилят Facebook, внезапно

Используешь аргумент, потрудись узнать подробности. Что конкретно и т.п.

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

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

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

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

Я ничего не понял. Что означает «использовать стандарт»?

Смотри, у меня, например, есть проект на Си, которому уже лет 30. И вот я хочу в новом коде использовать #embed. Я ставлю компилятору флаг -std=c23 и спокойно использую #embed. Я уже использую новый стандарт C23 или ещё нет? Или мне надо весь код вообще переписать с учётом фич C23?

Используешь аргумент, потрудись узнать подробности. Что конкретно и т.п.

А они этого сами не раскрывали. Секретность, сам понимаешь. Можешь начать отсюда: https://www.phoronix.com/news/Facebook-GCC-CXX-Modules

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

Я ничего не понял. Что означает «использовать стандарт»?

Использовать фичи языка и библиотеки, которые включены в определенный стандарт, например C++11/14/17. Например мы в проекте используем С++17, т.е. все фичи, которые новее не используются.

А они этого сами не раскрывали. Секретность, сам понимаешь. Можешь начать отсюда

Это твой аргумент. Мне это не нужно.

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

Я ничего не понял. Что означает «использовать стандарт»?

Использовать фичи языка и библиотеки, которые включены в определенный стандарт, например C++11/14/17. Например мы в проекте используем С++17, т.е. все фичи, которые новее не используются.

Погоди. То есть, «использовать стандарт X» в твоём понимании означает «не использовать стандарт X+1 и новее». Херня какая-то выходит, если честно.

Но, в любом случае, я никогда не понимал смысла в таком монашеском аскетизме. Есть, конечно, отдельные странные личности типа @firkax, которые до сих пор собирают свой код в Visual C++ 97, но там отдельная шиза. А вот пользоваться свежим компилятором и при этом ограничивать себя от его возможностей – это что-то из иных миров.

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

Погоди. То есть, «использовать стандарт X» в твоём понимании означает «не использовать стандарт X+1 и новее». Херня какая-то выходит, если честно.

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

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

Это взвешенное правило.

Правило? Не, выглядит как просто странная хотелка.

А гнаться за последними нововведениями в языке (которые к тому же и не поддерживаются основными компиляторами)

Основные компиляторы C++ – это gcc и clang. У них проблем с поддержкой новых стандартов обычно нет.

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

Типа многомиллиардных корпораций вроде Facebook? Ну да, те ещё инфантилы, ничего не скажешь. Они небось ещё и Rust используют!

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

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

Ну почему? Убогие там покупают виртуалку с щиндой, платя за лицензию, ставят туда ноду, питон и го. Делают это всё в студии. Это ли не прибыль? Без лоха ведь жизни нет?

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

Правило? Не, выглядит как просто странная хотелка.

Ты специально игноришь аргументы? Я тебе писал, почему так.

Основные компиляторы C++ – это gcc и clang. У них проблем с поддержкой новых стандартов обычно нет.

Опять таки, основные это gcc/clang/apple clang/msvc/intel c++, и от твоего обратного мнения этот факт не изменится. Погугли статистику/популярность C++ компиляторов.

Типа многомиллиардных корпораций вроде Facebook?

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

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

Правило? Не, выглядит как просто странная хотелка.

Ты специально игноришь аргументы? Я тебе писал, почему так.

Нет, ты писал что кто-то так решил. Адекватных аргументов, почему не надо использовать свежие стандарты, ты так и не привёл.

Основные компиляторы C++ – это gcc и clang. У них проблем с поддержкой новых стандартов обычно нет.

Опять таки, основные это gcc/clang/apple clang/msvc/intel c++, и от твоего обратного мнения этот факт не изменится.

А чо не openwatcom? Или Compcert для сишечки? Если у тебя код под люнекс, тебе на MSVC должно быть глубоко фиолетово. Считать MSVC основным компилятором, когда пишешь под люнекс, достаточно странная идея.

Ты игноришь аргументы.

Только глупые и нерелевантные. Умные аргументы я не игнорирую.

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

Лоббировать конечно не способны. А вот использовать свежие стабилизированные фичи в компиляторах вполне способны.

Опять-таки погугли статистику используемых С++ компиляторов.

Используемых где? Под линукс это будет 90% GCC, 10% LLVM.

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

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

Если контора производит софт для собственного использования (у себя на серверах) то ей вообще плевать кто там что поддерживает. Могут и компилятор пропатчить для фичи которой вообще нигде нет. А уж если компилятор с нужной фичей уже есть, то этот готовый инструмент просто используется, а свидетели стандартов с их критиканством просто идут нафиг.

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

А я полтора часа не придавал значения этому x. Ну фильтр и фильтр, да хрен бы с ним. Плюс одна элементарная операция над данными, ничего особенного. Но, видимо, именно этот х позволяет найти решение попроще.

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

Нет, ты писал что кто-то так решил. Адекватных аргументов, почему не надо использовать свежие стандарты, ты так и не привёл.

Либо ты невнимательный, либо балабол.

А чо не openwatcom? Или Compcert для сишечки?

Просто погугли популярные компиляторы

Если у тебя код под люнекс, тебе на MSVC должно быть глубоко фиолетово

Используемых где? Под линукс это будет 90% GCC, 10% LLVM.

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

Только глупые и нерелевантные. Умные аргументы я не игнорирую.

Ага, так говорят, когда контрить нечем.

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

А чем под винду MinGW неподходящий инструмент? Единственный минус, имхо, это GNU make по умолчанию, который под виндой довольно задумчивый, ну это не всегда критично, а ещё его можно заменить на ninja.

(Ну и clang для винды тоже есть, но я clang только в макоси тыкал.)

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

Либо ты невнимательный, либо балабол.

Ну вот, пошёл переход на личности. Это ли не слив?

Просто погугли популярные компиляторы

Может, ты ссылку приведёшь, которую ты хочешь чтобы я нагуглил? Потому что я сейчас такой хероты нагуглю, тебе и не снилось!

Используемых где? Под линукс это будет 90% GCC, 10% LLVM.

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

Можем добавить сюда Android ещё, там тоже clang вроде. Самая популярная платформа, между прочим!

Но вообще, я не очень понимаю, что именно обсуждаешь ты кроме абстрактной херни в вакууме. Я свою позицию обозначил: проще всего (в плане трудозатрат и времени) ориентироваться на clang как самый распространённый компилятор (он буквально везде), если у тебя нет требований по конкретной целевой платформе.

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

А чем под винду MinGW неподходящий инструмент?

MinGW плох примерно всем. Там вся сборка – попытка натянуть древние линуксовые практики на крайне неподходящую для этого платформу. Я до сих пор не понимаю, почему гнутарды не запаковали gcc нативно под VS, как это сделано с Clang.

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

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

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

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

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

если у тебя нет требований по конкретной целевой платформе.

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

Как и про аппаратную архитектуру выше, тебе так кажется одному. Разупоролог всё ещё ждёт своего пациента!

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

Я знал, что ты не поймёшь намёка толщиной с дубовую рощу, поэтому переведу:

"Если у тебя нет требований по конкретной целевой платформе." - ты вообще не программист нифига, программирующий что-то нужное людям, а в лучшем случае школьник / студент.

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

Ну вот, пошёл переход на личности. Это ли не слив?

Ой, да. Это переход на личности. А вот это нет:

Только глупые и нерелевантные. Умные аргументы я не игнорирую.

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

А если по делу, то вот тут (Оказывается, в Си можно вот так... (комментарий)) я упоминал, почему использование новых фич может нести неудобства для команды. Ты это проигнорил своим:

Нет, ты писал что кто-то так решил. Адекватных аргументов, почему не надо использовать свежие стандарты, ты так и не привёл.

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

Может, ты ссылку приведёшь, которую ты хочешь чтобы я нагуглил? Потому что я сейчас такой хероты нагуглю, тебе и не снилось!

Ой, блин. Ну возьми ты хоть «the most used c++ compilers» хоть в google, хоть в yandex и погуляй по ссылкам.

Можем добавить сюда Android ещё, там тоже clang вроде. Самая популярная платформа, между прочим!

Да, под android-ом прям таки разработку и сборку ведут, ну-ну.

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

Ты сам написал херню, про убогость msvc, которую ничем и не доказал.

Я свою позицию обозначил: проще всего (в плане трудозатрат и времени) ориентироваться на clang как самый распространённый компилятор (он буквально везде), если у тебя нет требований по конкретной целевой платформе.

Госпади, ты уже разницу в трудозатратах нарисовал.

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

«Если у тебя нет требований по конкретной целевой платформе.» - ты вообще не программист нифига, программирующий что-то нужное людям, а в лучшем случае школьник / студент.

Расскажи мне, есть ли у библиотеки типа fmt требования по конкретной целевой платформе?

Хотя там чуваки, конечно, задрочились, и сделали поддержку MSVC и древних версии gcc/llvm.

The library is highly portable and requires only a minimal subset of C++11 features which are available in GCC 4.9, Clang 3.4, MSVC 19.10 (2017) and later

Тем не менее, требований по конкретной платформе я там не вижу.

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

Фейспалм.svg

Тем не менее, требований по конкретной платформе я там не вижу.

Ты их процитировал. Поддерживаются платформы, поддерживаемые

GCC 4.9, Clang 3.4, MSVC 19.10 (2017) and later

За проверкой своей платформы - идёшь смотреть списки поддерживаемых платформ этими компиляторами.

P.S.

Для программиста на хаскеле ты как-то подозрительно фейлишь простейшую логику высказываний старины Аристотеля.

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

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

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

Хотя да, кому я это рассказываю:

повышает а наоборот понижает

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

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

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

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

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

при некоторой вашей практичности в части стиля

есть пара-пар нюансов в частности :

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

@История чтения в западном мире: от античности до наших дней@

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

в целом реально проблема в неоднородности прогеров

qulinxao3 ★☆
()