LINUX.ORG.RU

Да, влезу не в свой огород. Как быть если кому-то захочется (вернее, придется) компилить мой код древним компилятором, скажем, gcc 2.95. Ему придется все переписывать?

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

Чукча?

This page assumes you are on a modern platform conforming to modern standards and you have no excessive legacy compatability requirements. We shouldn't be globally tied to ancient standards just because some companies refuse to upgrade 20 year old systems.

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

Нет, конечно. Просто скачает новый и все.

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

Я-то может и на modern platform, а вот те, кто будут пользоваться... ИМХО, автору следует включить разбор этого вопроса в статью.

gh0stwizard ★★★★★
()

Не советую брать статью на веру. Если в начале всё ещё более-менее резонно и познавательно, то потом начинается навешивание лапши в примерах.

Не совсем вызывающе неверная информация, но много субъективщины, недоговорённости и ограниченности.

Bfgeshka ★★★★★
()

Здравые мысли, разве что объявление переменных - дело стиля, и «Never use malloc» осталось без обоснования.

А вообще, мертвому припарки. Всем C++14.

anonymous
()

The first rule of C is don't write C if you can avoid it.

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

unt1tled ★★★★
()

The first rule of C is don't write C if you can avoid it.

на этом читать закончил.

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

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

slackwarrior ★★★★★
()

The first rule of C is don't write C if you can avoid it

лол

без примеров статья - чистое балабольство

reprimand ★★★★★
()

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

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

Как действующий байтодаун с большим стажем, могу сказать - ничего замечательного в статье нет. Совет использовать несколько точек возврата - вообще говно.

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

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

Впрочем, ты вроде и не триггернулся на фразу «The first rule of C is don't write C if you can avoid it».

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

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

anonymous
()

Кто-нибудь, запилите перевод. Я ничо не понимаю что он там рассказывает. Такие высокие абстракции не для меня.

Xintrea ★★★★★
()

Мое мнение, что рекомендацию использовать «#pragma once» надо пропускать через мозг, прежде чем использовать. Ещё несколько лет назад были с этим проблемы. Не факт, что будет работать всюду.

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

А в чем преимущество #pragma once кроме того, что оно будет работать не везде? Зачем его вообще использовать, суть-то одна.

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

Да ни в чём, по сей день пишем традиционно.

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

Ну, не скажи. Хорошая статья в целом.

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

#pragma once <...> Зачем его вообще использовать

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

i-rinat ★★★★★
()
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);
KennyMinigun ★★★★★
()
Ответ на: комментарий от i-rinat

Кстати, #pragma once еще позволяет компилятору (а точнее препроцессору) делать compile-time оптимизацию в стиле:
foo.h

#pragma once
bar.h
#include <foo.h>
bar.c
#include <bar.h>
#include <foo.h> // не пытаться читать файл foo.h еще раз:
                 // юзер сказал #pragma once
С #define-guards такая оптимизация требует определённой евристики (а то и вообще error-prone).

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

Можно использовать обе команды, #pragma once и include guards, для написания переносимого кода, что также может принести выгоду от применения #pragma once при оптимизации (если компилятор её поддерживает)

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

I-Love-Microsoft ★★★★★
()
Do THIS instead:
    uintmax_t arrayLength = strtoumax(argv[1], NULL, 10);
    void *array[arrayLength];

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

I-Love-Microsoft ★★★★★
()

с удовольствием [писать на с в 2016]

qulinxao ★★☆
()
Ответ на: комментарий от I-Love-Microsoft

оба подхода применять сразу

Странный совет. Если pragma не поддерживается, компилятор может на неё ругаться, даже ошибкой. А если использовать одинаковые идентификаторы для include guards в разных файлах, pragma once не спасёт — файлы-то разные. В общем, предлагают взять худшее из обоих вариантов.

i-rinat ★★★★★
()

Имхо неплохой обзорный курс для любителей c89, ничего особенного.

wakuwaku ★★★★
()

Царя в вопросах си? Не смешно.

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

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

Схрена это? Компиляторы обязаны игнорировать незнакомые #pragma.

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

ты из тех славных воинов, которые считают, что из функции должен быть ровно один return?

Это ещё фигня.

Я знаю полчища славных воинов, которые говорят что «goto» не нужен.

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

Но славные воины почему-то никогда не задумывались над этим...

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

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

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

Для GCC вот тут описано

Как я и говорил: жесткая евристика (хотя все требования довольно таки логичные)

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

У меня однажды совпали инклуд-гарды, т.к. я зацепил полубиблиотечный модуль из соседнего проекта. Я подумал, что так не бывает — объявление есть, а варнинг все равно генерится, и через 5 секунд размышлений понял, в чем дело.

То есть потенциально автор статейки может спасти твои 5 секунд, потратив всего несколько минут на чтение этой галиматьи.

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

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