реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Область видимости enum, C
sigmaN
сообщение Oct 13 2009, 02:49
Сообщение #16


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Почему Linux пишут на Си и не включат режим C++?

P.S. т.е. я Ваш ответ принял. Мне просто интересно.


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
Dima_G
сообщение Oct 13 2009, 05:27
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699



Цитата(dxp @ Oct 12 2009, 17:52) *
А разве это не implementation defined?


Да, согласен smile.gif


Цитата
6.7.2.2 Enumeration specifiers

Each enumerated type shall be compatible with char, a signed integer type, or an
unsigned integer type. The choice of type is implementation-defined,108) but shall be
capable of representing the values of all the members of the enumeration. The
enumerated type is incomplete until after the } that terminates the list of enumerator
declarations.

(ISO/IEC 9899:TC2 Committee Draft — May 6, 2005)

Цитата(sigmaN @ Oct 13 2009, 06:49) *
Почему Linux пишут на Си и не включат режим C++?

P.S. т.е. я Ваш ответ принял. Мне просто интересно.


В ядре - политика Торвальдса (ИМХО - зря). Не любит он плюсы.

Цитата
Linux creator Linus Torvalds joined in to explain:
"In fact, in Linux we did try C++ once already, back in 1992. It sucks. Trust me - writing kernel code in C++ is a BLOODY STUPID IDEA.

"The fact is, C++ compilers are not trustworthy. They were even worse in
1992, but some fundamental facts haven't changed: 1) the whole C++ exception handling thing is fundamentally broken. It's _especially_ broken for kernels. 2) any compiler or language that likes to hide things like memory allocations behind your back just isn't a good choice for a kernel. 3) you can write object-oriented code (useful for filesystems etc) in C, _without_ the crap that is C++."


http://www.opennet.ru/openforum/vsluhforumID9/8226.html

А в юзерспейсе - полно приложений на ++;
Go to the top of the page
 
+Quote Post
dxp
сообщение Oct 13 2009, 07:31
Сообщение #18


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(Dima_G @ Oct 13 2009, 12:27) *
В ядре - политика Торвальдса (ИМХО - зря). Не любит он плюсы.

http://www.opennet.ru/openforum/vsluhforumID9/8226.html

Да, попадались эти "доводы". Мракобесие, имхо. При всем уважении, дяденька, по ходу, не понимает плюсов. А непонимание порождает боязнь, т.к. вещь кажется неуправляемой.

2SigmaN: включите режим ++, ничего там страшного нет. Пишите как обычно. Используйте только те средства, которые освоили. И это вполне комфортный и безопасный путь. С++ не заставляет сразу использовать исключения, множественное наследование, темплейты и ООП. smile.gif Все это используется в соответствии с задачей. И не бойтесь пробовать. Компилятор С++ в CCS, насколько помню, вполне приличный.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Oct 13 2009, 09:24
Сообщение #19


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Ok. В следующем проекте попробуем smile.gif


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 13 2009, 10:39
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(dxp @ Oct 13 2009, 10:31) *
2SigmaN: включите режим ++, ничего там страшного нет. Пишите как обычно.

Если программа не далеко ушла от "Hello World", то разницы не почувствует. Дальше, дальше все не так благостно sad.gif. На многие плюсы плюсового компилятора найдутся и свои весьма заметные минусы sad.gif. Использовать плюсовый компилятор для компиляции "сишных" исходников не самая хорошая идея, хотя раньше сам много лет так делал.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Dima_G
сообщение Oct 13 2009, 11:30
Сообщение #21


Местный
***

Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699



Цитата(zltigo @ Oct 13 2009, 13:39) *
Если программа не далеко ушла от "Hello World", то разницы не почувствует. Дальше, дальше все не так благостно sad.gif. На многие плюсы плюсового компилятора найдутся и свои весьма заметные минусы sad.gif. Использовать плюсовый компилятор для компиляции "сишных" исходников не самая хорошая идея, хотя раньше сам много лет так делал.


А Вы можете привести примеры минусов С++ комиплятора для Си исходников?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 13 2009, 13:38
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Dima_G @ Oct 13 2009, 14:30) *
А Вы можете привести примеры минусов С++ комиплятора для Си исходников?

На вскидку - incomplete types, неименованные структуры и union-ы, упоминание имени volatile переменной не является причиной обратиться к ней, другой размер литерала, передача параметра по ссылке добавленная для пущей "красоты" мешается, много разных мелочей, типа различия в определениях NULL.
Возьмите любую программу приличного размера и просто компильните - различия увидите сами. После появления компиляторов следующих C99 желание пользоваться С++ для компиляции сишных исходников у меня заметно уменьшилось и постепенно сошло на нет. Каждому свое.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Dima_G
сообщение Oct 13 2009, 13:55
Сообщение #23


Местный
***

Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699



Цитата(zltigo @ Oct 13 2009, 16:38) *
На вскидку - incomplete types, неименованные структуры и union-ы, упоминание имени volatile переменной не является причиной обратиться к ней, другой размер литерала, передача параметра по ссылке добавленная для пущей "красоты" мешается, много разных мелочей, типа различия в определениях NULL.
Возьмите любую программу приличного размера и просто компильните - различия увидите сами. После появления компиляторов следующих C99 желание пользоваться С++ для компиляции сишных исходников у меня заметно уменьшилось и постепенно сошло на нет. Каждому свое.


Ну в принципе да: С и С++ - это разные языки (впрочем, я так понял, что dxp имел в виду не компиляцию имеющихся сишных исходников, а ведение проекта с нуля, используя некоторые удобства С++, но программируя в си стиле).

А можно поподробнее про "упоминание имени volatile переменной не является причиной обратиться к ней" - довольно часто использую в своих проектах на С++ код вида

Код
volatile DWORD* dwReg_ = reinterpret_cast<DWORD*> (SOME_REGISTER)
*dwReg_ = ...


а как я понял из ваших слов, в этом случае возможно "необращение" к регистру SOME_REGISTER unsure.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 13 2009, 14:03
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Dima_G @ Oct 13 2009, 16:55) *
а как я понял из ваших слов, в этом случае возможно "необращение" к регистру SOME_REGISTER unsure.gif

Нет не в этом, а в этом:
Код
*dwReg_;


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Oct 13 2009, 15:36
Сообщение #25


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Именно поэтому я и не кинулся тут-же "включать C++" wink.gif


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
dxp
сообщение Oct 14 2009, 02:55
Сообщение #26


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(zltigo @ Oct 13 2009, 20:38) *
На вскидку - incomplete types, неименованные структуры и union-ы, упоминание имени volatile переменной не является причиной обратиться к ней, другой размер литерала, передача параметра по ссылке добавленная для пущей "красоты" мешается, много разных мелочей, типа различия в определениях NULL.
Возьмите любую программу приличного размера и просто компильните - различия увидите сами. После появления компиляторов следующих C99 желание пользоваться С++ для компиляции сишных исходников у меня заметно уменьшилось и постепенно сошло на нет. Каждому свое.

Еще забыли enum'ы, которые в С++ являются именно перечислимым типом, в то время как в С - это просто еще один способ создания целых литералов. И обсуждаемые констатны, подход к которым в С++ куда более разумен. Да, такого рода мелкие отличия есть, и отличия эти в большинстве в лучшую сторону. Мне вообще не понятны мотивы людей, которые с упорством, достойным лучшего применения, продолжают толкать С при наличии более эффективного и уже давно стабильного "надмножества" в виде С++.

Что касается ссылок, то это отнюдь не для красоты. Это очень полезная конструкция языка. Без нее, например, невозможно реализовать перегрузку операторов. Да и просто работать с объектами больших (и не очень) размеров куда эффективнее, чем по значению. И ссылки в ряде случаев оказываются хорошей (более безопасной и прозрачной) заменой указателям. Причин для их существования достаточно. И в голом С они бы тоже не помешали.

Цитата(Dima_G @ Oct 13 2009, 20:55) *
Ну в принципе да: С и С++ - это разные языки (впрочем, я так понял, что dxp имел в виду не компиляцию имеющихся сишных исходников, а ведение проекта с нуля, используя некоторые удобства С++, но программируя в си стиле).

Именно это я и имел в виду. Компилять большой проект, написанный на голом С, изобилующий незаконченными массивами, арифметикой с перечислимыми типами и прочим, занятие малополезное и малоприятное.



Цитата(sigmaN @ Oct 13 2009, 22:36) *
Именно поэтому я и не кинулся тут-же "включать C++" wink.gif

У вас большой проект, изобилующий чисто сишными феньками, которые упомянул zltigo? Вы пробовали его собирать в С++ режиме? Попробуйте ради интереса, расскажите, на чем споткнулся компилятор?


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 14 2009, 14:57
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(dxp @ Oct 14 2009, 05:55) *
Что касается ссылок, то это отнюдь не для красоты. Это очень полезная конструкция языка.

Только сделанная с C++ крайне дурно sad.gif
Цитата
И ссылки в ряде случаев оказываются хорошей (более безопасной и прозрачной) заменой указателям.

Я бы сказал, что именно в C++ реализации, с точностью до наоборот sad.gif.
Цитата
...изобилующий незаконченными массивами

Ну это ничуть не лучше, чем изощрятся в странных и непрозрачных действиях с обходом реальностей ввиде незаконченных массивов sad.gif и тех-же лишних ненужных имен для обязательно именованных структур. Просто 'C99' на сегодняшний день вполне продуманный, законченный и сбалансированый язык. Для эмбеддерских целей с переходом на C++ привязка к конкретному компилятору становится заметно жестче sad.gif, если конечно не писать "Hello World!" с "контроллерами светодиодов".
Цитата
Попробуйте ради интереса, расскажите, на чем споткнулся компилятор?

Естественно, что кондовый вариант скорее всего скушает. Хотя... Я тут прямо сейчас влет попробовал недавно писанный, под AVR практически буквально "контроллер светодиодов", который по идее должен был без проблем компилиться и плюсовым, но тем не менее споткнулся на
__flash char HexChars[16] = "0123456789ABCDEF";
smile.gif
Проблема выбора между фенечками 'C' и фенечками 'C++' sad.gif Я, как уже писал, последнее время склонился к фенечкам 'C99'. Естественно, для случаев, когда идет речь именно о фенечках, а не о полезности фундаментальных отличий C++.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Oct 14 2009, 19:15
Сообщение #28


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Потом как-нибудь попробую.
Проект не супер большой, но и не hello world и не мигалка диодами.
После компиляции .text получается размером ~150КБ (TMS320F28335)

Но, хотя, внутренний голос подсказывает мне не переходить на C++ для достаточно простых проектов, где можно обойтись структурным подходом - я всё-же попробую.
Чисто ради интереса. smile.gif
А ещё дело пока осложняется тем, что я по сути только начинаю привыкать к фенечкам C и боюсь перемешать всё начисто, так и не разобравшись толком...
Короче ещё немного с фенечками Си повожусь, а потом на C++. Ну а потом, может быть, как zltigo переползу обратно к Си.
И тогда у меня будут более существенные чем просто "внутренний голос подсказывает"аргументы smile.gif


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
dxp
сообщение Oct 15 2009, 03:41
Сообщение #29


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(zltigo @ Oct 14 2009, 21:57) *
Только сделанная с C++ крайне дурно sad.gif

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


Цитата(zltigo @ Oct 14 2009, 21:57) *
Я бы сказал, что именно в C++ реализации, с точностью до наоборот sad.gif.

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

Цитата(zltigo @ Oct 14 2009, 21:57) *
Ну это ничуть не лучше, чем изощрятся в странных и непрозрачных действиях с обходом реальностей ввиде незаконченных массивов sad.gif

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

Цитата(zltigo @ Oct 14 2009, 21:57) *
и тех-же лишних ненужных имен для обязательно именованных структур.

Опять не понял о чем речь. sad.gif Каких ненужных имен? Что такое обязательно именованные структуры?

Цитата(zltigo @ Oct 14 2009, 21:57) *
Просто 'C99' на сегодняшний день вполне продуманный, законченный и сбалансированый язык.

Который реально ничем не лучше С++. И значительно слабее в принципе.

Цитата(zltigo @ Oct 14 2009, 21:57) *
Для эмбеддерских целей с переходом на C++ привязка к конкретному компилятору становится заметно жестче sad.gif, если конечно не писать "Hello World!" с "контроллерами светодиодов".

Так было несколько лет назад (5+). Но сегодня ситуация уже совсем иная. Платформ в embedded, для которых есть С и нет С++, по пальцам можно пересчитать.


Цитата(zltigo @ Oct 14 2009, 21:57) *
Естественно, что кондовый вариант скорее всего скушает. Хотя... Я тут прямо сейчас влет попробовал недавно писанный, под AVR практически буквально "контроллер светодиодов", который по идее должен был без проблем компилиться и плюсовым, но тем не менее споткнулся на
__flash char HexChars[16] = "0123456789ABCDEF";

И об какое ограничеие С++ тут споткнулся компилятор?

Цитата(zltigo @ Oct 14 2009, 21:57) *
Проблема выбора между фенечками 'C' и фенечками 'C++' sad.gif Я, как уже писал, последнее время склонился к фенечкам 'C99'. Естественно, для случаев, когда идет речь именно о фенечках, а не о полезности фундаментальных отличий C++.

С++, если его использовать именно как С++, а не только как "улучшенный С" (что приемлемо только на начальном этапе, а дальше надо расти), дает колоссальные преимущества перед С в первую очередь в том, что порождает иной способ мышления при программировании - поощряет подход, когда программист видит в программе не просто переменные и функции, а объекты, имеющие непосредственное отношение к объектам реального мира. Позволяет выстраивать в программе иерархию объектов и организовать между ними органичные связи так, что эта система объектов и связей является отражением своего "прототипа" из реального мира... В С тоже можно подходить так же, но сам язык никак не поддерживает это, поэтому тут придется напрягаться и появится немало "технологического" кода.

Про возможности ООП. В последнем проекте пришлось разрабатывать GUI. Вообще не понимаю, как работать с GUI без возможностей наследования и полиморфизма. Как представлю, что все это пришлось бы реализовывать на голом С, так просто паника подкатывает. smile.gif


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Dima_G
сообщение Oct 15 2009, 04:11
Сообщение #30


Местный
***

Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699



Цитата(zltigo @ Oct 14 2009, 18:57) *
Я тут прямо сейчас влет попробовал недавно писанный, под AVR практически буквально "контроллер светодиодов", который по идее должен был без проблем компилиться и плюсовым, но тем не менее споткнулся на
__flash char HexChars[16] = "0123456789ABCDEF";


Тут всего лишь более строгий контроль, который предоставляет компилятор С++. С его точки зрения - это попытка проинициализировать массив из 16 char строкой, длиной 17 char (включая терминальный ноль).
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 16:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01621 секунд с 7
ELECTRONIX ©2004-2016