Посоветуйте пожалуйста курсы или книги про Си, которые демонстрируют его отличие от C++ — т.е материал по Си — не для начинающих, позволяющий освоить язык как "дополнительный", в том смысле, что его изучение будет не первым.
Здравствуйте, BadCats, Вы писали:
BC>Посоветуйте пожалуйста курсы или книги про Си, которые демонстрируют его отличие от C++ — т.е материал по Си — не для начинающих, позволяющий освоить язык как "дополнительный", в том смысле, что его изучение будет не первым.
Не в языке программирования дело, а в технологиях: Linux/сети/многопоточность/базы данных/драйвера. Их и стоит изучать. Со знанием C++ в C будет мало нового.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Здравствуйте, lpd, Вы писали:
lpd>Не в языке программирования дело, а в технологиях: Linux/сети/многопоточность/базы данных/драйвера. Их и стоит изучать. Со знанием C++ в C будет мало нового.
Не соглашусь. На сях пишут совершенно иначе, нежели на плюсах. Я бы сам с удовольствием почитал бы про типовые практики и организацию программ на си. В данный момент единственный мне известный солидный источник знаний — это исходники на гитхабе.
Здравствуйте, SomeOne_TT, Вы писали:
SO_>Не соглашусь. На сях пишут совершенно иначе, нежели на плюсах. Я бы сам с удовольствием почитал бы про типовые практики и организацию программ на си. В данный момент единственный мне известный солидный источник знаний — это исходники на гитхабе.
А что там собственно изучать? Там же всё просто как палка. Организация там одна — описываешь данные структурой (ctx) и начинаешь вокруг наворачивать методы с очень_длинными_названиями_описывающие_и_проблему_и_контекст.
Кому букв не подвезли — у того тарабарщина в названиях — dtadrrprf, amg_opt, и т.п. Естественно на комментарий букв им тоже не хватает.
У любителей "мета"-программирования всё работает на макросах из макросов из макросов из макросов...
И кругом ctx, ctx, ctx, ctx...
Здравствуйте, BadCats, Вы писали:
BC>Посоветуйте пожалуйста курсы или книги про Си, которые демонстрируют его отличие от C++ — т.е материал по Си — не для начинающих, позволяющий освоить язык как "дополнительный", в том смысле, что его изучение будет не первым.
Тоже ищу такую книгу. Везде описание только самого инструмента, но практики его применения и не особенностей его использования, ни карты расположения граблей.
Сразу после C++ писание на С даётся тяжко, чувствуешь себя как со связанными руками. Но со временем приходит понимание что писать можно на чем угодно. Особенно воодушевляют примеры которые при "правильном" написании на C++ занимают десяток страниц, а тоже самое на C десяток строк. Просто топорно не в общем виде, но работает как надо.
И да: настоящий физик может писать фортраном на любом языке.
Здравствуйте, BadCats, Вы писали:
BC>Посоветуйте пожалуйста курсы или книги про Си, которые демонстрируют его отличие от C++ — т.е материал по Си — не для начинающих, позволяющий освоить язык как "дополнительный", в том смысле, что его изучение будет не первым.
Тут достаточно просто: C = C++ — ООП — stdlib — C++ Exceptions — new/delete
От ООП только структуры, вместо стандартных контейнеров — самописные, вместо стандартных функций — платформозависимые в основном, вместо C++-исключений структурные исключения, вместо new/delete — malloc/free
Функции рекомендуется группировать в файлы по объединяющему логическому признаку, т.е. как и в классах, один класс = один заголовочный и один файл исходников. В заголовочном описываются "экспортируемые" прототипы функций и глобальные переменные из исходника в виде "extern".
Здравствуйте, Maniacal, Вы писали:
M>От ООП только структуры, вместо стандартных контейнеров — самописные, вместо стандартных функций — платформозависимые в основном, вместо C++-исключений структурные исключения, вместо new/delete — malloc/free
Полиморфизм реализуется вручную при помощи указателей на функции.
Вот стандартных контейнеров не хватает.
Макросы вместо шаблонов это жесть.
А в остальном жить можно.
_____________________
С уважением,
Stanislav V. Zudin
Здравствуйте, Maniacal, Вы писали:
M>Функции рекомендуется группировать в файлы по объединяющему логическому признаку, т.е. как и в классах, один класс = один заголовочный и один файл исходников. В заголовочном описываются "экспортируемые" прототипы функций и глобальные переменные из исходника в виде "extern".
И вместо одной монолитной программы которая умеет всё куча независимы модулей из которых строются большие уже на языках типа bash, python, perl и т.п.
Здравствуйте, kov_serg, Вы писали:
_>Сразу после C++ писание на С даётся тяжко, чувствуешь себя как со связанными руками. Но со временем приходит понимание что писать можно на чем угодно. Особенно воодушевляют примеры которые при "правильном" написании на C++ занимают десяток страниц, а тоже самое на C десяток строк. Просто топорно не в общем виде, но работает как надо.
Здравствуйте, kov_serg, Вы писали:
_>Здравствуйте, Maniacal, Вы писали:
M>>Функции рекомендуется группировать в файлы по объединяющему логическому признаку, т.е. как и в классах, один класс = один заголовочный и один файл исходников. В заголовочном описываются "экспортируемые" прототипы функций и глобальные переменные из исходника в виде "extern". _>И вместо одной монолитной программы которая умеет всё куча независимы модулей из которых строются большие уже на языках типа bash, python, perl и т.п.
Нет, куча .obj-файлов, которые потом линкуются в одну программу
Здравствуйте, sergey2b, Вы писали:
S>Здравствуйте, kov_serg, Вы писали:
_>>Сразу после C++ писание на С даётся тяжко, чувствуешь себя как со связанными руками. Но со временем приходит понимание что писать можно на чем угодно. Особенно воодушевляют примеры которые при "правильном" написании на C++ занимают десяток страниц, а тоже самое на C десяток строк. Просто топорно не в общем виде, но работает как надо.
S>а можно пример когда такая оазница в коде
SVZ>Полиморфизм реализуется вручную при помощи указателей на функции. SVZ>Вот стандартных контейнеров не хватает. SVZ>Макросы вместо шаблонов это жесть.
+1
SVZ>А в остальном жить можно.
На мой взгляд, самая ощутимая проблема C по сравнению с C++ — это невозможность использования RAII.
--
Не можешь достичь желаемого — пожелай достигнутого.
Здравствуйте, kov_serg, Вы писали:
_>Здравствуйте, Maniacal, Вы писали:
M>>Функции рекомендуется группировать в файлы по объединяющему логическому признаку, т.е. как и в классах, один класс = один заголовочный и один файл исходников. В заголовочном описываются "экспортируемые" прототипы функций и глобальные переменные из исходника в виде "extern". _>И вместо одной монолитной программы которая умеет всё куча независимы модулей из которых строются большие уже на языках типа bash, python, perl и т.п.
Как слинкуешь, так и будет. Можешь отдельные компоненты сделать, можешь статические или динамические библиотеки, можешь один исполняемый файл сделать. На Си можно всё.
Здравствуйте, SomeOne_TT, Вы писали:
SO_>Здравствуйте, lpd, Вы писали:
lpd>>Не в языке программирования дело, а в технологиях: Linux/сети/многопоточность/базы данных/драйвера. Их и стоит изучать. Со знанием C++ в C будет мало нового.
SO_>Не соглашусь. На сях пишут совершенно иначе, нежели на плюсах.
Конечно также, но иначе. Там есть пара приемов, чтобы занятые ресурсы корректно освобождать, но это выглядит как говно. Поэтому в основном пишут так же красиво, как на плюсах, забивая на всё остальное.
_>>>Сразу после C++ писание на С даётся тяжко, чувствуешь себя как со связанными руками. Но со временем приходит понимание что писать можно на чем угодно. Особенно воодушевляют примеры которые при "правильном" написании на C++ занимают десяток страниц, а тоже самое на C десяток строк. Просто топорно не в общем виде, но работает как надо.
S>>а можно пример когда такая оазница в коде
M>Из бородатого юмора:
Какой-то наверно очень бородатый юмор, года из 90го .. 95го:
#include <iostream>
#include <string>
using namespace std;
string message[] = {"Hello ", "World"};
int i;
int main() {
// your code goes herefor(i = 0; i < 2; ++i)
cout<<message[i];
return 0;
}
Здравствуйте, Stanislav V. Zudin, Вы писали:
M>>От ООП только структуры, вместо стандартных контейнеров — самописные, вместо стандартных функций — платформозависимые в основном, вместо C++-исключений структурные исключения, вместо new/delete — malloc/free
SVZ>Полиморфизм реализуется вручную при помощи указателей на функции.
Я так пробовал в начале нулевых, когда сишечку хотел в одном проекте нативно поддержать. Хорошо, хватило ума отказаться от это бесплодной затеи, и не тратить на это жизнь