LINUX.ORG.RU

ANSI C

 , ,


0

4

Привет.

Допустим человек хочет изучить C, с прицелом использовать его в линуксе и opensource, возможно контрибутить в открытые проекты, может даже писать что-то для ядра. Нужен ли c99 или даже c11? Т.е., понятно, что эти стандарты добавили некоторые фичи и сделали язык удобнее, но насколько распространено их использование? Язык нужен для практических целей, а не подрачивания на идеал, из этого прошу исходить.

Читаю Stephen Prata - C Primer Plus 6th Edition (Developer's Library) - 2014. Слегка прифигел, что книжка по си на 1000+ страниц, но пусть будет, 6 изданий, описывает в т.ч. и самую последнюю версию языка, описаны некоторые вопросы, о которых я хотел бы знать подробнее. Все правильно делаю? k&r не стал читать потому что там только ansi c.

Ответ на: комментарий от mos

Я не думаю, что религиозное почитание одной книги — разумно. Это просто описание не самой новой версии языка. Может быть другое, это ведь не библия.

doom3linux ()

С99 нужен, потому что используется везде. вот это:

foo();
int bar;
с точки зрения ANSI C - невалидный код, компилятор должен выдать ошибку. не говоря уже о for (int i.

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

for (int i я, кстати, практически нигде не видел. В системд оно есть? Там же С99 во все поля.

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

Это не религиозное поичтание, а первичное описание стандатра. Книжка маленькая, легкочитаемая и при любом раскладе обязательна к прочтению. Всё остальное уже производное.

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

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

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

Во первых, полегше в выражения, пожалуйста.

Во вторых, если «как и везде» — то зачем платить больше? Толмуд на 1000-и страниц или книжонка на 217-и страницах в которой всё «тоже самое»? Выбирай.

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

За пару дней. Язык простой, как палка.

это распространённое заблуждение. твои сведения устарели, последняя редакция стандарта занимает 700 страниц.

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

первичное описание стандатра

*Устаревшего* стандарта. Я не вижу смысла по несколько раз читать одно и то же. Если бы кроме ansi ничего не было, этого вопроса бы не существовало. Никто же не советует для изучения питона книжку гвидо 2001 года, хотя это то же типа от создателя, первичное описание. Потому что с тех пор многое изменилось.

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

Там практически ничего не поменялось. Базовое — всё тоже. Новые стандарты — это расширения языка. И их можно вообще на 2 листка умостить.

beastie ★★★★★ ()

[зевая]расходимся, это опять анонiмус[/зевая]

mos ★★☆☆☆ ()

Все правильно делаю?

k&r не стал читать

Нет.

Deleted ()

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

Питон тогда пусть учит. Для практических целей — самое то.

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

Я не думаю, что религиозное почитание одной книги — разумно

Эта книга достаточно толково написана для того, чтобы начинать учить Си именно с неё.

Может быть другое, это ведь не библия.

Библия — это текст Стандарта.

Manhunt ★★★★★ ()

k&r не стал читать потому что там только ansi c.

Фокус в том, что пишут только на двух C: тот что ansi c и тот что gcc c. Всё остальное просто не существует. Ядро, кстати, пишется на gcc c.

KblCb ★★★★★ ()

Твой человек знает Си поверхностно или нет? Указатели понимает? Если нет, то абсолютно пофиг, что читать. Нужно брать то, что легче идет, k&r здесь очень норм.

Если знает, то можно стандарт читать по непонятным местам.

Kuzy ★★★ ()

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

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

На ансисях пишут (писали) ультрапереносимые вещи, т.к. не под все мыслимые платформы компиляторы моментально допиливаются до соотвествия новому стандарту, а вот собирать с -анси умеют все (по крайней мере так было эн лет назад, сейчас хз). Если ты изучаешь и не собираешься прям щас (sic) стать стандартс-лоером или мейнтенером ансисевого пакета, то оно тебе не нужно и хватит с99/11, в которых и пишется практически весь неспецифичный/прикладной код.

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

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

просто на гугли 1ое издание k&r на английском и полистай.

очевидно ца k&r меньше чем ца праты(особенно найди его первое издание где он не один а с уитом вроде(астроном любитель))

очевидно что второе(ну и то что ты ща указал) - это мануал для людей могущих не уметь в квадратные уравнения.

когда k&r не требует этого тоже но по странному (а проще по природе вещей) случаю - большинство пользующихся k&r могут в квадратные уравнения.

:)

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

какой смысл вообще читать этот стандарт

чтобы знать весь язык.

тем более не за бесплатно

стандарты C всегда были доступны бесплатно, в отличие от POSIX, например.

Lincor ()

Тебе C++ нужен или C? Между ними такая «маленькая» разница.

Для C есть книжка.

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

Вопрос был про «выучить язык». Под этим никто не понимает знания наизусть всей стандартной либы.

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

Слушай, сори, что не особо в тему топика. Но вот после пролистывания у тебя OpenBSD мануала, задумался взять и себе тематических книг(ибо до сих пор лишь 1 мелкомягких(тцп\айпи) и 1 С++ трупа страуса, нажил), Где тут местных хороших книг на английском набрать? Желательно дешего =)

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

*Устаревшего* стандарта. Я не вижу смысла по несколько раз читать одно и то же.

На циферки дрочишь? У тебя Рачлинукс небось? Учи тогда С++14, хуле. А то он еще не реализован везде, даже. Заодно компилятор реализуешь, как упражнение :)

LongLiveUbuntu ★★★★★ ()

Слегка прифигел, что книжка по си на 1000+ страниц

Это вполне нормально.

k&r не стал читать потому что там только ansi c.

И это тоже.

sT331h0rs3 ★★★★★ ()

k&r не стал читать потому что там только ansi c.

Даже не знаю, как тебя обозвать: цензурных слов подобрать не могу...

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

Везде, где есть // — c99, потому что в ansi таких комментов нет. Мне кажется ты много чего используешь из 99, но привык к этому и почему-то считаешь ansi.

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

Раздобыть дешёвых книг по компьютерной тематике — это сложно. А так — amazon.

beastie ★★★★★ ()

Изменения в C99 и С11 не настолько существенны, можно сначала изучить ANSI C, потом прочитать первые несколько страниц описания стандартов C99б C11 и узнать, что там добавили нового

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

А вот и нет! gcc нормально такие комментарии понимает без указания -std=gnu99. А вот если ты напишешь for(int i = ..., то без этого флага уже не скомпиляет.

Разве такие комментарии не с 89-го года пошли?

Еще у меня нестандартные для ANSI вещи — функции внутри функций (правда, почему-то последний gcc стал ругаться на такое) и объявление переменных в любом месте, а не только в начале.

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

я на работе копмилю ядра под разные экзотические железяки и везде в опциях стоит -ansi. так что если уж ТС собрался лезть в ядро, то первой и самой главной задачей будет изучить самый базовый и основной вариант С, который поддерживают компиляторы под все архитектуры.
K&R даёт понимание самых основ языка С. без углубления в несущественные вариации разных компиляторов.

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

Никто другой не додумался в своих книгах об этом написать? Открываем «книги по Cи» Прата, Шилдта, Кочана, Подбельского, Дейтелов и видим там примерно такие же главы и разделы в которых авторы пишут о том, что «указатели и массивы тесно связаны» после чего следуют пояснения с прмиерами.

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

Разве такие комментарии не с 89-го года пошли?

Это стандарт С99.

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

нестандартные для ANSI вещи — ... объявление переменных в любом месте, а не только в начале.

Странно у K&R в «ANSI C» упоминается только что

В языке «C» все переменные должны быть описаны до их использования, обычно это делается в начале функции до первого выполняемого оператора.

То есть требования объявлять их только в начале я не нашёл.

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

Не факт, что из этого следует, что это нестандартная для ANCI вещь. Нужно поискать подобное требование.

grem ★★★★★ ()

K&R (пока что) не читал. Вообще ничего по С не читал. Проблем с пониманием и написанием на самом языке не испытываю. А вот posix-либы (и вообще многие сишные либы) - вот это адский ад. Всюду флаги и макросы с закриптованными названиями. Миллиард функций в одной области видимости (и каждый подключенный файл добавляет еще миллиард). Просто жесть!

makoven ★★★★★ ()
Последнее исправление: makoven (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.