Важная информация
Показано с 1 по 6 из 6

Тема: проекты на FbEdit (вопрос)

  1. #1 проекты на FbEdit (вопрос) 
    Разбирающийся
    Регистрация
    13.10.2013
    Сообщений
    53
    Сказал(а) спасибо
    52
    Поблагодарили 34 раз(а) в 22 сообщениях
    Здравствуйте.

    Недавно осознал, что IDE FbEdit умеет создавать проекты. Будучи весьма наивным, я думал, что они устроены примерно
    как в MS Visual Studio, так что написал следующее:
    Код freebasic:
    'source.bas:
    #include "header.bas"
    print pr()
    sleep
    '------------------
    'header.bas:
    declare function pr() as integer
    '------------------
    'subs.bas:
    function pr() as integer
      return -7
    end function
    На что заругался линковщик: "FbTemp.o:fake.text+0x25): undefined reference to `PR@0'"
    Еще почему-то быстрый запуск работает странно.

    Собственно, вопрос:
    Я что-то делаю не так или проекты здесь используются иначе? Или использую слишком старую версию IDE?
    Ответить с цитированием  
     

  2. #2  
    Профи
    Регистрация
    09.11.2013
    Сообщений
    234
    Сказал(а) спасибо
    17
    Поблагодарили 76 раз(а) в 51 сообщениях
    Заголовочные файлы во free basic имеют расширение *.bi (типа basic include). В папке Samples есть примеры проектов для FbEdit
    Ответить с цитированием  
     

  3. #3  
    Профи Аватар для stabud
    Регистрация
    05.01.2013
    Сообщений
    768
    Сказал(а) спасибо
    319
    Поблагодарили 339 раз(а) в 268 сообщениях
    Записей в блоге
    6
    Цитата Сообщение от ur_naz Посмотреть сообщение
    Заголовочные файлы во free basic имеют расширение *.bi (типа basic include). В папке Samples есть примеры проектов для FbEdit
    Это абсолютно неважно, можно любое расширение использовать, главное в Include его правильно указать. Однако если проект будет опенсурсным , то да... желательно придерживаться привычной идеологии: файлы проекта (модули) идут с расширением .bas, а заголовочные с расширением .bi

    Цитата Сообщение от Good.Morning Посмотреть сообщение
    Я что-то делаю не так или проекты здесь используются иначе? Или использую слишком старую версию IDE?
    Что-то не так делаешь!

    1) Создаешь новый проект. Пока галочки в "создании файлов" никаких не ставь, пусть будет по умолчанию. Галочки в "Создание папок" можешь указать, а можешь не указывать, но тогда все будет в одной папке. Если все же тебе нравится, чтобы файлы лежали в нужных подпапках, тогда укажи какие тебе нужны будут папки (Mod , Inc , Res ) Mod - модули, Inc для включаемых файлов, Res для других файлов (иконки , звуки и пр.).
    2) Заходишь в меню "Проект->Добавить новый->модуль..." и сохраняешь его в папке Mod под нужным тебе именем. Записываешь в него:
    Basic Code:
    1. function pr() as integer
    2.   return -7
    3. end function

    3) Заходишь в меню "Проект->Добавить новый->Файл..." и создаешь в папке Inc заголовочный файл с нужным тебе именем. И в него пишешь:
    Basic Code:
    1. declare function pr() as integer


    4) Пишешь в основном файле (он называется также , как и имя проекта) :

    Basic Code:
    1. #include "Inc\header.bi"
    2. print pr()
    3. sleep


    5) Компилируешь проект или просто для теста нажимаешь "Быстрый запуск".
    Ответить с цитированием  
     

  4. 2 пользователя(ей) сказали cпасибо:

    >Quiet Snow< (27.08.2015), Good.Morning (27.08.2015)

  5. #4  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,846
    Сказал(а) спасибо
    1,816
    Поблагодарили 945 раз(а) в 807 сообщениях
    Записей в блоге
    1
    Я что-то делаю не так или проекты здесь используются иначе? Или использую слишком старую версию IDE?
    FB это консольный компилятор. Сама IDE это лишь обёртка, которая в соответствии с выбранными
    настройками проекта формирует командную строку и вызывает компилятор, т.е. пути к *.Bas, *.bi, *.o,*.a
    файлам и параметры компиляции.

    FreeBasic Code:
    1. 'source.bas:
    2. #include "header.bas"
    3. print pr()
    4. sleep
    5. '------------------
    6. 'header.bas:
    7. declare function pr() as integer
    8. '------------------
    9. 'subs.bas:
    10. function pr() as integer
    11.   return -7
    12. end function


    Не вижу инклуда для Subs.Bas.

    Вообще классика процедурного кодинга подразумевает объявлять прототип функции в случае, когда
    функция вызывается ранее непосредственного размещения тела функции. Если же вызов происходит
    после тела функции, то прототип можно не ставить. Однако прототип ставить тупо удобно, т.к. сразу
    видно какие функции в программе есть. Можно вынести прототипы в один модуль, тела функции в другой
    модуль, а код соотв. в третий. Компилятор перед компиляцией создаёт единый исходник в памяти из всех
    includ-ов, после чего уже приступает к компиляции.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  6. #5  
    Разбирающийся
    Регистрация
    13.10.2013
    Сообщений
    53
    Сказал(а) спасибо
    52
    Поблагодарили 34 раз(а) в 22 сообщениях
    stabud, большое Вам спасибо.
    Цитата Сообщение от stabud Посмотреть сообщение
    Заходишь в меню "Проект->Добавить новый->модуль..."
    Т.е., как я понял, функции/процедуры ищутся только в модулях?

    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    FB это консольный компилятор.
    Поэтому я специально в теме сказал ключевые слова "FbEdit" и "Проекты" =)
    Ответить с цитированием  
     

  7. #6  
    Профи Аватар для stabud
    Регистрация
    05.01.2013
    Сообщений
    768
    Сказал(а) спасибо
    319
    Поблагодарили 339 раз(а) в 268 сообщениях
    Записей в блоге
    6
    Цитата Сообщение от Good.Morning Посмотреть сообщение
    Т.е., как я понял, функции/процедуры ищутся только в модулях?
    Ну почему же? Процедуры и функции ищутся во всех файлах , которые есть в проекте. Если кому-то удобно писать проект, разбивая его на несколько частей с помощью #include , то почему бы это не делать? Просто после обработки препроцессором, все эти подключаемые файлы соединятся в один .bas файл и далее в один объектный файл и еще далее в один конечный файл (exe, dll...). В случае же разбивки на модули, каждый модуль будет создан в отдельный объектный файл, со своими областями видимости, а уж потом эти отдельные объекты соединятся в один конечный файл (exe, dll...). Например в случае с модулями, можно в каждом модуле создавать свои глобальные переменные , функции, массивы и пр. которые видны только в своем модуле. То есть в модулях 1 и 2 мы создаем свои переменные с именем szVavue, и эти переменные не пересекаются. Если же проект будет разбит на несколько файлов и они будут соединены с помощью #include , то мы сможем создать только одну глобальную переменную с именем szVavue в одном из файлов (неважно в главном или подключаемых файлах). Так же и с процедурами\функциями. Важно понимать, что #include - это просто макрос, который вставит на это место содержимое файла, который прописан у него в параметре. В случае же разбивания на модули, все файлы автономны. Однако не мешает при желании делать общие переменные или функции между модулями. Модульная технология хороша, когда размер проекта немаленький , да и сам проект можно логически разбить на составляющие, например: 1 модуль - загрузка изображений, 2 модуль - работа с печатью, 3 модуль - вывод графики и т. д. В этом случае модульная технология может значительно сократить время , если придется делать что-то подобное в других проектах. Там все просто , берешь нужный модуль (или объектный файл) и вставляешь его в другой проект. А вот в случае с разбиванием на отдельные заинклуденные файлы, как бы не старался, все равно чаще всего получается каша.
    Последний раз редактировалось stabud; 27.08.2015 в 23:22.
    Ответить с цитированием  
     

  8. 2 пользователя(ей) сказали cпасибо:

    >Quiet Snow< (28.08.2015), Good.Morning (28.08.2015)

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Команда профессионалов ищет интересные проекты
    от Александр Арбузов в разделе Архив
    Ответов: 1
    Последнее сообщение: 04.04.2014, 23:53
  2. Команда профессионалов ищет интересные проекты
    от Александр Арбузов в разделе Изготовление сайтов и дизайн
    Ответов: 2
    Последнее сообщение: 11.01.2014, 13:57
  3. Команда профессионалов ищет проекты
    от Oleg в разделе Изготовление сайтов и дизайн
    Ответов: 2
    Последнее сообщение: 21.08.2013, 16:25
  4. Команда ищет проекты
    от Oleg в разделе Изготовление сайтов и дизайн
    Ответов: 0
    Последнее сообщение: 21.08.2013, 14:05
  5. Ответов: 0
    Последнее сообщение: 25.03.2013, 10:06
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •