Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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


Интересно кому може вообще поннадобится отключать это&#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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.041 c
2-1188472951
@!!ex
2007-08-30 15:22
2007.09.23
AV при обработке MM таймера.


2-1188462080
Kolan
2007-08-30 12:21
2007.09.23
Динамическая вставка пунктов меню в «нужные» места, как?


2-1188310061
sinoptikmoscow
2007-08-28 18:07
2007.09.23
сравнение строк


2-1188476570
MZ
2007-08-30 16:22
2007.09.23
SQL-запрос


2-1187166562
DevilDevil
2007-08-15 12:29
2007.09.23
лимит стека





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский