C программирование в 2011 году [закрыто]

19

Много лун назад я вырезал код на C для жизни, прежде всего, поддерживая сервер POP3, который поддерживал широкий спектр ОС (Linux, * BSD, HPUX, VMS ...).

Я планирую избавиться от моих навыков C и немного узнать о языковой реализации, написав простой FORTH на C.

Но мне интересно, как (или ли?) Что-то изменилось в мире Си с 2000 года. Когда я думаю о Си, я думаю ...

  1. comp.lang.c
  2. ANSI C везде, где это возможно (но C89 как C99 не так широко поддерживается)
  3. gcc -Wall -ansi -pedantic вместо инструментов статического анализа
  4. Emacs
  5. Ctags
  6. Autoconf + make (см. Пункт 2 для VMS, HP-UX и т. Д.)

Может ли кто-нибудь, кто писал на С в течение последних одиннадцати лет, сообщить мне, что (если вообще что-нибудь ;-)) изменилось за эти годы?

(Из других новостей, черт возьми, я занимаюсь этим более десяти лет).

Дункан Бэйн
источник
Я также спросил на comp.lang.c
Дункан Бэйн
3
Ну, вместо emacs есть vi, но я туда не пойду. Я был бы удивлен, если бы кто-то все еще отправлял сообщения на comp.lang.c, и даже запутанный конкурс на C не изменился ( www0.us.ioccc.org/main.html ). Грустные времена - следующий новый конкурс для запутанных цепочек букв, в которых прописана какая-то фраза текстового сообщения, смеется.
Джей Элстон

Ответы:

10

Мне действительно трудно вспомнить время, типа «Ух ты, каково было программирование на С 10 лет назад?», Но я могу говорить о некоторых вещах, которые, как я знаю, я делаю по-другому.

  • Хотя обычно вы можете по-прежнему вызывать кого-то вроде Питера Зеебаха на comp.lang.c для помощи по поводу особенно глупой ошибки, которая, как вы подозреваете, может быть связана с языком, большинство, если не все вопросы программирования на С, получают исключительные ответы о переполнении стека.

  • Статический анализ все еще довольно болезненный. Сплинт (по крайней мере, насколько мне известно) не так хорошо справляется с C99, графики покрытия по-прежнему немного трудны для визуализации. Предупреждения GCC немного «улучшились» (в кавычках, потому что это зависит от того, кого вы спрашиваете).

  • Valgrind является святым всех контролеров ошибок памяти и обычно указывает на проблемы в вашем коде, которые не может / не может найти ни один инструмент статического анализа. Это не на 100% идеально, но я не думаю, что это может быть. Мне очень редко приходится прикасаться к GDB в эти дни, что (ничего личного) мне не подходит. Инструмент массива Valgrind также является действительно хорошим профилировщиком кучи.

  • В GCC всегда есть новые расширения, некоторые из которых тонкие , так что -Pedantic - хорошая идея, если переносимость является большой проблемой. Для начинающего / ржавого программиста иногда легко спутать расширения со «скрытыми» языковыми функциями.

  • Появился CCAN (думаю, CPAN, но для C) и начинает взлетать. Там есть много полезных жемчужин, включая адаптацию TAP, которая является отличным инструментом тестирования. Строки в C по-прежнему отстойные, но количество и качество библиотек, помогающих справиться с ними, несомненно, выросло за последние десять лет.

  • SCons и CMake становятся все более популярными для конфигурации сборки. Autoconf / Automake / Libtool все еще широко используются, но многие люди считают, что M4 слишком ограничен. Тем не менее, если вы предпочитаете использовать эту систему, макроархив Autoconf все еще жив и здоров.

  • Очевидно, сегодня доступно больше редакторов. Я еще не нашел "IDE", которая не мешала бы мне работать с C, но это, вероятно, потому что я старый, капризный, пьющий евангелист Санка для простоты.

В целом, однако, я бы не сказал, что жизнь (насколько это касается C) даже близко отличается от той, что была 10 лет назад. Но во многих отношениях это на самом деле немного проще. Трудно приписать это инструментам по опыту все же.

Тим Пост
источник
15

glib может быть «новой стандартной библиотекой». Он предлагает многое из того, что многие считают за пределами стандарта - независимую от платформы многопоточность и сетевое взаимодействие, структуры данных контейнеров и т. Д. Конечно, он не применим везде, но если вы можете его использовать, это экономит много времени.

zvrba
источник
Я думаю, что вы перепутали с библиотекой GNU C (GLibC)
Лекенштейн
7
Нет, я не растерялся.
zvrba
1
Это совершенно правильный ответ, я не уверен, почему за него проголосовали. glib был рожден из-за того, что многие были разочарованы Ульрихом Дреппером и тем, насколько он «защищен» glibc.
Тим Пост
1
Однако Glib полностью отделен от GNOME. Я не спорю об ассоциации, просто на практике вы можете полностью игнорировать GNOME и даже GTK +. В нем написано (много?) Командной строки и неинтерактивных программ.
детально
3
Мне нравится называть бой "STL of C"
Cercerilla
4
  1. StackOverflow ;)
  2. Я использую C в основном для написания прошивки для микроконтроллеров Microchip, и, поскольку их компилятор основан на GCC, я использую C99 (но я не схожу с ума от дополнительных функций, в основном это ограничивает область видимости переменных цикла и динамических массивов в стеке). Когда я пишу расширения Python, я придерживаюсь C89 на случай, если кому-то понадобится скомпилировать его с помощью MSVC. Я не знаю, что все остальные используют.
  3. Splint (работает на C89, а не C99) и статический анализатор Clang - хотя, поскольку они оба задыхаются от кода микроплотной прошивки, у меня нет большого опыта работы с ними. На самом деле, многое из LLVM довольно интересно для фаната Си.
  4. Ладно, это просто священная военная приманка: P
  5. Никогда не использовал Ctags, но я неравнодушен к Doxygen.
  6. Боже, я ненавижу Autoconf. Я ненавижу это так сильно. Мне никогда не удавалось создать шарик грязи Autoconf с нуля. Если бы у проекта уже был такой, я бы просто убил то, что уже есть. Если я пишу что-то новое, я ругаю, бреду и ищу альтернативы, хотя, черт побери, я нашел одну, с которой буду придерживаться. В прошлый раз, когда я прошел этот цикл, я остановился на SCons, которые я мог бы использовать снова.
detly
источник
1
Я бы также предложил Cppcheck для статического анализа.
Грег Хьюгилл
10
по поводу пункта 6: «На днях я увидел книгу под названием« Die Gnu Autotools », я думал:« Черт, да! » пока я не понял, что название было на немецком языке ".
Cercerilla
2

2) и 3) изменились. C99 является мейнстримом, C90 становится все более и более устаревшим. gcc -Wall -std=c99 -pedantic,

Кроме того, два наиболее заслуживающих внимания изменения, которые еще не рассмотрены в других ответах:

  • C11. ISO 9899: 2011.
  • MISRA-C: 2004.

источник
1

Язык программирования C вошел в топ-2 или 3 языка программирования в журнале д-ра Добба в своем последнем исследовании / опросе.

Что касается реализации языка, C используется для реализации нового языка, который создается в Google и называется Go (golang.org).

Я не следил за группой usenet C в последние годы. Я часто посещаю его IRC-канал Freenode. Это активно и часто посещается многими.

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

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

vpit3833
источник
0

Я думаю, что поддержка C99 лучше, чем вы подозреваете. Visual Studio не поддерживает его, но любой другой компилятор, о котором я могу подумать, поддерживает его (возможно, с некоторыми упущениями здесь и там). Если вам не нужна совместимость с VS, то я бы сказал, что стоит пойти с C99, так как писать гораздо приятнее, чем C89 IMHO.

Cercerilla
источник