Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/14: Рейтинг темы: голосов - 14, средняя оценка - 4.57
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131
1

условная компиляция

29.04.2012, 14:56. Показов 2630. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Procedure SetPort(p:word;b:byte);stdcall;
{$ifdef RWPort}
var
  len: cardinal;
  written: cardinal;
{$endif}
begin
 {$ifdef RWPort}
  len:= 1;
  WriteFile(hport,b,len,written,nil);
 {$else}
 asm
  push edx
  push eax
  mov dx,p
  mov al,b
  out dx,al
  pop  eax
  pop  edx
 end;
И что туту значит условная компиляция.
Заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.04.2012, 14:56
Ответы с готовыми решениями:

Что такое условная компиляция
хотелось бы разобраться в вопросе "Что такое условная компиляция,как помогает созданию...

Пропускается условная конструкция
function StartWith (str:string; startStr:string):boolean; var i,n,k:integer; begin...

Без условная переадресация
Помогите пожалуйста сделать без условную переадресацию. Принцип следующий: перед тем как записать...

Условная компиляция
Здравстуйте Если задача в зависимости от разрядности компилируемого приложения, подключить разные...

9
1 / 1 / 7
Регистрация: 28.06.2011
Сообщений: 342
29.04.2012, 15:31 2
Да, Светлана Семененко отдыхает !..
Это все равно, что спрашивать: "А что делает этот код:
if A = 0 then
B := 1
else
B := -1;
"
0
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131
29.04.2012, 20:47  [ТС] 3
Цитата Сообщение от vpanasenko
Да, Светлана Семененко отдыхает !..
Это все равно, что спрашивать: "А что делает этот код:
if A = 0 then
B := 1
else
B := -1;
"
Прикольно!
0
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131
29.04.2012, 21:00  [ТС] 4
Ответили ....
Здесь условная компиляция значит, что если, например, лексема RWPort определена (с помощью {$define RWPort}), то код между директивами {$ifdef RWPort} и {$endif} скомпилируется, а если нет - значит в программе он будет отсутствовать, как буддто его и не было вовсе. Про {$else} ты наверное сам догадаешься. А ассемблерный код делает вот что:
1. сохраняет в стеке содержимое регистров edx и eax
2. помещает в регистр dx (версия edx для 16 бит) значение p, в регистр al (eax для 8 бит)
3. отправляет на порт, 16-битное значение которого находится в регистре dx, значение, находящееся в регистре al.

восстанавливает значения регистров edx и eax. Ассемблер надо учить, батенька!!! Да и теорию по Delphi тоже. (Я об условной компиляции и методах отладки приложений)
0
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131
29.04.2012, 23:51  [ТС] 5
К примеру кнопка на форме. И код в ней.

procedure TForm1.Button1Click(Sender: TObject);
begin
{$IFDEF debug}
ShowMessage('sdsd');
{$ENDIF}

end;

Что нужно сделать, чтобы ShowMessage('sdsd');
сработало?
Я в этом языке несколько дней.
Не серчайте на меня ответьте пожалуйста.
Куда зайти?
0
1 / 1 / 7
Регистрация: 28.06.2011
Сообщений: 342
30.04.2012, 10:02 6
Я знаю, что такое условная компиляция еще со времен Turbo Pascal. Так, что, не надо ля-ля.
{$DEFINE DEBUG} - все, что нужно для вызова ShowMessage('sdsd'). Точнее, для того, чтобы компилятор включил вызов этой процедуры в код.
0
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131
30.04.2012, 16:50  [ТС] 7
Цитата Сообщение от vpanasenko
Я знаю, что такое условная компиляция еще со времен Turbo Pascal. Так, что, не надо ля-ля.
{$DEFINE DEBUG} - все, что нужно для вызова ShowMessage('sdsd'). Точнее, для того, чтобы компилятор включил вызов этой процедуры в код.
Я русским языком объясняю, что в Dilphi несколько дней. До этого сидел только в Visual Basic VBA поэтому в этом ноль.

Конкретнее можете сказать куда {$DEFINE DEBUG} вставить?
Может в RunParameters?
Может какое-то место в коде?
Ё моё!
0
1 / 1 / 7
Регистрация: 28.06.2011
Сообщений: 342
30.04.2012, 18:13 8
Ну, компилируется код, а не параметры. Термин звучит как "условная компиляция". Я думаю, что в коде.:-))
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
unit
 unit1;
interface
{$DEFINE DEBUG}
тра-та-та
procedure TForm1.Button1Click(Sender: TObject);
begin
{$IFDEF debug}
ShowMessage('sdsd');
{$ENDIF}
 
end;
0
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 131
30.04.2012, 19:25  [ТС] 9
Длин. Всё понятно, только не понятно куда вставить чтобы весь проект принял.
Весь модуль видит:
unit main;
{$DEFINE CLX}


{$IF Defined(CLX)}
ShowMessage('hjkhjkk');
{$ELSE}
ShowMessage('111');
{$IFEND}

А второй модуль уже мохает. Там опять придётся объявлять.
{$DEFINE CLX}

А как объявить для всего проекта?

Заранее спасибо.
0
1 / 1 / 7
Регистрация: 28.06.2011
Сообщений: 342
01.05.2012, 09:51 10
Обычно DEFINE выносят в отдельный файл и включают его В КАЖДЫЙ МОДУЛЬ
unit
unit1;
{$I DEFINE.INC}
а в DEFINE.INC пишем
{$DEFINE DEBUG}
{$DEFINE MY_DEFINE}
{$UNDEF MY_DEFINE1}
Можно еще определить через меню IDE:
Project-Options-Derectory/Conditionals-Conditionals
0
01.05.2012, 09:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.05.2012, 09:51
Помогаю со студенческими работами здесь

Условная компиляция
Не совсем понимаю как это работает. Есть код, написанный под sdk-19. Необходимо создать класс,...

Условная компиляция
Помогите мне понять ,что я делаю не так. Есть программа, которая проверяет введённое пользователем...

Условная компиляция
Вопрос такой. Какие константы или флаги использовать что бы при компиляции в релизе компилировался...

Условная компиляция
как препроцессор с помощью условной компиляции даёт понять компилятору, что часть программы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru