Сейчас начнется треп типа: "Это не форум программистов, это форум Евангелиона...". Я знаю, я уважаю Евангелион и вообще аниме, просто
захотелось написать про это...
На различных форумах часто можно видеть сообщения типа:"Паскаль говно, Си рулит!". Но если задать вопрос их авторам: "Почему ты так считаешь", в ответ получаешь избитые фразы: "На нем игры пишут" или "На нем операционки пишут" и т.п. В этой статье я бы хотел осветить
некоторые преимущества и недостатки этих языков и поделиться своим мнением по этому поводу.
Начну я с самого, на мой взгляд, простого. Во первых, вместо Паскалевских begin и end в Си есть { и }. Дальше арифметические операции.
Паскаль:
...
x := x+1;
a := a*b;
...
Си:
...
x++;
a *= b;
...
В Си также удобно организовано приведение типов. Любой тип можно привести к любому другому, причем без проблем.
Тип, к которому нужно привести, указывается в скобках. В паскале для этого используются какие-то левые функции,
что весьма неудобно...
Паскаль:
var a: intger;
x: real;
...
// приведение типа
a := Trunc(x);
...
Си:
...
int a;
float x;
// приведение типа
a = (int)x;
...
Дальше условные операторы и циклы.
Паскаль:
...
// Условный оператор
if x <> 0 then
y := a/x;
...
// Цикл
while head <> nil do
head := head^.next;
...
Си:
...
// Условный оператор
if(x)
x--;
...
// Цикл
while(head)
head = head->next;
...
Короче, запись на языке Си короче и понятнее, чем запись на Паскале. Интересно, кто-нибудь дочитал до этого момента. Дальше
самое интересное. Работа с памятью. В Си все устроено настолько прозрачно...
Си:
void main {
int a[10];
int *b = &a[0];
b[3] = 8;
// У нас в массиве 10 элементов, но это
// не мешает нам обратиться к 100
a[5] = b[100];
// Или записать туда какой-нибудь мусор
a[100] = 100;
// Другой вопрос, к чему это приведет...
*(b+2) += 10;
...
}
В Паскале можно задавать диапозон значений в массиве, но в Си это легко обойти
Паскаль:
...
var a: array [5..9] of integer;
...
a[7] := 10;
...
Си:
...
int *b = new int[5];
int *a = (a-5);
...
a[7] = 10;
...
Плюс, в Си есть классы памяти. Можно работать с регистровыми переменными.
Про удобство классов я вообще молчу. Это отдельная история. На самом деле говорить об этом можно очень долго, Я и 10% не
рассказал. Я даже не начинаю про особенности компиляции... Короче, Си сделан программистами для программистов. Про Паскаль я
молчу. Хорошо, что хоть встроенный ассемблер поддерживает. Если кому понравился мой треп, можете присылать свои вопросы на
мыло: call_eax@mail.ru. Я довольно хорошо разбираюсь в программировании, так что не стесняйтесь.