Мне нужно написать спецификацию ACSL для зависимостей функции, которая принимает указатель как входной, и использует его содержимое, когда указатель не равен NULL. Я думаю, что данная спецификация является правильным:Использовать возможно неверный указатель в зависимостях ACSL
/*@ behavior p_null:
assumes p == \null;
assigns \result from \nothing;
behavior p_not_null:
assumes p != \null;
assigns \result from *p;
*/
int f (int * p);
, но я предпочел бы избежать поведения, но я не знаю, если это правильно (и эквивалент):
//@ assigns \result from p, *p;
int f (int * p);
Могу ли я использовать *p
в правой части \from
, даже если p
может быть NULL
?
Я согласен с тем, что должен добавить свойство 'требует', указав, что 'p! = \ Null => \ valid (p)', но меня интересуют только свойства 'assigns'. Благодарю. – Anne