Поговорим о C/C++

Раздел форума: 

Аватар пользователя admin

Автор темы: 

Кудёлко Максим
Милости просим всех, пишущих на этих языках
 
Аватар пользователя Glen
А на C++ есть какой-то общепринятый стандарт?
Аватар пользователя Викинг
Есть. ISO/ANSI, был принят то ли в прошлом, то ли в позапрошлом году. Если не ошибаюсь, MSVC6 уже имел поддержку чернового варианта стандарта.

P.S. Все равно не понимаю, что можно обсуждать о C/C++. Разве что недостатки :)

Аватар пользователя Mojo
Обсуждать можно такую чудную вещь как задаваемые на интервью вопросы по С++.(ну и соответственно ответы на них).

Тем кто ищет работу за рубежом может пригодиться.

Если кто-то считает что знает С++ может себя проверить на www.brainbench.com - там очень хорошие вопросы.

Аватар пользователя Hub
К сведению Викинга MSVCPP6 полностью соответсвует стандарту ISO/ANSI. Кстати на www.brainbench.com я получил уже 5 сертификатов.
Аватар пользователя Викинг
> К сведению Викинга MSVCPP6 полностью соответсвует стандарту ISO/ANSI.

MSVC6 начали продавать 2 сентября 1998 года (http://msdn.microsoft.com/visualc/prodinfo/qa.asp). Стандарт был утвержден 28 сентября того же года (http://www.ncits.org/cplusplus.htm). Хотя вряд-ли черновая и финальная версии сильно отличались.

> Если кто-то считает что знает С++ может себя проверить на www.brainbench.com - там очень хорошие вопросы.

На мой взгляд это не показатель. Приятно конечно завесить всю стену сертификатами, но они дают весьма приблизительное представление о квалификации программиста.

Аватар пользователя Glen
А встречались ли кому-то статистические данные, говорящие о том, что C/C++ вытесняется Java'ой?
Аватар пользователя Викинг
Это смотря чьи данные: если читать PRы Sun, может оказаться что Java уже давно всех вытеснила :)

А если серьезно, возможно наступление Явы и к лучшему. Хоть сам язык в чем-то ограничен, он не дает начинающим (коих в нашем деле большинство) такого простора для ляпов и нелепых глюков, как C++.

Аватар пользователя Konstantin
пишу на C++ и Java. Java - это убожество для декстопов, еще ни разу не видел законченного продукта. Что JBuilder 3.5 что JDeveloper 3.1 - такие уродливые приложения, слов просто нет. Отладка - ужас, интерфейс корявый.

80% ошибок уходит на поиск правильно пути для классов. причем на мобильных устройств и определить-то невозможно что случилось.

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

Аватар пользователя Glen
To: Konstantin

У вас получается противоречие - с одной стороны "Java - это убожество для декстопов", с другой - "десктоп-приложения на это делать нельзя.

"

Аватар пользователя Jung
А про C# слыхали?

Ну так вот: вашему CPP скоро конец...

Аватар пользователя Викинг
Си с дыркой будет работать далеко не на всех платформах; если быть точным - только на одной. Так что серьезных оснований для смерти C++ пока не видно.
Аватар пользователя Glen
А в чем отличие C# от C++?
Аватар пользователя Викинг
Отличий много. Где-то в недрах microsoft.com погребен white paper по C#, плюс по usenet ползут самые жуткие слухи.

Начать с того, что якобы *все* объекты программы будут автоматически инкапсулироваться в COM-объекты. Не знаю, относится ли это к примитивным типам вроде char *, но кросплатформенность это рубит на корню. В C# обещают garbage collection (что есть хорошо). IDE (MSDS 7) будет использовать свой собственный формат для исходников (*не* ASCII), но это неподтверженный слух. Множественное наследование, в отличие от Явы, останется, но неясно насколько им можно будет пользоваться (в MFC, как известно, множественное наследование запрещено).

Аватар пользователя Glen
To: Викинг

А программы на C# будет машинным кодом или как в Java? И останутся ли там необъектные глобальные функции и переменные?

Аватар пользователя Jung
to Glen:

В "КГ" пару месяцев назад была подробная статейка про С# (http://www.nestor.minsk.by/kg/archive/index.html > Программирование > 'C# - ...')

"По сравнению с такими языками, как Microsoft Visual Basic, разработка эквивалентных приложений на C и C++ зачастую требует намного больше времени. Именно поэтому разработчики искали язык, который обеспечивал бы лучший баланс между мощью и продуктивностью. Идеальным решением были бы быстрая разработка и возможность доступа ко всей функциональности низлежащей платформы.

Решение этой проблемы от Microsoft — язык C#. Он сочетает в себе продуктивность Visual Basic и мощь C++. C# будет являться частью Visual Studio 7.0. C# не имеет собственной библиотеки классов. Он будет, наравне с другими языками, обеспечивать доступ к Next Generation Windows Services (платформа.NET), включая общую библиотеку классов.

Современный дизайн C# устраняет многие ошибки программирования на C++. Каждый объект в C# является COM-объектом. Аналогично, программы на C# могут естественным образом использовать существующие COM-объекты. При необходимости C# позволяет делать вызовы различных API. Структура языка позволяет компонентам C# становиться Web-сервисами, доступными через Internet."

Аватар пользователя Викинг
2 Glen: компиляться будет в native. Им нет особого смысла делать байткод, учитывая что все это хозяйство будет работать только под wintel.

Насчет глобальных функций не помню, но по идее должны остаться.

Аватар пользователя Вик
Все пытаюсь найти ответ на один вопрос, поэтому и попал на ваш форум (может здесь помогут).

В Паскале возможна такая реализация:

procedure a(a:integer);

procedure b;

begin

a:=a+3;

end;

begin

b;

a:=a+3;

end;

то есть вложенные процедуры, благодаря которым "дочерняя" процедура имеет доступ к локальным переменным "родительской" процедуры.

Существует ли возможность осуществить подобное в С++?

Аватар пользователя Викинг
Вик: нельзя, т.к. в C/C++ невозможно определять вложенные функции.

Твой пример является частным случаем т.н. лексического замыкания (lexical closure). Однако поводов для гордости паскалистам тут мало, т.к. *общий* случай замыкания Паскаль не поддерживает, т.е. ты не можешь вернуть процедуру b с захваченной переменной a из процедуры a.

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

Аватар пользователя Vic
Еще пару вещей хотелось бы видеть в С++. Например, оператор switch, который работал бы не только с константнымии выражениями. Если кто-то знает почему язык в данном случае так реализован, выскажите, пожалуйста свое мнение. Еще интересно было бы задавать массивы не с константными размерами. Может "привязать" бы к массиву определенную переменную, отвечающую за размерность?
Аватар пользователя Vic
Скачал недавно осходник ПГП. Много интересного, правда, еще во многом надо разобраться. В архиве также есть свободные для использования исходники программ, позволяющие компрессировать информацию, а также JPEG трансформация...
Аватар пользователя Викинг
> Например, оператор switch, который работал бы не только с константнымии выражениями. Если кто-то знает почему язык в данном случае так реализован, выскажите, пожалуйста свое мнение.

Потому что:

a) в большинстве случаев такой формы case вполне достаточно;

b) переключатель со статическими условиями легче понимать;

c) так проще реализовать компиляцию.

> Еще интересно было бы задавать массивы не с константными размерами. Может "привязать" бы к массиву определенную переменную, отвечающую за размерность?

Все уже сделано за вас - надо только скачать нужную библиотеку. Такая штука обычно называется adjustable array, и ее реализация есть в STL.

Аватар пользователя Вик
А как насчет оператора аналогичного паскалевскому "with", а то надоедает писать название класса, точку а потом имя метода или переменной-члена?
Аватар пользователя Викинг
Нету такой вещи в C++.

Давай переменным короткие неосмысленные идентификаторы, чтобы меньше набирать приходилось. В С++ это нормально - посмотри хотя бы на название языка.

Аватар пользователя anticpp
nedorabotannyi kakoito etot cpp
Аватар пользователя Buzuter
Вам бы хороший проектик в кл/серв. да на клиентов с 10 и усикались бы вы со своим С хоть с плюсами, хоть с забором. Да ещё в хорошие временные рамочки поставить и хорошую комиссию по приёмке организовать.
Аватар пользователя Викинг
Это к чему?