Форум: "Начинающим";
Текущий архив: 2007.09.23;
Скачать: [xml.tar.bz2];
Вниздерективы компилятора Найти похожие ветки
← →
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
Интересно кому може вообще поннадобится отключать это…
← →
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.
Понятно что в подобых случаях будет ошибка.
Непонятно зачем надо собатировать(с пом. ключа) нормальную логику проверок. Я считал её стандартной…
← →
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]Блин, буду знать теперь…
← →
Юрий Зотов © (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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.046 c