c assert assertion handling c with examples
Овај водич за Ц ++ за одобравање баца светло на тврдње у Ц ++-у које су изјаве за тестирање претпоставки у програму које је израдио програмер:
врста тестирања у развоју софтвера
У програму Ц ++ обично претпостављамо да програм попут индекса низа треба да буде већи од нуле.
Када се ове претпоставке обистине, програм покреће казну, али када те претпоставке постану нетачне, програм се не завршава нормално.
=> Посетите овде за комплетан курс за стручњаке на Ц ++.
Шта ћете научити:
Тврдње у језику Ц ++
Тврдња је изјава на језику Ц ++ која тестира стање попут горе објашњеног. Ако је услов тачан, програм се наставља нормално, а ако је услов нетачан, програм се прекида и приказује порука о грешци.
Тврдњу можемо пружити помоћу макроа претпроцесора ассерт.
Са целим бројем миИнт можемо на следећи начин прогласити тврдњу да миИнт треба да буде> 0.
assert (myInt > 0);
Претпоставимо да је наведена вредност миИнт -1, стога тврдња не успева када компајлер наиђе на горњу изјаву јер је миИнт вредност -1. Једном када тврдња не успе, издаје се порука која наводи неважећу тврдњу, заједно са именом и бројем програма и програм се прекида.
Општи прототип потврде је следећи:
потврдити (услов) где је стање => израз скаларног типа
Тврдња је макро претпроцесора који се користи за процену условног израза. Ако условни израз процени као нетачно, програм се прекида након приказивања поруке о грешци. Порука о грешци обично се састоји од неуспешног условног израза, имена датотеке кода и броја реда потврде.
Тако ћемо сазнати где се проблем појавио, као и који се проблем појавио у коду. Стога коришћење тврдњи чини отклањање грешака ефикаснијим.
Заглавље Ц ++< цассерт > садржи функцију потврде. Углавном користимо функцију ассерт у коду да бисмо проверили да ли су параметри прослеђени функцији важећи, да бисмо проверили повратну вредност функције или да бисмо између осталог проверили границе низа.
Основни пример тврдње Ц ++.
#include #include using namespace std; void display_number(int* myInt) { assert (myInt!=NULL); cout<<'myInt contains value' << ' = '<<*myInt< Излаз:

У горе наведеном програму користили смо позив за потврду који садржи израз (миИнт! = НУЛЛ) у функцији дисплаи_нумбер. Прво у главној функцији преносимо показивачку променљиву сецонд_птр која садржи адресу променљиве миптр. Када се упути овај позив, тврдња је тачна. Стога је извршавање програма нормално и вредност се приказује.
У другом позиву на дисплаи_нумбер прослеђујемо нулти показивач чинећи тако ассерт фалсе. Дакле, када се упути други позив, приказује се порука са тврдњом о неуспеху, као што је приказано у излазу.
Онемогућавање тврдњи помоћу НДЕБУГ-а
Када користимо тврдње, оне се проверавају током извођења. Тврдње чине отклањање грешака ефикасним, али треба пазити да се тврдње не укључују у верзију издања апликације. То је зато што знамо да када објавимо апликацију, то радимо само када смо сигурни да је апликација темељно тестирана.
Зато морамо да онемогућимо све тврдње када објавимо софтвер. Тврдње у програму можемо онемогућити помоћу НДЕБУГ макроа. Коришћење НДЕБУГ макроа у програму онемогућава све позиве за потврђивање.
У програм можемо да уврстимо доњу линију да онемогућимо све изјаве за потврђивање.
#define NDEBUG
Следење програма Ц ++ показује како се програм понаша када се коментарише НДЕБУГ, као и када је НДЕБУГ активан.
# 1) НДЕБУГ је наведен, али коментарисан.
#include // uncomment to disable assert() //#define NDEBUG #include using namespace std; int main() { assert(2+2==3+1); cout << 'Expression valid...Execution continues.
'; assert(2+2==1+1); cout << 'Asset disabled...execution continuous with invalid expression
'; }
Излаз:
како покренути .јар датотеке на Виндовс 10

У овом програму смо навели изјаву #дефине НДЕБУГ, али се коментарише. То значи да је изјава ассерт активна. Дакле, када се програм изврши, други позив за потврду враћа се фалсе и порука о грешци бљеска и програм се прекида.
# 2) НДЕБУГ је активан.
#include // uncomment: assert() disabled #define NDEBUG #include using namespace std; int main() { assert(2+2==3+1); cout << 'Expression valid...Execution continues.
'; assert(2+2==1+1); cout << 'Assert disabled...execution continuous with invalid expression
'; }
Излаз:

У овом програму смо коментарисали макро НДЕБУГ. Сада када извршавамо програм, изјаве за потврду више нису активне. Отуда програм наставља своје нормално извршавање чак и када је други услов у изјави ассерт нетачан.
Стога смо, коментаришући ред #дефине НДЕБУГ, онемогућили наредбе ассерт у програму.
Утврдите и статиц_ассерт
Тврдња коју смо до сада видели извршава се у време извођења. Ц ++ подржава још један облик тврђења познат као статиц_ассерт и врши проверу тврдњи током времена компајлирања. Присутан је од Ц ++ 11.
Статиц_ассерт има следећу општу синтаксу.
static_assert (bool_constexpr, message)
Овде је боол_цонстекпр => цКонтекстуално конвертовани константни израз типа боол.
Порука => Низ који ће се појавити као порука о грешци ако је боол_цонстекпр нетачан.
Дакле, ако боол_цонстекпр процени на тачно, програм се одвија нормално. Ако боол_цонстекпр процени на фалсе, издаје се грешка компајлера.
Програм у наставку приказује употребу статиц_ассерт у програму Ц ++.
#include #include using namespace std; int main() { assert(2+2==3+1); static_assert(2+2==3+1, '2+2 = 3+1'); cout << 'Expression valid...Execution continues.
'; assert(2+2==1+1); static_assert(2+2==1+1, '2+2 != 1+1'); cout << 'Assert disabled...execution continuous with invalid expression
'; }
Излаз:

У горенаведеном програму обезбедили смо статиц_ассерт са изразом и поруком. Када не успе, издаје се грешка компајлера као што је приказано у излазу.
Често постављана питања
П # 1) Шта је Ассерт у Ц ++-у?
Одговор: Тврдња у језику Ц ++ је унапред дефинисани макро помоћу којег можемо да тестирамо одређене претпоставке постављене у програму. Када је условни израз у изјави за потврду постављен на тачно, програм се наставља нормално. Али када је израз нетачан, издаје се порука о грешци и програм се прекида.
П # 2) Шта је статиц_ассерт?
Одговор: Статиц_ассерт се процењује у време компајлирања у односу на наредбу ассерт () која се процењује у време извођења.
Статиц_ассерт је уграђен у Ц ++ од Ц ++ 11 надаље. Условни израз и порука требају бити приказани као аргументи. Када се стање оцени као нетачно, издаје се грешка компајлера и приказује се порука. Програм се затим прекида.
П # 3) Која је сврха макроа ассерт ()?
Одговор: Макро Ассерт () користи се за тестирање услова или претпоставки који не би требало да се јављају у програму. На пример, индекс низа увек треба да буде> 0. Друга претпоставка може бити 2 + 2 == 3 + 1.
Дакле, користећи ассерт () можемо тестирати такве претпоставке и док год оне процене као тачне, наш програм ради нормално. Када су нетачни, програм се прекида.
Закључак
У овом упутству смо видели како функционишу наредбе ассерт () у Ц ++. Изјава ассерт () је дефинисана у заглављу. Тврдњу можемо онемогућити помоћу НДЕБУГ макронаредбе. Програмери треба да буду опрезни да се потврда не може користити у производном коду јер се очекује да је производни код темељито тестиран и да не садржи грешке.
Поред наредбе ассерт () Ц ++ 11 такође подржава статиц_ассерт () који се процењује у време компајлирања. Када статиц_ассет () процени на фалсе, издаје се грешка компајлера и програм се прекида.
Тврдње су начин за тестирање претпоставки у програму и проценом условних израза унутар тврдњи можемо темељно тестирати програм и отклањање грешака постаје ефикасније.
које су различите врсте испитивања
=> Овде погледајте СВЕ туторијале за Ц ++.
Препоручено читање
- Водич за руковање изузецима за Ц # са примерима кода
- Примери за утврђивање селена - практичне примене у пројектима
- Структура програма Ц # и основна синтакса са примерима
- Питхон ДатеТиме Водич са примерима
- Изрежи команду у Унику са примерима
- Синтакса наредбе Уник Цат, опције са примерима
- Употреба курсора у МонгоДБ са примерима
- Лс наредба у Унику са примерима