LINUX.ORG.RU

Какую версию C и компилятора выбрать?

 , ,


0

1

Добрый день. Я полный ноль в системном программировании. Хочу заняться разработкой на C, но встретил очень разноречивые советы по поводу выбора версии языка и компилятора. Насчёт версии C, стабильной считается 17-ая версия, но многие порекомендовали писать на 11-ой. Не очень понял этот момент. И про компилятор, GCC и Clang, хотя gcc и считается стандартом де-факто, рекомендовали посмотреть в сторону clang. Хотя, вроде, каких-то значительных преимуществ перед первым у него нету. Может кто-то подскажет касательно этого вопроса?

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

iron ★★★★★
()

Насчёт версии C, стабильной считается 17-ая версия, но многие порекомендовали писать на 11-ой.

Вас кто-то намеренно вводит в заблуждение. Если хотите заниматься системным программированием, то не поддавайтесь искушению использовать то, что появилось в языке после С99. Иначе рискуете нарваться на компилятор, который не поддерживает С11/17, но иного выбора для специфической архитектуры может и не быть.

dsl
()
  • apt get install gcc
  • gcc -std=c99 -c main.c -o my_hello_world
  • ./my_hello_world

\thread =)))))


Добрый день.

Дравсти ::)

Хочу заняться разработкой на C

👍

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

Тебя это сейчас сильно волновать вообще не должно.

Я полный ноль в системном программировании.

У всех так было

Насчёт версии C, стабильной считается 17-ая версия, но многие порекомендовали писать на 11-ой.

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

Не очень понял этот момент.

И не надо пока понимать. Вот почитай тред новичка K&R кто как проходил? качай K&R третье издание (исправленное) оно на русском и учи язык всё остальное потом.

И про компилятор, GCC и Clang

Если ты ориентируешься на стандарт то без разницы, но так как тебе сейчас стандарт без разницы то без разницы.

Ты начал зарываться в те детали которые тебе ничего не дадут кроме внутреннего дискомфорта, «а правильно ли я выбрал?» в тот момент когда тебе вообще ничего выбрать не надо можешь брать первое же попавшееся и просто начинать учить язык и работать с компилятором (любым) Даже если тебе сейчас кто-то разврнуто ответит по поводу почему стандарт А, а не Б и компилятор В, а не Г эти знания для тебя будут значить ровно ноль так как ты не будешь понимать собственно почему именно это, а не то.

Не морочь себе голову. Выбери просто на уровне «мне нраица!» компилятор, выбери книжку по которой будешь учить и учи хоть там С89/С99/С11. И вообще никто не мешает тебе использовать и gcc/tcc/clang иные твой код будет и должен работать после них одинаково.

P.S. C17 это из другой оперы

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от filosofia

Возможно, насчёт компилятора вопрос действительно несвоевременный. Но насчёт версии C, не хотелось бы споткнуться о момент, который был с Java 8. Ибо он стандарт де-факто в российском энтерпрайзе, мои знания Java 17 никак не помогли мне при работе с 8-кой. Очень много синтаксического сахара, всяких мелких фич которые пришлось забывать. И не хотелось бы вот так взять, и с C узнать, что, например, 17-ая, никому не интересна, а все используют условную 11-ую, и между ними может быть какая-то критическая разница

Karamelka
() автор топика

Я полный ноль в системном программировании

Я тоже, но кое-что знаю.

Я бы брал актуальную стабильную версию твоего дистрибутива. Вроде бы, с обратной совместимостью в C все хорошо, и ты сможешь для свежего компиллятора писать код хоть по книжечке 80-х годов, хоть по Столярову, хоть по какому-нибудь свежайшему изданию O’Reilly.

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

Опасность, что ты выучишь какой-то новодел, а потом он где-то не соберется, как мне кажется, преувеличена. Обычно в книжках оговаривается, что вот эта вота – нововведение.

И про компилятор, GCC и Clang, хотя gcc и считается стандартом де-факто, рекомендовали посмотреть в сторону clang.

Ну так собирай gcc и временами посматривай в сторону clang. Потом разберешься и примешь решение.

Vidrele ★★
()

IDE возьми человечью..CodeLite или CodeBlocks - самое оно.

Zeal (https://zealdocs.org/) чтобы читать доки ещё must-have.

PS/ которые компиляторы не принципиально, gcc хороший выбор просто по причине стабильности и известности (вопросов меньше и ответы на них проще найти)

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

Домашнее задание =)


Подсказка. Си плюс плюс это другой язык есть с2x/c18 с17 миносим 18 но в реальном мире их нет и тебе попутали с с17 из плюсов советчики навреное

Ты можешь выбрать c17 и c18 в качестве параметра для компилятора в опции -std=версия, но это тебе ничего не даст. Как и с2x. Даже С11 реализован через пень колоду. Не надо гнаться за новейшими штуками. Где угодно, но не в Си. Фундаменально язык один для любой версии, разница там лишь в мелочах, таких что чаще они просто ненужны, а их использование лишь порождает проблемы. Пиши на С99 и в 99% случаев любой компилятор на любой полатформе от ПК до серверов экзотической архитерстуры с древними версиями компиляторов,SDK мобил и микроконтроллеров будут твой код собирать.

А будешь писать на С11 сходу с атомиками, генериками и прочими сходу замучаешься свой код портировать =)

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

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

По поводу именно С17 я оочень часто видел как под этим невзначай обсуждали плюсы, один говорит про си второй про плюсы и в голове у первого каша… У меня флешбекнуло и я опять так подумал.

Ты сейчас узнаешь очень много лишней информации которая тебя просто путает. Выучи базовый Си (он одинаков для любой версии), а уже потом будешь (и то если надо будет) вникать в прошлые версии сишки с89 и новые с11 и то сомневаюсь. С89 тебе нужен будет только если у тебя древняя система или сверхпереносимый код, С11 если из коробки нужна мультипоточка, атомики и генерики и всё по сути. И то предпоследне реализовано на деле поверх pthread который можно и в с89 и с99 использовать. Ну разве что генериков нету. Но они нафиг не нужны, а в обучении вообще зло.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 7)
Ответ на: комментарий от Karamelka

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

filosofia
()

Немного удивлён комментариями с призывом использовать C99. Понятно, что во многом системного программирование на C это ядро Linux, это ограничивает в использовании более новых стандартов языка. Но вот stdatomic.h это важная часть системного программирования, и это C11.

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

Ах да! Я не программист! =)))) Стоит это учесть. Это я к тому что относись к советчиками со скепсисом. Всё что тебе надо есть в книжке по которой ты будешь учиться. А дальше уже сам.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от anarquista

Немного удивлён комментариями с призывом использовать C99.

Тоже. Разве что MSVC так до сих пор полностью C11 не осилили (да и C99 тоже не до конца). А ядро с весны прошлого года должно по-умолчанию собираться как C11 -std=gnu11.

gag ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Ты начал зарываться в те детали которые тебе ничего не дадут кроме внутреннего дискомфорта

Когда сердце вещует, что для успеха надо уже начинать хренячить, а хренячить не хочется, внимание автоматически переключается на ультраважные вопросы типа выбора цвета пуговиц %)

Знаю на личном опыте.

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

IDE возьми человечью..CodeLite или CodeBlocks - самое оно.

На мой взгляд новичкам в начале освоения IDE вообще противопоказан. Только редактор и консоль. Иначе вместо написания кода будут осваивать настройки IDE и в конечном итоге нетвердо понимая, чем оно под капотом занимается.

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

На мой взгляд новичкам в начале освоения IDE вообще противопоказан. Только редактор и консоль. Иначе вместо написания кода будут осваивать настройки IDE и в конечном итоге нетвердо понимая, чем оно под капотом занимается

ещё VIM или EMACS :-) тогда точно потеряются..

MKuznetsov ★★★★★
()

C99 хватит всем. Не ломай голову над стандартом, тебе надо освоить сами принципы программирования: алгоритмы и виды типов данных, оценку сложности алгоритмов, методы проектирования алгоритмов и так далее.

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

LongLiveUbuntu ★★★★★
()

Выберите любой.
Если он вас будет устраивать, то рад за вас.
Если нет, то вернётесь к вопросу выбора компилятора (уже с некоторым пониманием этого вопроса).

Советовал бы также разобраться с понятиями «алгоритмы и объекты».
Компилятор является лишь средством их реализации.

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

Новичку нужно изучать ВСЁ и с самого начала: «сено-солома», ибо версии зачастую обратно совместимы, но стоит читать свежую литературу, где все изменения учтены. Ибо уже потом со знанием только C99 - ценность и востребованность знаний падает. И компилировать обязательно с новым стандартом (C17) и всеми предупреждениям (-Wall -Wextra), про разницу между компиляторами потом изучишь.

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

Вас кто-то намеренно вводит в заблуждение. Если хотите заниматься системным программированием, то не поддавайтесь искушению использовать то, что появилось в языке после С99. Иначе рискуете нарваться на компилятор, который не поддерживает С11/17, но иного выбора для специфической архитектуры может и не быть.

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

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

А жопу лучше лопухом подтирать,

Бывает, что и выбора нет.
Не раз бывало ... (вспомнил детство)

Шутка

Ныне прикован к компьютеру и «спасаю человечество».

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

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

Шутка

Согласен, начинающему именно так и нужно поступать.

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

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

Некорректное сравнение. В общем случае любая жопа приемлет туалетную бумагу, но не любая - лопух. С компиляторами в данном случае ровно наоборот.

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

Да-да, а потом тебе приходит начальство и говорит «а с сегодняшнего дня мы продаем софт для установки на винду. У тебя 24 часа проверить, что всё там работает». А у тебя всё скомпилировано на C11, mingw половину заголовков не понимает, MSVC не особо умеет в С99 и ты сидишь и медитируешь как переписать все атомики на мьютексы чтобы не просрать скорость обработки очереди в 10 раз.

PPP328 ★★★★★
()

Используй на выбор

gcc --std=c89
gcc --std=gnu89
gcc --std=c99
gcc --std=gnu99

рекомендовали посмотреть в сторону clang

Фу, брось гадость.

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

Верно. clang это корпорастическая попытка отжать лидерство у свободного gcc. Кроме того, его авторы нацелены на соответствие всякой графомании, издаваемой iso-комитетом, больше, чем на удобство для программистов.

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

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

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

Я не писал, что clang непосредственно несвободный. Я писал, что с его помощью отжимают популярность у gcc. А в gcc корпорациям, продвигающим clang, не нравится в первую очередь его лицензия (GPLv3 у версий начиная с 4.3). То есть clang это в первую очередь инструмент борьбы с GPL, возможность делать non-GPL системы с компилятором в составе.

firkax ★★★★★
()
24 марта 2024 г.