Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Путеводитель по C++: выпуск номер раз


Автор: chipset 12.2.2006, 07:57
Итак, вы решили изучать C++? Замечательно. Прекрасно. <вырезано цензурой>!
А что вы ожидали увидеть тут? То, с чего начинает половина книжек по C++ -- описание типов переменных на пять листов (за символы плотют однако-ж)? Нет, пожалуй, я воздержусь.
Спешу вас обрадовогорчить, пишу я не книгу. Их и так уже, пруд пруди. К тому-же, лучше чем у Страуструпа ни у кого не получалось smile

А, о чём это, я? Да всё о том же, я буду публиковать в этом и ещё аж N статейном цикле статеек ответы на вопросы которые будоражили меня на заре моего изучения C++ а сейчас, судя по списку топиков этого топика будоражат ещё как минимум 30% новичков, приходящих в этот язык со стороны, будь то PHP, Delphi или ещё какой-нибудь ЛИСП. Считайте эту статью, каталогом, обозревателем в мире C++ulture (как выразился небезызвестный Зверёк Харьковский в одноименной http://offline.computerra.ru/2004/546/34064/).

Начну я пожалуй с инструментов.

Скажите пожалуйста, а что лучше: Microsoft Visual Borland C++ 5.5 или STL?

Ахтунг! C++ -- это язык (падлавил!).
C++ -- не программа, не IDE, ничего такого что можно было-бы "скачать и запустить".
Говоря строго, C++ это язык который представлен небольшим документом описывающим основные конструкции языка C++ а так-же стандартную библиотеку C++ (о ней пожже). Название документу сему Стандарт. Брать его стоит где-нибудь http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1905.pdf.

С++ это набор правил по которым компилятор преобразовывает C++ код в машиные коды. Ладно, ладно, не сразу в машинный код. Сначало в кучу промежуточных файлов, а только их уже линковщик линкует между собой (функция в A.obj а вызов в B.obj, ужоснах).

Обычно, эта связка компилятор+линковщик, поставляеться вместе. Кстати, вышеупомянутая спецификация языка соблюдаеться абсолютно верно только в одном компиляторе (Comeau). Поэтому, много тем на форумах по C++ (в т.ч. и на Винграде) возникают из-за неправильной реализации C++ (читай: не соответсвующей стандарту). Что я имею в виду под этими замысловатыми высказываниями, это то что на разных компиляторах простейший код может интепретрироваться по-разному.
Обычно, это выглядит в стиле "Именем Святага Стандарта я говорю что класс А не может обьявляться наследником класса B". В этом месте разработчики MS скромно тупят глаза и просят о условном сроке.

Создатели компиляторов -- не роботы к сож., а некоторые ещё (как MS) хотят и свои фичи привнести в язык, плюя на стандарт (у MS много опыта в этой области). Есть и просто глючная реализация. Особенно, подобной реализацией славиться Borland C++ (не путать с C++ Builder!). Поэтому, если он у вас ещё есть -- выкиньте его пожалуйста в большущую ТОПКУ. Спасибо!

Вот небольшой список ведущих на данный момент компиляторов, к примеру:
- GCC (на Windows его перевели -- MinGW зовёться)
- Microsoft Visual C++ 2003 (бесплатный)
- OpenWatcom
- Comeau -- не знаю кем используеться правда, но стандарту соответствует как никто другой.
- Borland C++ Builder (к огромному сожалению).

Это -- компиляторы. Это не язык, это -- просто программка которая сжовывает ваши гениальные C++ программки и преобразовывает их в машинные коды. Консольная, должен заметить, программка. Та гламурная вещь которую вы запускаете гордым дабл-кликом по Microsoft Visual Studio это IDE. В сущности, расширенный текстовой редактор и файл-менеджер, с возможностью запуска компилятора. Компилятор, как я уже сказал -- консольная программа.

Естественно, что в современных IDE... Ах, я забыл сказать что IDE расшифровываеться как Integrated Development Environment -- интегрированная среда разработки. ... реализовываеться гораздо больше чем может показаться на первый взгляд...

То заблуждение что Visual Studio это компилятор, обычно формируеться тем что идут эти две разные сущности (VC++ и VS) вместе. Вот небольшой списочек современных IDE и компиляторов с которыми они могут работать:

-- Microsoft Visual Studio: только MSVC++.
-- Eclipse: любой бесплатный компилятор.
-- Code::Blocks: любой бесплатный компилятор.
-- DevC++: насколько я помню, только MinGW.
-- Borland C++ Builder: Borland C++.

Т.е., то что вы должны освоить из этой статьи так это то что C++ код можно пистаь и в notepad.exe, и в VI, и даже в FAR (плагин даже есть такой). Компилировать его однако, можно, только компиляторами (ну не западлоль?).
----
Фух.

Автор: Aveic 15.2.2006, 00:51
Цитата(chipset @ 12.2.2006, 07:57 Найти цитируемый пост)
Фух.
И не говори, такого наговорил. Бедные парни так и не поймут, можно ли вообще на С++ программы писать или нет, а некоторые начнут компилить код в NotePad. Лана, это я так

Автор: Ignat 16.2.2006, 18:02
Цитата(chipset @ 12.2.2006, 07:57 Найти цитируемый пост)
Есть и просто глючная реализация. Особенно, подобной реализацией славиться Borland C++

Примеры в студию....

Автор: Mayk 16.2.2006, 18:44
Цитата(Ignat @ 16.2.2006, 22:02 Найти цитируемый пост)

Примеры в студию....

Почему bc должен лететь ф топку? Пжалуйста.
Сегодня бился с тремя траблами.


Код

int a[10]={};

Цитата(bcc32 bug1.cpp)

Borland C++ 5.5.1 for Win32 Copyright © 1993, 2000 Borland
bug1.cpp:                                                 
Error E2264 bug1.cpp 1: Expression expected               
*** 1 errors in Compile ***                               

Жуть. Лечится конечно просто, но всё равно не приятно.

Ещё вот так нельзя в нём делать вообще:
Код

int cmd_help(){}
int main()
{
        struct {
                char* command;
                int (&funcRef)();
                char* commandHelp;
        }funcs[] = {
                {"help", cmd_help, "display this help msg"}
        };

}

(тут кстати даже комо даёт ворнинг, но компилит. гнус глотает за просто так)
Цитата(bcc32 bug2.cpp)

bug2.cpp:
Error E2232 bug2.cpp 10: Reference member ' ::funcRef' in class without constructors in function main()
*** 1 errors in Compile ***                                                                                                                                   


BC вообще оказывается не ровно дышит к структурам.
Код

class Point2D{};
struct Line2D{
    Line2D(const Point2D& a, const Point2D&b){}
};

int main()
{
     Point2D a,b,c;
     struct {
        Line2D line;
        Point2D checkPoint;
     }intersectionTest[]=
     {
        {Line2D(a,b),c},
        {Line2D(a,c),b},
        {Line2D(b,c),a}
     };
}

(гнус и комо не подавились)
Цитата(bcc32 bug3.cpp)

Borland C++ 5.5.1 for Win32 Copyright © 1993, 2000 Borland                 
bug3.cpp:                                                                     
Error E2034 bug3.cpp 14: Cannot convert 'Line2D' to 'struct' in function main()
Error E2291 bug3.cpp 14: } expected in function main()                       
Error E2141 bug3.cpp 14: Declaration syntax error in function main()         
Error E2139 bug3.cpp 14: Declaration missing ; in function main()             
Error E2190 bug3.cpp 14: Unexpected }                                         
Error E2040 bug3.cpp 14: Declaration terminated incorrectly                   
Error E2190 bug3.cpp 17: Unexpected }                                         
Error E2190 bug3.cpp 17: Unexpected }                                         
Error E2190 bug3.cpp 19: Unexpected }                                         

9 ошибок. Мне пришлось давать структуре имя и делать ей конструктор smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)