С/C + + h2>
"Ох хвиля моя, хвиля, ти як С + + потужна" p>
Майже Пушкін p>
Відносно потужності C/С + +. Так, дійсно
це дуже потужні мови, але їх потужність полягає в їх засобах низького
рівня, а вони при розробці прикладних програм часто непридатні. p>
Потужність - це,
звичайно, добре, але часто небезпечно. p>
Приклад: # define
int long синтаксично вірно, але може призвести до катастрафіческім наслідків
(хоча, наприклад, при перенесенні програм з однієї платформи на іншу це може
знадобитися). Або оператор goto. Те, що він не включений в Java, багато хто вважає
дуже великим благом. Goto - це потужна можливість, але, як показав ще у
сімдесятих роках Дейкстра, м'яко кажучи, "не рекомендована" до
використання. Проте це можливість, і вона може бути не зайвою. Я
вважаю, що подібні низькорівневі конструкції повинні бути присутнім, але ними
не слід зловживати. У тих рідкісних випадках, коли особисто я його використовував,
це була спроба розвитку плохоспроектірованной програми. p>
"Щоб зробити кар'єру програміста за кордоном потрібно знати дві
мови: англійська і C + + " p>
Російський аспірант, який побував у Відні. p>
"З точки зору теоретичного програмування мова Сі - це
Фортран 80 - их. (Проти такого принизливій визначення не заперечував і автор
мови Сі - Д. Рітчі). Ця мова, що поєднує в собі багато переваг мови
високого рівня і асемблера, дав програмістам, за образним висловом
деяких, педаль газу, але заблокував педаль гальма. На Сі комп'ютер може
"мчати" швидко, але ризиковано. Тобто Сі, насаджуючи посилальної --
асемблерні програмування, як би має вектор в сторону, протилежну тій,
яка визначається теорією і методологією мов програмування. p>
Тому і Сі + + - це досить дивне поєднання деяких рис ООП
(тут і далі - об'єктно - орієнтоване програмування) та процедурного
програмування "
p>
к.т.н. Соловйов А.Є. p>
"C + + являє собою цікавий експеримент з адаптації
можливостей об'єктної технології до традиційного мови програмування. ...
оскільки Сі + + - мова, що вимагає досить інтенсивної критики. Він представляє
собою не надто вдалу реалізацію об'єктно - орієнтованої технології, і
тому його недоліки просто необхідно піддавати критичному аналізу ...
Сі + + приносить всім колосальне розчарування - він увібрав в себе всі погані і
старі кошти, а також привніс в об'єктну технологію абсолютно непотрібну
складність. Навіщо потрібна мова, наскрізь просочений низькорівневими
конструкціями? ". p>
Ян Джойнер p>
Далі по тексту "Найбільш вірний шлях до
успіху - використання чистого об'єктно - орієнтованої мови, що володіє
інтерфейсом з мовою програмування С або з іншими низькорівневими мовами. Це забезпечить
хороші підтримку і супровід, переносимість та якість ", що в
принципі можна спостерігати на прикладі будь-якого засобу 4GL (того ж Delphi)
підтримує стандартні засоби взаємодії Windows такі як Dll, Dde,
Ole. Найпростіший приклад - звернення з Delphi програми до Win API (адже Windows
написаний на Сі (9X) і C + + (NT)). p>
Спочатку
створений для розробки ОС Unix, мова C набув широкого поширення. Це
наклало дуже сильний відбиток на мову. p>
Як виник мову
С? Спочатку був CPL: він був створений в середині 60 - х років. p>
Мова не отримав
широкого розповсюдження, але в процесі його створення з'явилася маса ідей. Мова
був беcтіповий, як і належить асемблеру (ще PDP 7). p>
Нова
спрощена версія мови називалася Basic CPL або BCPL. На ньому була реалізована
MULTICS. Але в результаті її розмірів і роздутість їй потрібна була заміна. p>
Частина ідей з MULTICS була взята
розробниками Unix. Приміром, ієрархічна файлова система. Зауважу, що в
прямому попереднику DOS-CP/M її не було, як і в першій версії DOS. p>
допрацювали мову
- Вийшов B. p>
Розробили ОС
- Вийшла Unix p>
Сі
розроблявся як кросплатформний асемблер PDP 11 (багато досвідчених
програмісти знають його по вітчизняним аналогам), є деякою сумішшю
асемблера з Паскалем, цим збіднюється багато його особливості. p>
Наприклад: p>
Відсутній
можливість напряму працювати з даними, не підтримує процесори PDP
(безлічі, рядки, etc). p>
Присутність
явно PDP - орієнтованих конструкцій: p>
Функція poly,
зводиться до аналогічної команді асемблера. Обчислення ж поліномів НЕ
є завданням першорядної важливості мови. p>
Постінскремент
і предінскремент. На x86, наприклад, це нічого не дає. І A = B + + і A: = B;
inc (b); приведуть до команд асемблера MOV a, b; inc b (природно, безпосередньо
в коді це будуть не імена змінних, а, наприклад, регістри). p>
".. що аномалії існуючих
обчислювальних машин старанно відтворюються в мовах програмування,
причому це відбувається на шкоду інтелектуальної керованості програм,
виражаються такою мовою .. "Е. Дейкстра." Дисципліна
програмування " p>
Вірт писав що
: "... Мова повинна визначатися в термінах математичних, абстрактних
концепцій І тільки, якщо мова відповідає цьому критерію, він може вважатися
високорівневим. " p>
Змінюються від
платформи до платформи розміри типів даних. p>
Рядки,
закінчуються нулем, запозичені з асемблера (директива. asciz
асемблера PDP) p>
Відсутність
автоматичної або обов'язкової ініціалізації змінних. Плюс такого підходу
- Велика оптимальність коду, мінус - необхідність проводити ініціалізацію
вручну. Відсутність автоматичної ініціалізації є потенційною
можливістю для розробки програмного забезпечення, яке містить нестійкі помилки (в ідеалі
компілятор повинен відслідковувати не проводиться чи читання не ініціалізований
змінної і у випадку, якщо проводиться, обнуляти її). p>
Наявність
безлічі "підводних каменів" p>
scanf ( "% d% d", & n, & ar [n]); p>
Ви думаєте, що
буде введено ціле n і n - ий елемент масиву ar? p>
Це дуже
малоймовірно. Швидше за все, всі аргументи scanf будуть обчислені до того, як
операція буде викликана на виконання. Подібних побічних ефектів у мові маса.
p>
Інша
"особливість" p>
char p>
p>
str [50] = "qwertyuio"; p>
int a = 3; str [+ + a] = str [+ + a] = ''; p>
cout