LINUX.ORG.RU

си C99

 


2

1

Уважаемые форумчане. Что Вы думаете по поводу использования этого стандарта? Стоит ли его использовать? И использует ли кто либо вообще. Столкнулся с предупреждением вида:

warning: universal character names are only valid in C++ and C99 [enabled by default]
Это из за значения юникода (типа \u2663) в массиве char, обойти(сь) могу, не использовать. Но всё-таки?

★★★

Последнее исправление: Frost (всего исправлений: 1)

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

Апологеты C++ используют шаблоны для метапрограммирования, а также используют STL и boost. Мне не нравится ни одна из этих технологий. А классы, неймспейсы в С широко используются, только C их не поддерживает, поэтому их имитируют на уровне соглашений. Есть использовать их на уровне языка, код будет лучше.

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

Ну могут быть разумные побуждения. Код для платформы, на которой нет C++ компилятора. Исключения это абстракция с ненулевым весом, против них могут быть разумные аргументы. Это да. Просто меня воротит от кодов возврата.

Если религиозный фанатизм, это плохо, согласен.

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

в C и крестах есть много непересекающихся фич.

Их немного.

если ты думаешь что C++ включает _весь_ язык C

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

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

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

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

Ну могут быть разумные побуждения. Код для платформы, на которой нет C++ компилятора.

Согласен. Выше вроде писали об этом.

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

Их можно не использовать и отключить ключиком компилятора.

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

Апологеты C++ ...

Далеко не все.

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

Например, std::sort в большинстве случаев встроит твой предикат сравнения в функции сортировки.

и раздует код. у всего есть свои преимущества и недотстатки.

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

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

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

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

и раздует код. у всего есть свои преимущества и недотстатки.

Ну так да. Всегда надо думать =) Проблема в том, что на С++ у тебя выбор есть, а на Си - нет.

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

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

инициализация полей структур по именам, массивы с переменной длиной (или это в С++ уже добавили? в вижуалах не работает), менее строгая типизация — это то с чем постоянно сталкиваюсь. это применяется практически во всех сишных программах. есть и другие отличия, особенно начиная с с99, не все это попало в C++.

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

Проблема в том, что на С++ у тебя выбор есть, а на Си - нет.

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

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

Ты можешь не использовать стандартную библиотеку С++. Сам C++ будет лучше, чем C. Шаблоны, пространства имен, RAII, перегрузка функций, простой и быстрый вариант ООП, исключения и т.д. и т.п. Добавь к этому принцип «не платить за то, что не используем» и получишь довольно неплохой инструмент. По крайней мере, лучше С.

Посматриваем тем временем на Rust, да. Вдруг получится.

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

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

Сколько там будет копипасты из другой функции?=)

А я за это время сделаю что-нибудь полезнее, чем писать функцию сортировки. Я такие вещи делаю только когда алгоритмическая необходимость, так сказать, возникает.

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

Сколько там будет копипасты из другой функции?=)

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

Я такие вещи делаю только когда алгоритмическая необходимость, так сказать, возникает.

аналогично. я просто указал на твою ошибку по поводу «в си нет выбора».

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

Сам C++ будет лучше, чем C. Шаблоны, пространства имен, RAII, перегрузка функций, простой и быстрый вариант ООП, исключения и т.д. и т.п.

а шарп и жаба еще лучше будет, если нужен весь этот хлам. и чо?

ps если что, мне для ООП гораздо больше нравится objective c.

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

инициализация полей структур по именам

Неужели это так существенно?

массивы с переменной длиной (или это в С++ уже добавили? в вижуалах не работает)

Хотели в C++14, но насколько я помню, так и не добавили. Есть еще разговоры о std::dynarray, который, возмонжо, будет заменять эту возможность.

В gcc можно=)

менее строгая типизация

Это недостаток

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

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

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

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

а шарп и жаба еще лучше будет, если нужен весь этот хлам. и чо?

То, что в C++ ты за это платишь только когда используешь и только ту цену, что заплатил бы, реализуя это руками. Плюс много фич вообще не оставляют следов в рантайме. В отличие от.

И rust старается тем же путем идти.

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

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

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

это мы еще не начали обсуждать тему отсутствия стандартного C++ ABI. в то время как в C, ObjC, и даже шарпе с жабой — таких проблем нет, и никогда не было. а еще в крестах нет полноценного рефлекшена, без которого вместо ООП получается ГОП (говно-ориентированное программирование).

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

Юникод же двухбайтовый

ты свои четыре звезды с Windows CE насидел?

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

это мы еще не начали обсуждать тему отсутствия стандартного C++ ABI. в то время как в C, ObjC, и даже шарпе с жабой — таких проблем нет

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

а еще в крестах нет полноценного рефлекшена, без которого вместо ООП получается ГОП (говно-ориентированное программирование).

В С++ ООП убогое, но отсутствие рефлекшена это скорее благо, т.к. с ним как раз и пишут в стиле ГОП.

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

даже те, кто понимают, часто из лени пишут говнокод

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

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

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

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

Ох если бы программисты с «нехреновым таким стажем работы» ещё на самом деле переставали «дрочить на тактики и байты».

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

Ты так говоришь, будто это кому-то нужно.

вообще-то, да.

В виндах и так все таскают с собой

в виндах вендоры middleware на крестах предоставляют билды своих продуктов несколькими разными версиями вижуалов.

если нужно писать плагины к программам с крестовым API — типа 3dsmax — приходится использовать строго определенную версию вижуалов, которой собрана требуемая версия 3dsmax.

а в %никсах ABI давно стабильный

блин, я должен был догадаться что общаюсь со школьником :(

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

дрочить на тактики и байты

если это про меня, можно пруфы?

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

на крестах _очень_ трудно программировать с минимальным оверхедом.

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

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

Далее ты как-то неконструктивно пишешь, сорри=)

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

это мы еще не начали обсуждать тему отсутствия стандартного C++ ABI.

Есть такая проблема :'( Но важна она далеко не всегда, мягко скажем.

а еще в крестах нет полноценного рефлекшена, без которого вместо ООП получается ГОП (говно-ориентированное программирование).

Вот это весьма спорно. Я писал на языках с рефлекшеном, но ООП у меня и там не было никак завязано на него. Это скорее плохая практика.

С++ идет в сторону рефлекшена времени компиляции.

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

блин, я должен был догадаться что общаюсь со школьником :(

Если что, то это был какой-то другой анонимус=)

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

будет быстрее аналогичного кода на Java/C#

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

выглядеть не сильно хуже

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

Далее, возможно, пойдут оптимизации.

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

чтобы такого не происходило — нужен очень жесткий контроль, чтобы говнокод _вообще_ не мог пройти code-review. программисты намного более ленивы, чем тебе кажется. а фанаты крестов еще и безграмотны.

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

Если что, то это был какой-то другой анонимус=)

блин. вы подписывайтесь уже, чтоли...

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

я не имел ввиду завязывание ООП на рефлекшен, но как минимум хочется иметь что-то вроде respondsToSelector

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

если нужно писать плагины к программам с крестовым API — типа 3dsmax — приходится использовать строго определенную версию вижуалов, которой собрана требуемая версия 3dsmax.

Насчёт 3dsmax не скажу, но например foobar2000 имеет стабильный ABI на плюсах. Плагины можно собирать любой не очень старой версией VS.

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

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

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

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

А он типа один такой.

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

Ты сейчас какую-то боль свою рассказываешь.

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

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

однако, проблема существует сколько я себя помню, и с годами никуда не девается :) я вроде слышал что в C++14 хотели воткнуть спецификацию ABI. но то ли передумали, то ли не смогли.

подумай сам, ну вкрутят в шланг поддержку msvc C++ ABI (какой версии, кстати?), а через полгода M$ выпускает новый msvc с новым ABI. и все - приплыли.

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

блин, я должен был догадаться что общаюсь со школьником :(

Какой примитивный слив. С g++-3.4 совместимость поддерживается. В clang велосипедов не изобретали. Остается разве что icc и пр. проприетарщина, но отдельная тема.

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

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

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

однако, проблема существует сколько я себя помню, и с годами никуда не девается :)

Она существует и решается уменьшением количества С++ фич в ABI. Крайний случай COM интерфейсы, которые бинарносовместимы с большинством компиляторов С++ под венду (и не С++ тоже).

подумай сам, ну вкрутят в шланг поддержку msvc C++ ABI (какой версии, кстати?), а через полгода M$ выпускает новый msvc с новым ABI. и все - приплыли.

ABI состоит из множества вещей, некоторые ломаются между разными версиями MSVC, например нельзя передать std::string из одной в другую. Некоторые не очень ломаются - например структура vtable и calling conventions. Некоторые будут работать если линковать с соответствующим рантаймом. Например new в шланге и delete в msvc будут работать если слинковать с одним рантаймом.

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

Не, я не про твой исходный вопрос говорю, а про вопрос Eddy_Em.

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

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

я ответил много чего, не только то что ты перечислил. тебе просто фанатизм не позволяет это понять/принять.

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

ABI состоит из множества вещей, некоторые ломаются между разными версиями MSVC, например нельзя передать std::string из одной в другую.

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

иными словами, совместимости между разными std::string никто никогда и не ждал.

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

ты который из анонимусов, тот что школьник, или другой?

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

ты который из анонимусов, тот что школьник, или другой?

Он другой, а ты таки слился. Я в новом линуксе (без разницы какой дистрибутив) могу запустить, например, старый Skype с динамической линковкой к системному Qt. А ты продолжай фанатично вещать о некой несовместимости и опускаться до навешивания ярлыков, когда сел в лужу.

(школьник)

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

У меня обычно -std=gnu99

У тебя и звезды все зокрашыны, и на аве Эрег руки-ножницы :)

И в профиле:

Я - не программист! Помните это.

KennyMinigun ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.