Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование под Linux #8 (03-02-2002)


Служба Рассылок Subscribe.Ru

Здравствуйте дорогие подписчики рассылки "Программирование под Linux" !!!
 ....----==== http://linux.firststeps.ru/ ====----....


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

Письмо от "Алексей Данилович" (Woland@???.ru)
==============================================
АД> Здравствуй, многоуважаемый автор!
АД> Прежде всего хочу сказать тебе, что твоя рассылка по
АД> программированию в Линухе представляется мне
АД> очень полезной. Я занимаюсь программированием довольно давно,
АД> теперь вроде и работаю по этому профилю, и все хотел научиться
АД> кодить и для Линукса, да не знал с чего начать. Так что большое
АД> спасибо.

АД> Позволь задать тебе пару вопросов:

АД> 1) Не собирается ли автор рассматривать в своем повествовании
АД> использование средств IDE (например,
АД> того же KDevelop)? А то не совсем понятно назначение кучи файлов,
АД> генерируемых при создании проекта.

Дело в том, что объем того что хочется рассмотреть умопомрачителен.
Я буду признателен любому подписчику, если он сможет мне с этим помочь.
Например, прежде всего разобраться самому в интересущем его вопросе
и затем написать решение в рассылку.

АД> 2). Изучая первые выпуски рассылки, я написал свою
АД> версию "Hello, World" следующего содержания:

АД> #include <stdio.h>>
АД> #include <iostream.h>
АД> void main ()
АД> {
АД>  cout << "Hello, world" << endl;
АД> }

АД> И скомпилировал ее:
АД> gcc -c 1st.cpp
АД> gcc 1st.o -o result

АД> В результате получил следующие сообщения об ошибках:

АД> 1st.o: In function main':
АД> 1st.o(.text+0xa): undefined reference to endl(ostream &)'
АД> 1st.o(.text+0x17): undefined reference to cout'
АД> 1st.o(.text+0x1c): undefined reference to ostream::operator<<(char const
*)'
АД> 1st.o(.text+0x27): undefined reference to ostream::operator<<(ostream &(*)(ostream
&))'
АД> collect2: ld returned 1 exit status

АД> Подозреваю, что линковщик не видит стандартных библиотек.
АД> Но почему? И где это можно исправить?

После написания первой программы мне пришло сразу два письма типа
"мужик, ты говоришь что используем С++, а проги пишешь на Си".
Да, товарищи... "Хелло Вордл" был на Си, а какая разница ?
Во-первых, почему я пишу С++, а не Си. А стоит ли сегодня говорить
о "умершем" языке. Конечно сейчас полетят помидоры и яйца,
но всеже. Кто из Вас может написать крупный проект на чистом Си,
без использования классов и других прелестей С++ ? Да я думаю
почти никто. Зато использование старых вещей от Си в программах
на С++ никто не отменял. Поэтому я пишу С++, а не Си. Да какая
вообще разница...

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

Открываю секрет :) Программы на С++ компилируются компилятором
не gcc, а с++ и команда компиляции будет такая:

c++ 1st.cpp -o 1st

Все удачно откомпилируется без каких-либо ошибок...
Но откомпилируйте для сравнения программу такую же, но на Си.

#include <stdio.h>

void main(){
 printf("Hello, world\n");
}

Команда:
gcc 2st.cpp -o 2st

Теперь МОЙ АРГУМЕНТ в пользу СИ !!! Сравните размеры файлов...
Размер файла на С++ составляет 13073, а на Си всего 11705.
После прихорашивания этих файлов командой "strip -s 1st 2st"
Их размеры уменьшились до 4288 и 3044 соответственно.

Так что лучше ?! Думаете эта разница слишком мала ?
А вы знаете о том, что для stream классов используются теже
функции printf, fwrite, fread и т.д. ?? Только при этом к
функциям вывода добавляется здоровая оболочка из всяких
перегруженных операторов, конструкторов и деструкторов.
А оно нам надо ?!

А теперь откройте, ну пожалуйста, хоть один исходник под GPL.
Или даже само ядро... Где вы видите использование stream ?
Да, там есть классы, есть куча всего, но там stream не используют.

А все потому, что с файлами намного проще работать простыми функциями
и вывод форматировать из %s, %d, %f , а так Вам придется писать
кучи операторов << и всего остального... А как вы будете работать
с Socket или Pipe с помощью stream-классов ?

Кстати тема работы с файлами и вводом/выводом как раз будет
нашей следующей темой при изучения программирования под Linux.
Да, я соглашусь с Вами, что все это детский лепет и работать
с файлами все умеют с первых курсов институтов, но файловая
система в Unix системах намного сложнее (мощнее), чем в Win/DOS.
А поэтому, для создания более защищенных приложений нам надо
научиться работать с уровнем привилегий для файлов, директорий
и т.д.

А вот мне интересно, кто нибудь умеет получать сам список файлов
в директории по нужной маске ? Или все полагаются на OpenDialog
или имя файла в командной строке введенной пользователем ???
А ведь программа, которая не умеет воспринимать маски файлов -
это программа с большим минусом.

В общем, обо всем этом мы поговорим в ближайшее время, а пока
я очень хочу увидеть в своем e-ящике парочку "тухлых яиц" или
наоборот... Кто на что горазд ?


Количество подписчиков: 650

Выпуск подготовил: Кузин Андрей (dron@mjk.msk.ru)

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное