LINUX.ORG.RU

typedef enum growthResult {
    GROWTH_RESULT_SUCCESS = 1,
    GROWTH_RESULT_FAILURE_GROW_NOT_NECESSARY,
    GROWTH_RESULT_FAILURE_ALLOCATION_FAILED
} growthResult;

growthResult growthOptional(void **_grow, size_t currentLen, size_t newLen) {

facepalm.jpg

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

потенциально автор статейки может спасти твои 5 секунд

Я однажды битый час искал что происходит, когда попытался собрать проект на freebsd. Там у libc гарды другие, ага, напоролся.

anonymous
()

Что там написано? Надо использовать блоки и новомодные цомпиляторные расширения?

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

Это его личное мнение. char я б не использовал, конечно, кроме как, может в массиве. А int как счетчик цикла — да сколько угодно. Да и на unsigned наезд необоснованный.

anonymous
()
 struct thing {
        uint64_t index;
        uint32_t counter;
    };

    struct thing localThing = {0};

Если имеется в виду toplevel, можно же просто struct thing localThing; , не?

Не знаю, как по стандарту, но по факту localThing попадёт в .bss же, а .bss инициализируется нулями.

anonymous
()

You should always use calloc. There is no performance penalty for getting zero'd memory.

Слишком категорично.

mix_mix ★★★★★
()

Never use malloc (use calloc instead)

Ладно, если это массив структур, где есть указатели. Тогда их можно проверить на NULL. А если это массив чисел для мат. рассчётов? Какая тогда разница, malloc или calloc? Если забудешь инициализировать число, то что 0, что другое значение даст ошибку.

calloc() can check for integer overflow because it multiplies its arguments together to obtain your final allocation size.

Надо соображать, сколько памяти хочешь.

А вот про aligned_alloc() и прочее автор ничего не сказал. Это в 21 веке.

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

Ладно, если это массив структур, где есть указатели. Тогда их можно проверить на NULL. А если это массив чисел для мат. рассчётов?

В общем-то и NULL не обязан представляться через 0. Совет скорее дебажный, чем релизный, т.к. проще будет ловить дереференсы.

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

Тому що там есть исключения, а goto в сишке в основном используется для эмуляции try-catch-finally.

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

совпали инклуд-гарды

через 5 секунд размышлений понял, в чем дело

5 секунд - это _очень_ хороший результат для такой неочевидной бяки, особенно если не сталкивался с ней раньше. Держи 5.

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

goto

В жабе не только выбросили, но и слово зарезервировали. В пистоне выбросили, в раби выбросили, в расте выбросили.

ну и дебилы

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

в расте выбросили.

Вот это зря, для unsafe можно было и оставить.

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

ну и дебилы

Не переживай.

В жабе например есть костыльные заменители goto.

Но всё равно конструкции с goto я считаю полезными для разработки высокопроизводительных расчётных алгоритмов в основном.

А самый подходящий для этого язык - это Си, а там goto есть ;)

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

Serg_HIS
()

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

КО говорит, что это не сильно отличается со времен Unix epoch (1970-01-01T00:00:00Z)

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

Мастурбируешь на перфокарты?

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

handbrake ★★★
()

Интересная статейка: https://matt.sh/howto-c

Интересная. Но я бы не стал воспринимать на веру.

Хотя, для user-space может и актуально, но как тот, кто пишет модули ядра — я не оценил.

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

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

while/until - это афигеть какие абстракции.
Кстати об абстракциях.
1. x86_64, секьюрбут, win10, хром, яваскрипт, вывод изображения по шифрованному видеоканалу. Все только ради того чтобы показывать часы в течение месяца. Надо ли говорить что оно через неделю глюкнуло, а на вторую врало на 25 секунд.
2. Два ембедщика спорят как лучше, один говорит я заворачиваю этот код в дефайны, а другой говорит «надо функцией». Оба считают, что оптимизируют команды проца stm, потому-что объем кода на сях в их представлении будет меньше. ИЧСХ оба не предстваляют, в какие инструкции будет развернут их код.

Я последние годы вижу кругом абстракции и нихера не вижу чтобы вещи просто работали как положено.

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

Я последние годы вижу кругом абстракции и нихера не вижу чтобы вещи просто работали как положено.

Та же фигня.

Serg_HIS
()
Ответ на: комментарий от i-rinat

Как насчёт -Werror?

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

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

Я последние годы вижу кругом абстракции и нихера не вижу чтобы вещи просто работали как положено.

Просто надо вылезти из толчка.

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

почему то что дрступно в C99 пытаются выдать под соусом «модерн»?

C99

Потому что многие не знают, что он вообще есть.

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

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

peregrine ★★★★★
()

А статейку некто упоротый писал. Он бы на ЛОРе мог anonimous-а заменить.

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

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

А как же код типа

init1();
if (error1()) goto cleanup1;
init2();
if (error2()) goto cleanup2;
init3();
if (error3()) goto cleanup3;
...
do_something();
...
cleanup3:
free3();
cleanup2:
free2();
cleanup1:
free1();
....
?

monk ★★★★★
()
Ответ на: комментарий от SysVinit-hater

Bullshit.

Конечно, если нужен именно тип определенной длины — надо использовать stdint, а не угадывать, какой длины сегодня long на данной платформе. Но если на длину (почти) пофиг — int для этого и служит.

А вот это вообще бред:

float — standard 32-bit floating point

double - standard 64-bit floating point

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

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

Не считаю такую концепцию правильной. Тем более в основном пишу на языках со сборщиком мусора или хотя бы с ООП, где надо меньше подобного. Для исключений throw try catch проще и нагляднее, конечно когда ЯП поддерживает подобную конструкцию.

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

Просто надо вылезти из толчка.

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

handbrake ★★★
()

Сайт называется «РУССКАЯ информация об ОС Linux». А ты сюда иносранщину без перевода притащил. Фу таким быть.

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

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

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

Да не. На счет нужности goto споров быть не может, а вот на счет точек выхода можно и побазарить. Это мнение какого-то винрарного гурупрограммиста, что return должен быть один, но я с ним не очень-то и согласен, ибо оверхед ненужный создает и нечитабельность.

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

float — standard 32-bit floating point

double - standard 64-bit floating point

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

Можно названия платформ, где float и double одинакового размера?

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

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

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

Ну то есть микроконтроллеры (и, наверно, найдутся такие DSP). Можно спокойно пренебречь.

Про ARM7 - очень вряд ли.

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

Можно названия платформ, где float и double одинакового размера?

Техасовские MSP430. float, double и long double == 32 бита

Ну то есть микроконтроллеры (и, наверно, найдутся такие DSP). Можно спокойно пренебречь.

Ну да, ну да. «Весь мир — это Винтел».

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

Ну то есть микроконтроллеры (и, наверно, найдутся такие DSP). Можно спокойно пренебречь.

Ну да, ну да.

Да. Если ты и в самом деле пишешь для DSP, ты должен знать, что за границы DSP эти программы не выходят. То же и для микроконтроллеров.

«Весь мир — это Винтел»

Не знаю архитектуры «Винтел», но мир - это x86, ARM, PowerPC, MIPS. А микроконтроллеры и DSP - это другой мир, на который в основном пофиг

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

Слово выбросили, а фича есть. Я даже где-то в коде какого-то парсера какого-то протокола видел такую херню вместо автоматов.

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

Ну да, расскажи мне, чо куда выходит. Если есть какая-нибудь библиотека, которую можно собрать из одних и тех же исходников как для МК, так и для ПК (какой-нибудь протокол связи там, описание формата данных или ещё чего-нибудь) — городить две версии для «разных миров»? Щаз.

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

Ну да, расскажи мне, чо куда выходит.

А я как раз и говорю, что не выходит.

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

И как называется эта библиотека? Совсем хорошо, если в ней будет использоваться хотя бы float.

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

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

Я про читабельность кода ничего не писал.

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

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

Что-то мне подсказывает, что какие-нибудь реализации AMR-кодека, например - референсные из рекомендаций ITU, могут использоваться и там и там.

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

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

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