1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
Я поставил пакет win32ada, он создал папку include\win32ada Если написать первой строкой test.gpr with "win32ada", то среда ругается при открытии пакета:
[2011-02-08 16:25:57] C:\Program Files\ADA\projects\TEST\test.gpr:1:06: unknown project file: "win32ada" [2011-02-08 16:25:57] Error while loading project 'C:\Program Files\ADA\projects\TEST\test.gpr'. Loading the default project.
Ну я это убрал. Добавил в test.gpr строчку
for Source_Dirs use ("..\..\include\win32ada\**");
Пишу в test.adb with win32.winuser (вроде все основные функции, типа окно нарисовать итд, там). Компилирую.
gnatlink "C:\Program Files\ADA\projects\TEST\test.ali" -shared-libgcc -g -g -fprofile-generate -o "C:\Program Files\ADA\projects\TEST\test.exe" c:/program files/ada/bin/../libexec/gcc/i686-pc-mingw32/4.3.6/ld.exe: cannot find -lwin32ada collect2: ld returned 1 exit status gnatlink: error when calling C:\Program Files\ADA\bin\gcc.exe gnatmake: *** link failed.
[2011-02-08 16:28:19] process exited with status 4 (elapsed time: 06.26s)
1. От предупреждений я, вроде как, избавился. Правда, при включённой оптимизации ругается на конверсию LPARAM в PRECT. Что делать?
От этого предупреждения нельзя избавляться ни в коем случае (в смысле, глушить его), и просто не обращать внимания - тоже. Это может привести к серьезным проблемам. В частности, в доках на Gnat Pro приведен такой
пример(Показать/Скрыть)
-- Первый модуль package p1 is type int1 is new integer; type int2 is new integer; type a1 is access int1; type a2 is access int2; end p1;
with p1; use p1; package p2 is function to_a2 (Input : a1) return a2; end p2;
-- Второй модуль with Unchecked_Conversion; package body p2 is function to_a2 (Input : a1) return a2 is function to_a2u is new Unchecked_Conversion (a1, a2); begin return to_a2u (Input); end to_a2; end p2;
-- Программа with p2; use p2; with p1; use p1; with Text_IO; use Text_IO; procedure m is v1 : a1 := new int1; v2 : a2 := to_a2 (v1); begin v1.all := 1; v2.all := 0; put_line (int1'image (v1.all)); end;
В режимах -O0 и -O1 этот код печатает 0, в режиме -O2 будет напечатана 1-ца... Разумеется, будет показано и это же самое предупреждение.
Так что тебе надо либо включать pragma No_Strict_Aliasing для типа PRECT, либо в список ключей компиляции добавить -fno-strict-aliasing (я выбираю именно этот вариант), если выбрана оптимизация второго уровня и выше:
(просто допечатай это к списку ключей и пересобери проект, этого достаточно)
Цитата
3. В среде вкладочка Project View полезна, но как сделать так, чтобы она не показывала локальные подпрограммы в одном списке с глобальными, чтобы она иерархию подпрограмм показывала в виде дерева?
Никак. Это не предусмотрено. Задача у этого окна - не показывать, какая функция в какую вложена, а быстро просмотреть, какие сущности (модули, типы, переменные) описаны в файле. Для удобства такого просмотра список сущностей просто сортируется по алфавиту. Ну, или можно озадачиться и самому написать подобное окошечко, в котором будет нужный функционал. На Python-е.
Цитата
5. Напрягает, что навигация по модулям работает только после корректной компиляции проекта.
Это то есть как? Я вот только что взял проект ,который вообще не компилировал на домашней машине, открыл его, и даже до компиляции в нем прекрасно работает навигация по модулям. Хотя, я не знаю, какой ты смысл вкладываешь в понятие навигация. То, что можно в Project View видеть все папки, связанные с проектом, и открыть любой модуль, который находится в одной из этих папок - это факт. Повторяю: еще вообще до компиляции.
Цитата
7. Стиль кода я не правил вообще. И делать это вручную не собираюсь. Есть автоматика для этого?
Естественно. Закрываешь все файлы редактора, заходишь в Tools -> Consoles -> OS Shell, и в полученном окошке набираешь команду gnat pretty -rf F:\Programs\Ada\forum\main.adb (со своим файлом, разумеется). Потом открываешь обработанный файл в редакторе, и смотришь на разницу... Но сначала "потренируйся на кошках" (С), у тебя есть директивы препроцессора #if/#end, я не знаю, как Pretty Printer себя с ними поведет. Без него работает прекрасно: