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

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 717
от 21.04.2007, 21:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 469, Экспертов: 81
В номере:Вопросов: 4, Ответов: 9


Вопрос № 82698: кто нибуть обьясните мне зачем нужен оператор extern(тоесть какие модули им подключяются и зачем это нужно например)поподробней и доступным языком..спасибо...
Вопрос № 82810: Всем здрасьте! Срочно требуются ссылки на ресурсы с подробнейшим описание работы с базами данных, а именно с MsAccess, чтение запись итд итп. Пожалуйста помогите Спасибо....
Вопрос № 82815: Доброе время суток, эксперты. Вся наденжда на вас. Приведите пожалуйста пример работы с mp3 файлом. Везде где я ищу его описание везде только заголовок а тела нету. Мне нужно к примеру написать прогу которая формирует mp3 файл и содержит допустим зву...
Вопрос № 82838: Здраствуйте уважаемые эксперты! Помогите пожалуйста. Делаю курсовую по програмированию. Работаю с потоками данных. Компилятор ругается. Подскажите какую библиотеку подключить, что бы работали seekp(...,ios::...); или seekg(...,ios::...); Вроде библио...

Вопрос № 82.698
кто нибуть обьясните мне зачем нужен оператор extern(тоесть какие модули им подключяются и зачем это нужно например)поподробней и доступным языком..спасибо
Отправлен: 15.04.2007, 20:41
Вопрос задал: Стаховский Валерий Генриковичь (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Allex
Здравствуйте, Стаховский Валерий Генриковичь!

В языках С/С++ нет такого понятия модуля, как, например, в Pascal. Считается, что исходная программа состоит из набора файлов (*.c или *.cpp), которые подаются на вход компилятору. Каждый файл компилируется отдельно, информация из других *.cpp файлов при этом не используется. Результатом компиляции одного файла является объектный файл *.obj. Линковщик из всех *.obj файлов собирает программу (*.exe).

Теперь об extern. Понятное дело, что возникает необходимость использовать в одном файле сущности (переменные, функции), определенные в других файлах. Поэтому кроме определения у таких общих сущностей бывают ещё и объявления, которые как раз и помечаются ключевым словом extern. Объявление говорит о том, что данная сущность определена в каком-то другом файле. Если сущность объявлена, используется, но нигде не определена, все *.cpp файлы скомпилируются, а об ошибке будет сообщение на этапе сборки-линковки.

Если сущность используется в нескольких *.cpp файлах, её требуется объявить в каждом из них. Чтобы не переписывать объявления несколько раз, их выносят в отдельный файл (*h, от слова header, заголовок), а в *.cpp файл вставляют директиву препроцессора #include "file.h" Эта директива означает, что вместо нее должно быть вставлено содержимое файла с указанным именем.

Приложение:

Ответ отправил: Allex (статус: 8-ой класс)
Ответ отправлен: 15.04.2007, 21:30
Оценка за ответ: 5

Отвечает: Корсак Александр Юрьевич
Допустим у нас есть процедура, написанная на асм'е и код основной программы на С.
Тогда, чтобы С использовала процедуру из асм'а, пишем:

// main.cpp
extern "C" asm_procedure(<параметры>);

void main()
{
asm_procedure(1,'aaa',...)
}

//asm_procedure.asm
.model small,c
.stack 100h
.code
PUBLIC asm_procedure;
asm_procedure proc
push bp
mov bp,sp
// код процедуры
pop bp
ret
asm_procedure endp
END

КОМПИЛИМ в obj и далее совместной линковкой в exe
Ответ отправил: Корсак Александр Юрьевич (статус: 1-ый класс)
Ответ отправлен: 16.04.2007, 11:12
Оценка за ответ: 5

Отвечает: kool
Здравствуйте, Стаховский Валерий Генриковичь!
Оператор extern означает, что переменная
будет объявлена и инициализирована в каком либо файле
(или как называется) в каком либо модуле, содержащим текст проги,
и входящим в проект.
Например, в проекте есть два файла 1.cpp и 2.cpp.
В 1.cpp объявлена переменная int x=0;
Эту переменную нужно использовать в тексте проги, кот. нах-ся
в файле 2.cpp.
Тогда в 2.cpp пишем
extern int x;
И используем эту переменную.
Если написать int x;
сам увидишь, что сакажет компилер.
Удачи!

---------
I am.
Ответ отправил: kool (статус: Студент)
Ответ отправлен: 16.04.2007, 18:35
Оценка за ответ: 5

Отвечает: Ilkras
Здравствуйте, Стаховский Валерий Генриковичь!
Здравствуйте, Стаховский Валерий Генриковичь!
этот оператор сообщает компилятору, что данного, перед которым он стоит, не надо искать в данном файле (вместе с инклюдами). В результате компилятор вынесет это имя в отдельную таблицу и уже линкер будет искать где это данное.
Например мы определям extern int a; тем самым мы говорим компайлеру, что не надо выделять 4 байта для хранения этой величины. Эти 4 байта будут выделены в другом модуле. Позднее, при линковке, все наши обращения к этой величине будут переадресованы к реальному месту хранения. Если бы мы не поставили слова extern, то компайлер выделил бы эти 4 байта в текущем модуле. Все наши обращения были бы направлены в эту локальную переменную. Позднее линкер бы дал ошибку, что есть 2 переменные с одним имене
Ответ отправил: Ilkras (статус: 7-ой класс)
Ответ отправлен: 16.04.2007, 23:48
Оценка за ответ: 5


Вопрос № 82.810
Всем здрасьте!
Срочно требуются ссылки на ресурсы с подробнейшим описание работы с базами данных, а именно с MsAccess, чтение запись итд итп. Пожалуйста помогите
Спасибо.
Отправлен: 16.04.2007, 16:48
Вопрос задал: Tatarin (статус: 2-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Olegzp
Здравствуйте, Tatarin!

книги по Ms Access
http://wmate.ru/ebooks/cat56/

книги по с++
http://wmate.ru/ebooks/cat5/

"C++ Builder: Книга рецептов" http://wmate.ru/ebooks/book143.html

C++ Builder в задачах и примерах http://wmate.ru/ebooks/book221.html

можно посмотреть на http://firststeps.ru/
Ответ отправил: Olegzp (статус: 2-ой класс)
Ответ отправлен: 16.04.2007, 19:46
Оценка за ответ: 5
Комментарий оценки:
Иду смотреть.


Вопрос № 82.815
Доброе время суток, эксперты. Вся наденжда на вас. Приведите пожалуйста пример работы с mp3 файлом. Везде где я ищу его описание везде только заголовок а тела нету. Мне нужно к примеру написать прогу которая формирует mp3 файл и содержит допустим звук ноты до или гамму до мажок ну или в общем что-нибудь, какой-нибудь звук. Подскажите .Спасибо.
Отправлен: 16.04.2007, 17:38
Вопрос задал: Александр Михайлович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Sling
Здравствуйте, Александр Михайлович!
В принципе можно. Но дело в том, что сам по себе mp3 не работает с нотами. только со звуками определённой частоты. Для работы с мп3 никаких стандартных библиотек нету (точнее может и есть, но не для редактирования звука, а для изменения, скажем названия трека или других параметров)
С нотами работает формат midi. Причём создать его, если очень нужно, можно даже ручками, изучив документацию или опытным путём :). А потом с помощью каких-нибудь библиотек midi сконвертировать в Guitar Pro.
Возможно, в Сети получится найти написаные кем-нибудь библиотеки для работы с midi (а может даже с mp3, но это маловероятно)

Прошу прощения за отсутствие конкретики в ответе, но самому сталкиваться с подобной проблемой не приходилось.
---------
The fear of blood tends to create fear for the flesh
Ответ отправил: Sling (статус: 3-ий класс)
Ответ отправлен: 16.04.2007, 21:12

Отвечает: Sergijj
Здравствуйте, Александр Михайлович!

MP3 - это 3-я глобальная модификация формата MPEG. Т.е. данные в нём хранятся не в сылом виде, а "упакованы" (с потерями) некоторым образом.

Ссылка на исходники библиотеки mp3 в приложении.
Нужно нажать "Click Here".

Успехов!

Приложение:

---------
Стучитесь! И Вас откопают...

Ответ отправил: Sergijj (статус: 9-ый класс)
Ответ отправлен: 17.04.2007, 09:58


Вопрос № 82.838
Здраствуйте уважаемые эксперты! Помогите пожалуйста. Делаю курсовую по програмированию. Работаю с потоками данных. Компилятор ругается. Подскажите какую библиотеку подключить, что бы работали seekp(...,ios::...); или seekg(...,ios::...); Вроде библиотеки iostream и fstream подключила. А все равно не работает. Помогите!
Отправлен: 16.04.2007, 19:37
Вопрос задал: Xoxotynchuk (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Корсак Александр Юрьевич
Здравствуйте, Xoxotynchuk!

Я не уверен, но может просто:
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
fseekg(...);
...
}
Ответ отправил: Корсак Александр Юрьевич (статус: 1-ый класс)
Ответ отправлен: 17.04.2007, 00:00

Отвечает: kool
Здравствуйте, Xoxotynchuk!
См. приложение.
Компилер вроде не ругается.
Удачи!

Приложение:

---------
I am.

Ответ отправил: kool (статус: Студент)
Ответ отправлен: 17.04.2007, 00:18


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.50 (beta) от 15.04.2007
Яндекс Rambler's Top100

В избранное