LINUX.ORG.RU

программирование на С++ под Линукс


0

0

Насколько я знаю, в UNIX-подобных операционных системах применяется в основном язык С.

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

вот.. есть ли смысл учить С++ и переходить на объектно-ориентированное программирование?

P.S. и еще вопрос.. очень интересно. компилятор GCC использует расширения GCC когда писать С-код. G++ тоже использует какие-то расширения? или стандарт C++ одинаковый для всех компиляторов?

anonymous

>компилятор GCC использует расширения GCC когда писать С-код

Ничего не понял

ttnl ★★★★★
()

> вот.. есть ли смысл учить С++ и переходить на объектно-ориентированное программирование?

есть смысл не учить С++ и переходить на более правильное ООП
почитать про ABI, FBC (хрупкость базового класса в С++) и понять почему не С++
+почитать про Embedded C++, IOKit в MacOS, C++ ABI и его хрупкость в BeOS

> компилятор GCC использует расширения GCC когда писать С-код

тогда код становится непортируемым под другой компилятор

>G++ тоже использует какие-то расширения?

более-менее нет

>или стандарт C++ одинаковый для всех компиляторов?

стандарт более-менее одинаковый, поддержка стандарта разная. Плюс разные костыли в разных компиляторах вроде SEH, реализации через пайпы/объём макс. памяти на компиляцию, RTTI, исключения

anonymous
()

>я интересуюсь в основном системным программированием, изучаю устройство ядра Linux и т.д..

Вот и изучай, как закончишь - подумаешь над этим вопросом еще раз, уже имея в кармане значительный опыт. )

.... я сначала много чего еще написал, но потер, когда мой взгляд пал на интересную мысль. Для тебя плюсы - это ООП?

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

>есть смысл не учить С++ и переходить на более правильное ООП почитать про ABI, FBC (хрупкость базового класса в С++) и понять почему не С++ +почитать про Embedded C++, IOKit в MacOS, C++ ABI и его хрупкость в BeOS

anonymous (*) (02.08.2008 1:12:44), хватит читать страшилки. ;)

anonymous
()

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

>вот.. есть ли смысл учить С++ и переходить на объектно-ориентированное программирование?

Linux написан на С с небольшим количеством асма, на С++ его переписывать не собираются. Модули тоже пишут на С. ООП в ядре реализовано на уровне структурки + функции, большего там и не надо. Так что С++ изучать не стоит и на ООП тоже переходить не имеет смысла никакого.

Я даже больше скажу - можно и прикладные программы писать на С. Главное грамотно отобразить спецификации программы на типы данных и возможности языка С и тогда все получится. Если грамотно уловить суть программы и отладить как следует ее костяк, можно будет безболезненно расширять программу, добавляя новые фичи, баги будут редкими явлениями, а если даже и появятся (баги всегда есть, вне зависимости от ЯП), исправлять их можно будет моментально. Можно будет получать удовольствие от программирования.

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

> Для тебя плюсы - это ООП?

Для тебя нет?

> Вот и изучай, как закончишь - подумаешь над этим вопросом еще раз, уже имея в кармане значительный опыт. )

А вот с этим соглашусь )

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

> Я даже больше скажу - можно и прикладные программы писать на С

Можно и на асме, а смысл?

Тут большую роль играет выполняемая задача. Если критична производительность - однозначно С (возможно, +asm). Если нет (как в большинстве случаев и бывает), то ты более-менее чётко пытаешься представить себе реализацию. В большинстве случаев поймёшь, что ООП может тебе сильно облегчить задачу.

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

>Я даже больше скажу - можно и прикладные программы писать на С.

Я пойду еще дальше, впрочем не на много - можно, как говаривал мой товарищ, и в "машинных кодАх". ;)

anonymous (*) (02.08.2008 10:33:25), хватит уже тролить.

....

Ой, про асм уже опередили, ну да ладно.

>Если критична производительность - однозначно С (возможно, +asm).

А вот тут не соглашусь. Лучше плюсы. Для начала, если опыта маловато, можно просто как "улучшенный Си".

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

>Для тебя нет?

В последнюю очередь. Хотел лишь отметить, что, по всей видимости, автор понимает плюсы как C with classes, что в корне неверно.

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

>Если критична производительность - однозначно С (возможно, +asm).

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

по теме: если интерисует системное программирование, то в данном случае C++ лучше не трогать. Только чистый C и асм в машинно-зависимом коде.

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

>> Для тебя плюсы - это ООП? > Для тебя нет?

Дожили. ООП - это лишь подход. Применять его можно в любом языке.

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

> по всей видимости, автор понимает плюсы как C with classes, что в корне неверно.

А ты не объяснишь, чем C with classes отличается от C++? А то столько раз читал, что C with classes - это не C++...

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

>если интерисует системное программирование, то в данном случае C++ лучше не трогать. Только чистый C и асм в машинно-зависимом коде.

Обоснуй.

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

> А ты не объяснишь, чем C with classes отличается от C++?

C with classes -- это C с классами

А C++ -- это C с классами и кучей всякой другой фигни.

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

> C with classes -- это C с классами

> А C++ -- это C с классами и кучей всякой другой фигни.

Спасибо, Евгений, теперь мне всё ясно. Термин "куча всякой фигни" волшебным образом проясняет ситуацию.

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

> Термин "куча всякой фигни" волшебным образом проясняет ситуацию.

Ой, ну ты как первый раз замужем :-).

Или мне про ссылко и шаблоны нужно рассказывать? Или про ужесточенный синтаксис? Или про перегруз обычных функций? Или про инлайнинг? А может, еще и про однострочные комменты рассказать?

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

> Или мне про ссылко и шаблоны нужно рассказывать?

Ну ведь такая мелочь эти ссылки... вон, в SystemV в Си структуры неявно передавались по ссылке, и что? А шаблоны - это всего лишь параметризованные классы (и функции, да). Вроде бы никто не говорил про "C with non-parameterized classes", а?

> Или про перегруз обычных функций?

Удобно, но не необходимо.

> Или про ужесточенный синтаксис?

Тоже ерунда типа ссылок.

> Или про инлайнинг?

Тоже есть в обычном Си.

> может, еще и про однострочные комменты рассказать?

Это та фигня с двумя слэшами, которая _даже в стандарте_ Си появилась уж лет 10 назад?

И вообще - вопрос был о том, чем "C with classes" отличается от C++, а не от C.

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

> Ну ведь такая мелочь эти ссылки...

> Тоже ерунда типа ссылок.

Ну так я и написал "с кучей всякой фигни".

> И вообще - вопрос был о том, чем "C with classes" отличается от C++

Ну дыкть, отсутствием этой самой "кучи всякой фигни" и отличается.

>> Или про инлайнинг?

> Тоже есть в обычном Си.

Примерчик?

> Это та фигня с двумя слэшами, которая _даже в стандарте_ Си появилась уж лет 10 назад?

Ну дыкть, не 40 лет назад, так ведь?

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

>>> Или про инлайнинг?

>> Тоже есть в обычном Си.

> Примерчик?

Примерчик чего? У меня на есть драфт стандарта C99, там в главе 6.7.4:

function-specifier:

inline

Подойдет?

>> Это та фигня с двумя слэшами, которая _даже в стандарте_ Си появилась уж лет 10 назад?

>Ну дыкть, не 40 лет назад, так ведь?

Ну так 40 лет назад они только в BCPL были :)

Короче... "C with classes" - это такое подмножество Си++ без ссылок, шаблонов, перегрузки функций, inline... еще чего? Странное какое-то подмножество.

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

>> Или про инлайнинг?

>Примерчик?

inline появились в стандарте c99

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

>без ... ... еще чего?

без блекджека.

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

> Короче... "C with classes" - это такое подмножество Си++ без ссылок, шаблонов, перегрузки функций, inline... еще чего?

C with classes - это просто "C с классами". Как говорится, KISS.

> Странное какое-то подмножество.

Какое надмножество, такое и подмножество.

> Подойдет?

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

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

>У меня конкретные вопросы: чем C with classes отличается от полного Си++, и кто определил это.

Если ты именно про "C with Classes", то можешь у Страусатрупа почитать, он же вероятно и определил. :D

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

>> Короче... "C with classes" - это такое подмножество Си++ без ссылок, шаблонов, перегрузки функций, inline... еще чего?

> C with classes - это просто "C с классами". Как говорится, KISS.

Если C with classes - это Си++ в стиле KISS, то это в корне верное понимание Си++ :)

>> Странное какое-то подмножество.

>Какое надмножество, такое и подмножество.

Подмножество обычно делается по каким-то принципам. В подмножестве Си++ без ссылок, шаблонов, перегрузки функций, inline - я лично вообще никакого смысла не вижу.

> тоже бэкпорт-фича.

Говорят, даже прототипы ANSI C - это бэкпорт фичи Си++ :D

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

> Подмножество обычно делается по каким-то принципам. В подмножестве Си++ без ссылок, шаблонов, перегрузки функций, inline - я лично вообще никакого смысла не вижу.

Ты или жестко стебешься, или не в курсе, что "C с классами" -- это ранние версии C++, точнее, первый концептуальный прототип оного?

Если занимаешься схоластикой, и требуешь определить C через C++, то не удивляйся отсутствию смысла в таком определении языка C.

> Говорят, даже прототипы ANSI C - это бэкпорт фичи Си++ :D

Неправду говорят. Прототипы, насколько я помню, еще у классиков встречаются. Другое дело, что в C они не обязательны, в отличие от.

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

> Ты или жестко стебешься, или не в курсе, что "C с классами" -- это ранние версии C++, точнее, первый концептуальный прототип оного?

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

Кстати, ссылки и перегруженные функции - это как раз то, что прогаммеры схватывают сразу, на лету, и пользоваться начинают сразу. Так что не использует никто "Си с классами", каким он был реализован Страуструпом в 1980.

>> Говорят, даже прототипы ANSI C - это бэкпорт фичи Си++ :D

> Неправду говорят. Прототипы, насколько я помню, еще у классиков встречаются.

Ну так давно это было. Небось, еще во времена "Си с классами".

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

> Вот именно - прототип, которому уж скоро 30 лет. Как можно говорить о понимании языка Си++ как его прототипа, который никогда не использовался широко, и о котором не пишут в учебниках - я просто не въезжаю.

Вот об этом и было исходное замечание -- что некоторые до сих пор воспринимают C++, как C с классами.

> Ну так давно это было. Небось, еще во времена "Си с классами".

Прототипы были еще раньше.

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

>> Ну так давно это было. Небось, еще во времена "Си с классами".

> Прототипы были еще раньше.

Нет. K&R C - он именно без прототипов.

Кстати, Википедия тоже считает, что прототипы Си позаимствованы из Си++: "The standards committee also included several additional features such as function prototypes (borrowed from C++)", http://en.wikipedia.org/wiki/C_(programming_language)

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

>А ты не объяснишь, чем C with classes отличается от C++? А то столько раз читал, что C with classes - это не C++...

Хотя бы наличием inclusion polymorphism'а и наследования.

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

>ООП в ядре реализовано на уровне структурки + функции, большего там и не надо.

Это не ООП. Это просто эмуляция абстрактных типов данных средствами Си. Согласен, зачастую большего и не требуется.

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

> Хотя бы наличием inclusion polymorphism'а и наследования.

> Это не ООП. Это просто эмуляция абстрактных типов данных средствами Си. Согласен, зачастую большего и не требуется.

этими структурками как раз и делаются полиморфизм и наследование

dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.