LINUX.ORG.RU

си C99

 


2

1

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

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

★★★

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

Откуда ж я знаю? Я хрюникод в своих велосипедах не использую, не хватало мне еще такого геморроя...

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

В 64. Если велосипед должен работать и на 32 бита, то приходится с выравниванием структур париться.

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

а чего он, собственно, хочет получить?

этот массив пытался скормить функции, для получения текстуры символа:

TTF_RenderUTF8_Blended(TTF_Font *font, const char *text, SDL_Color fg)

https://www.libsdl.org/projects/SDL_ttf/docs/SDL_ttf_52.html

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

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

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

Потому, что сейчас уже есть D и Go.

Нужно брать Си, когда есть С++, потому, что сейчас уже есть D и Go? У тебя все в порядке с логикой?

Я вместо extern C в крестах - лучше то же самое напишу в D

Не все так просто. D синтаксически не совместим с C.

Язык грамотнее, проще, удобнее.

Мне кажется, что ты его не использовал. У него много проблем, он не проще C++, он не удобнее, т.к. имеет малое число пользователей и все проблемы отсюда вытекающие - малое число библиотек, их плохое качество, плохая поддержка и т.д. Опять же, преимуществ над C++14 уже практически не осталось, после 17ого, боюсь, будет еще хуже. Ну нет у него такого большого сообщества, нет такого количества библиотек, нет стандарта и развития. Он мертв практически.

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

На Objective-C - есть

Нет, ибо Swift

Go

Этот язык не является заменой С++. Попробуй его, прежде чем говорить. У него тяжелый рантайм. У него неотключаемая сборка мусора. У него отсутствует статический полиморфизм и все делается в динамике. Он реально медленнее. Он хорош для переписывания некоторые бэкендов с PHP/Python/etc. на него для ускорения работы и упрощения архитектуры. Если на него можно перевести C++ проект, значит этот проект изначально надо было писать не на C++.

Имхо, сейчас писать на крестах смысла нет

Есть. Везде, где ты берешь Си. Пока Rust не достигнет нужной степени развития(а ведь может и не достигнуть вообще никогда).

Кресты вообще ничем не привлекают.

А чем тебя привлекает Си? Язык - это инструмент. Если его инструмент подходит, ты берешь и используешь его. Делая то, что тебе интересно(что тебя привлекает). Си, как инструмент, уступает во всем С++, при этом не дает никаких преимуществ.

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

Модули для питона как и сам питон пишутся на си

Модули для питона вполне себе пишутся на C++. И получается довольно неплохо.

Можешь мне показать аналог вот такого модуля на Си:

#include <boost/python.hpp>

struct World
{
    World(std::string msg): msg(msg) {}
    void set(std::string msg) { this->msg = msg; }
    std::string greet() { return msg; }
private:
    std::string msg;
};

using namespace boost::python;

BOOST_PYTHON_MODULE(hello)
{
    class_<World>("World", init<std::string>())
        .def("greet", &World::greet)
        .def("set", &World::set)
    ;
}

Ковырять кресты с обёртками для этого мне ну совсем не интересно.

Обертки нужны для ускорения разработки(смотри пример выше). А так можно и без оберток, так же, как в Си, в с Питоном общаться.

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

Тебе кажется что я не использовал Go и D, а мне кажется, что это ты не использовал их. На D мало библиотек? Отлично подключаются си библиотеки. Малое сообщество? И? В чём проблема? Не с кем потрепаться? :) Мне, например, не нужно сообщество, ведь я сам многое умею и прекрасно понимаю как и что работает. Знакомый америкос, который пишет на D у меня есть - я всегда могу уточнить что-то у него. Про тяжелый рантайм Go - ты его поднимаешь по утрам как гантелю? Что за «тяжелый»? У java тоже «тяжелый» рантайм? Так на java написано миллион софта - никого это не остановило. Я про замену не Си++ с помощью go, а про замену сишки на Go. Что если я куда-то и уйду с сишки - то только на Go, благодаря его взрывному росту. А про замену крестов - мне прекрасно заменяет D. Это что-то по типу компилируемой java. С проблемами не сталкивался, каких у него «много проблем»? Поподробнее?

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

Если работаешь просто с байтами, выбираешь char (int8_t), если нужно работать со строкой, берешь либу для юникода, все просто.

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

Ты намекаешь, что я не смогу накатать две функции и структуру на си, чтобы написать модуль для питона?) зачем мне для этого питон-буст?) Ну, я тоже могу заявить, что твой бусто-питон модуль будет весить 3Мб, а мой - 150Кбайт. Это при статической линковке твоего буста.

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

а какой смысл использовать C++ если задачу можно решить и на Си?

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

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

На D мало библиотек? Отлично подключаются си библиотеки.

Они подключаются менее удобно, чем в С++. И использовать их в D не удобно.

Про тяжелый рантайм Go - ты его поднимаешь по утрам как гантелю? Что за «тяжелый»? У java тоже «тяжелый» рантайм? Так на java написано миллион софта - никого это не остановило.

Тяжелый именно для замены C++.

Я про замену не Си++ с помощью go, а про замену сишки на Go. Что если я куда-то и уйду с сишки - то только на Go

Что же ты такое пишешь на Си, что можешь уйти на Go?

благодаря его взрывному росту.

Это пока фантазии. И да, каким образом взрывной рост связан с убогими возможностями языки и отсутствием механизмов работы на «низком уровне», ради чего и берут C и C++?

А про замену крестов - мне прекрасно заменяет D

Если бы. Нет, не заменяет. Я вот пока на Rust надеюсь.

С проблемами не сталкивался, каких у него «много проблем»? Поподробнее?

Сырость его основная проблема. То сборка мусора работает отвратительно, то память жрет непонятно в каком месте, то непредсказуемые тормоза встроенных хештаблиц(можно там зарезервировать изначальное число бакетов, их размер и пр., серьезно спрашиваю?)? Сталкивался с багами при сборке мусора(удалялись объекты, на которые были ссылки) и другими какими-то, сейчас уже не вспомню. Шаблоны там местами лучше С++, но местами слабее и еще более запутаннее. Язык-то неплох, но вот С и С++ заменить не в состоянии. Последний раз пробовал год назад на небольшом проекте.

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

Ты намекаешь, что я не смогу накатать две функции и структуру на си, чтобы написать модуль для питона?

Ты за деревьями леса не видишь. Я намекаю на то, что разработка модуля для питона будет идти быстрее на С++, если использовать библиотеки для этого, или будет идти чуть быстрее, чем на Си, если не использовать «обвязки». Просто за счет особенностей С++.

Ну, я тоже могу заявить, что твой бусто-питон модуль будет весить 3Мб, а мой - 150Кбайт.

А ты пробовал? Но опять же, почему бы не писать на С++ модули и без буст-пайтон? Сам язык позволит экономить время.

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

а какой смысл использовать C++ если задачу можно решить и на Си?

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

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

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

кресты ненужны

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

Си, как инструмент, уступает во всем С++, при этом не дает никаких преимуществ.

Давно так не смеялся.

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

Си простой, более предсказуемый, тем и годен.

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

Си, как инструмент, уступает во всем С++, при этом не дает никаких преимуществ.

Обалденный бред.

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

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

Например угрулька Holoz Castle (лодерунер по другому) жрёт больше 50% cpu и это на статичной картинке (я уж не знаю, может там просчитываются вес чёрных дыр в это время :) ), я более чем уверен что дело не в Си или в C++, а в неудачной реализации, в отсутствии знаний азов, а это не С++ а Си!

Да, и пусть лучше тут закидают, чем это поступит в продакшн, пусть даже это «Hello world»

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

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

на си - тоже нереально.

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

С++ медленный

«Давно так не смеялся». С++ столь же быстр, как и Си. Местами быстрее.

с++ очень сложный

Писать на нем проще, чем на Си.

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

Наоборот, по сравнению с Си, гораздо проще.

Си простой, более предсказуемый, тем и годен.

Это миф. В плане управления памятью и обеспечения надежности С++ гораздо лучше Си.

потому и пихают туда всякие умные указатели

Так для надежности и пихают. Сравни:

my_type_t * p = malloc(sizeof(my_type_t));
my_type_init(p);
// ...

free(p)

И

auto p = std::make_unique<my_type>(10, 20);

Что проще? Что безопаснее?

делая его еще медленней.

Это неправда. Пример выше посмотри. unique_ptr ничего лишнего не делает. А подсчет ссылок на shared_ptr не будет медленнее руками сделанного на си(или, тем более, взятого из glib). И заметь, даже подсчет ссылок в си нельзя автоматизировть, нужно будет руками рефить/дерефить ссылки. Жесть. О какой безопасности и простоте ты говоришь?

anonymous
()
Ответ на: комментарий от anonymous
my_type_t * p = malloc(sizeof(my_type_t));
my_type_init(p, 10, 20);
// ...

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

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

Я ничего не говорил об обучении. Для обучения и Си и С++ не очень подходят. Это языки для практики. И азы нужно знать, иначе ты и на С++ будешь писать говно.

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

в отсутствии знаний азов, а это не С++ а Си!

Аргументировать сможешь? Знания азов оба языка требуют. Если же ты считаешь азами сам Си как таковой, то это повод задуматься, а нет ли у тебя «синдрома утенка».

anonymous
()

Знаю людей, которые используют ANSI C и считают всё дальнейшее развитие языка C ошибочным. Если бы я писал на C, я бы использовал ряд фич из C++: templates для обобщённых структур данных и алгоритмов, исключения для обработки ошибок, namespaces для отделения модулей друг от друга, классы для инкапсуляции. Т.е. по сути C++, но не в том виде, в котором его понимают современные его апологеты. Городить обобщённые структуры и алгортмы на макросах глупо, когда есть шаблоны C++. Использовать обработку ошибок не на исключениях глупо, когда есть исключения. Использовать префиксы глупо, когда есть namespaces. Имитировать классы глупо, когда можно просто взять и использовать классы.

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

с++ очень сложный

Писать на нем проще, чем на Си.

Если бы так и было, я бы свои велосипеды на ++ писал, но они на сях. А С++ я не осилил. Слишком сложный и ненужный язык.

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

Я в пример игрульку привёл, посмотрите её если есть время. «Синдром утенка» у каждого человека присутствует, пример - не суй 2 пальца в розетку :) (опять же условие - если ты уже испытывал последствия)

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

А С++ я не осилил.

Значит, ты не можешь рассуждать о С vs C++.

А я осилил Си. А потом осилил C++. Писать на C++ быстрее, проще и багов выходит меньше. Из-за особенностей языка.

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

Очень даже могу. Я 12 лет назад на M$VC++ какую-то хрень пописывал. (да, позор мне!)

Как можно говорить, что на С++ легко писать? Там же через задницу все! А вот С — просто и понятно.

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

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

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

Очень даже могу. Я 12 лет назад на M$VC++ какую-то хрень пописывал. (да, позор мне!)

Ты, конечно, можешь. Но вот адекватность твоего мнения под вопросом. Ты же не осилил.

Как можно говорить, что на С++ легко писать?

А этого и не говорили. Говорили, что на C++ писать легче, чем на С. При условии, что ты умеешь С++, да.

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

Си ведь более низкоуровневый чем С++, почему его механизм не считать за основу?

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

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

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

Да причем тут стандарт? Ты лучше пример выше прокомментируй.

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

Говорили, что на C++ писать легче, чем на С. При условии, что ты умеешь С++, да.

и при условии что не знаешь си, да.

// FTFY

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

Java, в таком случае.

Конечно, только речь не о ней.

http://benchmarksgame.alioth.debian.org/u64q/c.html

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

Можем протестировать пример выше.

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

и при условии что не знаешь си, да.

В этом случае, ты не знаешь С++.

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

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

вот это все и превращает крестовые программы в макароны, которые понять умом невозможно. кстати, с чего ты взял что «апологеты» используют C++ как-то иначе? именно вот это все они и делают.

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

За счёт чего?

За счет встраивания шаблонов. Например, std::sort в большинстве случаев встроит твой предикат сравнения в функции сортировки. А qsort этого сделать с указателем на функцию не сможет. Иногда это копейки, иногда это существенно. Чтобы догнать С++, в Си коде придется использовать макросы, что, как ты понимаешь, плохо сказывается на качестве исходного кода.

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

т.е. ты бы _не_ писал на C :)

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

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

В этом случае, ты не знаешь С++.

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

если ты думаешь что C++ включает _весь_ язык C — ты жестоко ошибаешься, и таки не знаешь ни С ни C++ походу

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

ну попробуй улучши что-нибудь. потом расскажешь, что получилось.

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

Именно об этом я и говорил...

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

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