Програмування на C на 2011 рік [закрито]


19

Багато місяців тому я вирізав код С на життя, насамперед підтримуючи POP3-сервер, який підтримував широкий спектр ОС (Linux, * BSD, HPUX, VMS ...).

Я планую відшліфувати іржу на моїх навичках C і дізнатись трохи про реалізацію мови, кодуючи простий FORTH у C.

Але мені цікаво, як (чи чи?) Змінилися речі у світі 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 тощо)

Чи може хто-небудь, хто пише в C протягом останніх одинадцяти років, дав мені знати, що (якщо що-небудь ;-)) змінилося за ці роки?

(Іншими новинами, святе дерьмо, я це роблю вже більше десяти років).


Я також запитав на comp.lang.c: groups.google.com/group/comp.lang.c/browse_thread/thread/…
Duncan Bayne,

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

Відповіді:


10

Мені дуже важко думати назад у часі на кшталт "Ого, як було програмування на С, як 10 років тому?", Але я можу говорити про деякі речі, які я знаю, що роблю по-іншому.

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

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

  • Valgrind - святий усіх перевіряючих помилок пам’яті і зазвичай вказує на проблеми у вашому коді, які жоден інструмент статичного аналізу не міг / не міг знайти. Це не на 100% ідеально, але я не думаю, що це могло бути. Мені дуже рідко доводиться торкатися GDB, що (нічого особистого) зі мною просто чудово. Масивний інструмент Valgrind - це дуже гарний профільний куточок.

  • У GCC завжди є нові розширення, деякі з них є тонкими , тому -педагогика - це гарна ідея, якщо мобільність викликає велике занепокоєння. Для початківця / іржавого програміста іноді легко переплутати розширення з "прихованими" мовами.

  • CCAN з'явився (думаю, CPAN, але для C) і починає зніматися. Там багато корисних дорогоцінних каменів, включаючи адаптацію TAP, яка є приголомшливим інструментом тестування. Струни на мові C все ще засихають, але кількість та якість бібліотек, які допомагають їм працювати, напевно зросли за останні десять років.

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

  • На сьогодні очевидно більше редакторів. Мені ще потрібно знайти "IDE", який не заважав мені працювати з C, але це, мабуть, тому, що я старий, невдалий, євангеліст Саньки для простоти.

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


15

glib може бути "новою стандартною бібліотекою". Він пропонує багато того, що багато хто відчуває, що залишається поза стандартом - незалежна від платформи нарізка та мережа, структури даних про контейнери тощо. Звичайно, це застосовується не скрізь, але якщо ви можете ним користуватися, це економить багато часу.


Думаю, ви переплуталися з бібліотекою GNU C (GLibC)
Лекенштейн,

7
Ні, я не плутаюся.
zvrba

1
Це цілком коректна відповідь, я не впевнений, чому її проголосували. гліб народився з багатьох, хто був розчарований Ульріхом Дреппером і тим, як «охороняється» глібк.
Тім Пост

1
Однак Glib повністю від'єднаний від GNOME. Я не сперечаюся про асоціацію, просто те, що в практичному плані ви можете повністю проігнорувати GNOME і навіть GTK +. У ньому написано (безліч?) Командного рядка та неінтерактивні програми.
детте

3
Мені подобається називати glib "The STL of C"
Cercerilla

4
  1. StackOverflow ;)
  2. Я використовую C в основному для написання мікропрограмного забезпечення мікроконтролерів Microchip, і оскільки їх компілятор заснований на GCC, я використовую C99 (але я не збиваюся з додатковими функціями, головним чином, це обмежити область змінних циклів і динамічних масивів на стеку). Коли я пишу розширення Python, я дотримуюся C89 на випадок, якщо комусь потрібно скомпілювати його з MSVC. Я не знаю, чим користуються всі інші.
  3. Splint (працює на C89, а не на C99) і статичний аналізатор Кланг, хоча, оскільки вони обоє задихаються від макро-важкого коду мікропрограми, я не маю з ними величезного досвіду. Насправді, багато речей з LLVM є досить цікавим для вихованого C.
  4. Гаразд, це просто свята принада війни: P
  5. Ніколи не використовував Ctags, але я частково ставлюсь до Doxygen.
  6. Боже, я ненавиджу Autoconf. Я так його ненавиджу. Мені ніколи і ніколи не вдавалося виготовити балон з грязькою Autoconf з нуля. Якби проект вже був, я б просто закінчився бастарізуванням того, що вже є. Якщо я пишу щось нове, я гніваюсь і мандрую, шукаю альтернативи, хоча мені проклято, якщо я знайшов одну, до якої я б дотримувався. Востаннє, коли я пройшов цей цикл, я влаштувався на SCons, який я можу використати знову.

1
Я б також запропонував Cppcheck для статичного аналізу.
Грег Х'югілл

10
щодо пункту №6: "Днями я побачив книгу під назвою" Die Gnu Autotools ", я думав" Чорт так! " поки я не зрозумів, що назва була німецькою мовою ".
Cercerilla

2

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

Крім того, дві найбільш важливі зміни, про які вже не було сказано в інших відповідях, є:

  • С11. ISO 9899: 2011.
  • MISRA-C: 2004.

1

Мова програмування C перетворила його на топ-2 або 3 мови програмування в журналі доктора Добба в його останньому дослідженні / опитуванні.

Що стосується реалізації мови, C використовується для реалізації нової мови, яка будується в Google, під назвою Go (golang.org).

Я не слідкував за групами Usenet C протягом останніх років. Я часто відвідую IRC-канал Freenode. Він активний і відвідується багатьма.

Нові програми пишуться на мові С, але вони не отримують такої розголоси, як вони мали б, якби цього року було, скажімо, 1999 рік.

Це те, що приходить до душі. Можливо, ще багато, але я сподіваюся, що ви залишилися на зв’язку зі своїм капелюхом програміста, хоча ви, можливо, не відвідували модель C капелюха :)


0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.