LINUX.ORG.RU

В чём смысл этого?

 , ,


0

3

Привет, ЛОР!

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

Вопрос: нахрена это? Чтобы что? Как это делает хоть чью-то жизнь лучше?

UPD: чтобы развеять завесу непонимания, пример того, что вылезло у меня:

clang: error: argument unused during compilation: ‘-pie’ [-Werror,-Wunused-command-line-argument]

Выдается если отдельно собирать объектники без линковки. Т.е. что-то типа clang -o file.o -c -pie -fpie null.c.

★★★★★

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

Но это не проблема исходного кода, это проблема флагов компилятора. При этом это подаётся как ошибка в случае с -Werror.

В общем-то, натолкнулся я на это, когда решил вместо gcc вставить шланг в один проект ради тестов. И для gcc там нужна была пачка аргументов, которые шлангу в данном случае не понравились.

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

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

Не-а. Компилятор – это такая животная (своенравная, да), которую надо укротить и объездить. А программист (если он действительно программист) – укротитель.

В итоге процесса все эти clang, gcc и icc должны сидеть на табуретах и прыгать по команде дрессировщика на глазах у изумлённой публики. «А иначе зачем…»

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

Да без особой разницы, можно в мейкфайле ловить текущий CC компилятор и задавать разные флаги.

Это, конечно, очень классно. Особенно когда тебе совершенно делать нечего помимо этого.

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

Не-а. Компилятор – это такая животная (своенравная, да), которую надо укротить и объездить. А программист (если он действительно программист) – укротитель.

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

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

Но это не проблема исходного кода, это проблема флагов компилятора.

Это проблема вызова с недефолтными ключами компилятора и следовательно исходного кода в совокупности с кодом системы сборки проекта. Хотите завершаться по ошибке при предупреждении — ну так вычищайте все предупреждения, благо ручки есть: (void)&unused;

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

Конкретно варнинг, который сломал мне сборку:

clang: error: argument unused during compilation: ‘-pie’ [-Werror,-Wunused-command-line-argument]

Выдается если отдельно собирать объектники без линковки. Т.е. что-то типа clang -o file.o -c -pie -fpie null.c.

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

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

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

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

Плохая идея. Лучше напиши в ридми что шланг не поддерживается, а в build-deps пакета вставь gcc.

Угадал автора даже до конца не дочитав коммент лол :DDDDD

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

Можно примерный сценарий, в котором это спасает от ошибок?

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

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

Можно примерный сценарий, в котором это спасает от ошибок?

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

Окей, к какой именно ошибке приведёт передача -L при компиляции или передача -I при компоновке? Какой неправильный результат я получу?

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

Какой неправильный результат я получу?

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

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

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

Чо? При вызове gcc -L/some/path -c -o file.o file.c я получаю вполне конкретный результат. Путь к библиотекам, ясен хер, игнорируется.

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

Это не моя логика. Крайне тупой аргумент, не делай так.

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

Как оказалось, этот вариант хуже тем, что его не принимает gcc, то есть перед использованием нужен иф по компилятору или тест на прверку поддержки флага.

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

При вызове gcc

gcc-проблемы.

Это не моя логика.

Твоя, твоя. Путь к файлу такой же аргумент командной строки, как и любой другой аргумент. Если тебе не важна валидность аргумента в одном случае, то нет никаких причин желать её в другой.

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

gcc-проблемы.

Ну или шланг делали известные тут программисты-анальники. Я склоняюсь к этому сценарию.

Твоя, твоя. Путь к файлу такой же аргумент командной строки, как и любой другой аргумент. Если тебе не важна валидность аргумента в одном случае, то нет никаких причин желать её в другой.

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

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

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

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

Так аргумент-то валиден.

Нет, не валиден. На операцию «налить кипятка в чашку» была дана опция «арабика». Это не валидная опция для кипятка, это валидная опция для операции «насыпать пару ложек кофе».

Алсо, про gcc -L/some/path - по уму должен был бы ругнуться, если пути нет или если нет компоновки. Но gcc та ещё поделка.

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

Нет, не валиден. На операцию «налить кипятка в чашку» была дана опция «арабика». Это не валидная опция для кипятка, это валидная опция для операции «насыпать пару ложек кофе».

Если ты из арабики попытается сделать чай, получится не чай. А вот gcc мне выдаёт вполне рабочий объектный файл, который я могу слинковать.

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

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

При чём тут комплиятор? Опции командой строки для пользователя, а не для программы. Компилятор в этом смысле точно такая же программа, как и любая другая, и вести себя должен точно так же. Хорошая программа должна уведомить тебя о совершённой тобой ошибке.

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

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

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

При чём тут комплиятор? Опции командой строки для пользователя, а не для программы.

Чо?

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

Но тут нет ошибки.

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

Да нет, это не ответ. Ты херню какую-то написал.

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

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

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

Ну так и зачем вы себя насилуете и пишете на Си?

Приходится.

Видно же, что вы ниосилили

К моему вящему сожалению, осилил. В отличие от тех, кто тут клоунами разбрасывается.

hateyoufeel ★★★★★
() автор топика