Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.23;
Скачать: CL | DM;

Вниз

дерективы компилятора   Найти похожие ветки 

 
malyar   (2007-08-31 11:57) [0]

всем привет
народ подскажите дерективу компилятора которая прервет цепь проверок при первом false, как она активируется и деактивируется ?

if (a=1) and(s>100) and(d=0) then......


 
Сергей М. ©   (2007-08-31 11:58) [1]

{$B}


 
malyar   (2007-08-31 12:05) [2]

деректива {$B} моему компилятору не известна :(


 
homm ©   (2007-08-31 12:15) [3]

> [1] Сергей М. ©   (31.08.07 11:58)
> {$B}

Наверное {$B+}


 
malyar   (2007-08-31 12:17) [4]

ok sps


 
Kolan ©   (2007-08-31 12:17) [5]

> как она активируется

По умолчанию


 
Инс ©   (2007-08-31 12:21) [6]


> По умолчанию


У меня есть один модуль, в котором поведение, которое задает {$B+}, обязательно, иначе функция будет работать неправильно. Почему я должен расчитывать на то, что в опциях проекта, который будет использовать мой модуль, эта директива будет включена? Лучше уж я сам ее ручками установлю, так спокойнее будет.


 
homm ©   (2007-08-31 12:36) [7]

> [6] Инс ©   (31.08.07 12:21)

А вообще в опциях проекта есть пимпа хелп, клацай по ней, там есть эти директивы :)


 
Инс ©   (2007-08-31 12:38) [8]


> [7] homm ©   (31.08.07 12:36)

[7] точно мне адресуется? :)


 
homm ©   (2007-08-31 12:41) [9]

> [8] Инс ©   (31.08.07 12:38)

видимо нет :)


 
Kolan ©   (2007-08-31 12:53) [10]

> Почему я должен расчитывать на то

Ну ты еще для верности проверь дважды, мало ли что.
if (a=1) and(s>100) and(d=0) then
 if (a=1) and(s>100) and(d=0) then


Интересно кому може вообще поннадобится отключать это&#133


 
homm ©   (2007-08-31 12:57) [11]

> [10] Kolan ©   (31.08.07 12:53)

Ты не прав ©

Сравнивают не всегда переменные, а иногда и результаты функций, а функции иногда не только возвращают значения, но и еще что-то могут делать, от задачи уже завист.


 
Инс ©   (2007-08-31 12:57) [12]


> Интересно кому може вообще поннадобится отключать это…

Такому же программисту как я, для которого поведение {$B-} либо привычнее, либо принципиально, так как иначе будет работать неверно. На подобных авось, уважаемый, надежный код не построишь. И воздержись от наездов, ты сейчас объективно неправ.


 
Инс ©   (2007-08-31 12:58) [13]


> Сравнивают не всегда переменные, а иногда и результаты функций

Именно.


 
Инс ©   (2007-08-31 13:04) [14]

Дабы не быть голословным, вот пример из моего проекта, где это необходимо:
// Получаем имя пользователя
@GetUserName := GetProcAddress(prov,"kpGetUserName");
 if (not Assigned(GetUserName)) or (not GetUserName(nil,unLen)) then
   Error(rsUserName);


В данном случае, с директивой {$B-} будет происходить AV в случае, если GetUserName = nil.


 
Юрий Зотов ©   (2007-08-31 13:08) [15]

> Инс

С учетом того, что условие может быть включено/выключено в опциях проекта:

{$IFDEF B+}
 {$DEFINE BPlus}
{$ENDIF}

{$B-}
 ... // Критичный код

{$IFDEF BPlus}
 {$UNDEF BPlus}
 {$B+}
{$ENDIF}


 
Kolan ©   (2007-08-31 13:08) [16]

> Сравнивают не всегда переменные, а иногда и результаты функций,
>

Понятное дело.


> В данном случае, с директивой {$B-} будет происходить AV
> в случае, если GetUserName = nil.

Понятно что в подобых случаях будет ошибка.

Непонятно зачем надо собатировать(с пом. ключа) нормальную логику проверок. Я считал её стандартной&#133


 
Leonid Troyanovsky ©   (2007-08-31 13:12) [17]


> Kolan ©   (31.08.07 13:08) [16]

> Непонятно зачем надо собатировать(с пом. ключа) нормальную
> логику проверок. Я считал её стандартной…

Видимо, необходим побочный результат выполнения функций.
Хотя, в общем случае, это не совсем правильно.

--
Regards, LVT.


 
Инс ©   (2007-08-31 13:15) [18]


> В данном случае, с директивой {$B-} будет происходить AV
> в случае, если GetUserName = nil.

Правда наоборот, с директивой $B+ будет AV


> [15] Юрий Зотов ©   (31.08.07 13:08)

Ага. Именно так.


 
homm ©   (2007-08-31 13:18) [19]

> [16] Kolan ©   (31.08.07 13:08)
> Непонятно зачем надо собатировать(с пом. ключа) нормальную
> логику проверок.
Саботировать? Критерий нормальности где?


> [16] Kolan ©   (31.08.07 13:08)
> Я считал её стандартной…
Чьи проблемы?


 
Kolan ©   (2007-08-31 13:19) [20]

> [15] Юрий Зотов ©   (31.08.07 13:08)
> > Инс
>
> С учетом того, что условие может быть включено/выключено
> в опциях проекта:


Вы мне раскажите пожалуйтса,
 у меня тоже бывают участки кода с аналогичными проверками и я всегда думал что это безопасно(то есть я даже не задумывался что тут может быть проблемма). Так что, их все надо обернуть подобной оберткой?


 
Kolan ©   (2007-08-31 13:19) [21]


> Чьи проблемы?

А где иначе?


 
Инс ©   (2007-08-31 13:21) [22]


> А где иначе?

Насколько мне известно, такое поведение стандартно только для паскаля. Возможно ошибаюсь, поправьте.


 
Юрий Зотов ©   (2007-08-31 13:23) [23]

> Kolan ©   (31.08.07 13:19) [20]
> их все надо обернуть подобной оберткой?

Если проект может компилировать кто-то еще кроме Вас, то обязательно.
Если нет - то желательно.


 
Kolan ©   (2007-08-31 13:26) [24]

> Если проект может компилировать кто-то еще кроме Вас, то
> обязательно.

Может проще тогда сделать два if"а ?


 
homm ©   (2007-08-31 13:30) [25]

> [21] Kolan ©   (31.08.07 13:19)
> А где иначе?

Где угодно. Разницу в словах «стандартная» и «по умолчанию» чувствуешь?


 
Юрий Зотов ©   (2007-08-31 13:32) [26]

> Kolan ©   (31.08.07 13:26) [24]

Главное - чтобы код был надежным. Каким способом это сделано - неважно.


 
Kolan ©   (2007-08-31 13:34) [27]

Блин, буду знать теперь&#133


 
Юрий Зотов ©   (2007-08-31 13:36) [28]

> Kolan ©   (31.08.07 13:26) [24]

Из серии "маленькие хитрости от дяди Юры": у меня заготовлены inc-файлы с подобными обертками.Там, где надо, я просто ставлю $I с нужным файлом, это сокращает количество писанины.

:o)


 
Kolan ©   (2007-08-31 13:38) [29]

Сохранил ветку :)


 
Anatoly Podgoretsky ©   (2007-08-31 13:49) [30]

А если это важно, то и писать стоит соответственно
if a=1 then begin
  if s>100 then begin
    if d=0 then begin
      ...
    end;
  end;
end;
И неприятностей от флагов ожидать не надо.
И в отладке удобно, можно поставить  точки останова где нужно.



Страницы: 1 вся ветка

Текущий архив: 2007.09.23;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.022 c
15-1187863283
самовар
2007-08-23 14:01
2007.09.23
Вопрос по php


8-1165654267
iNevil
2006-12-09 11:51
2007.09.23
TColor -> RGB


15-1188245190
WASM
2007-08-28 00:06
2007.09.23
Dict


15-1187937017
БарЛог
2007-08-24 10:30
2007.09.23
Windows, отслеживание изменения конфигурации компьютеров


15-1187845958
Nic
2007-08-23 09:12
2007.09.23
Проблема при закачке по FTP