c assert assertion handling c with examples
Този урок за утвърждаване на C ++ хвърля светлина върху твърдения в C ++, които са изявления за тестване на предположенията в програмата, направени от програмиста:
най-добрият външен софтуер за възстановяване на твърд диск
В програма на C ++ обикновено правим предположения в програма като индекс на масив трябва да бъде по-голям от нула.
Когато тези предположения се сбъднат, програмата изпълнява глоба, но когато тези предположения станат неверни, програмата не завършва нормално.
=> Посетете тук за пълния курс на C ++ от експерти.
Какво ще научите:
Твърдения в C ++
Утвърждаването е изявление в C ++, което тества за състояние като описаното по-горе. Ако условието е вярно, програмата продължава нормално и ако условието е невярно, програмата се прекратява и се показва съобщение за грешка.
Можем да предоставим твърдение, като използваме макрос за препроцесор на assert.
С цялото число myInt можем да декларираме твърдение, че myInt трябва да е> 0 по следния начин.
assert (myInt > 0);
Да предположим, че стойността на myInt е -1, следователно твърдението се проваля, когато компилаторът срещне горния израз, тъй като myInt стойността е -1. След като твърдението не успее, се издава съобщение, в което се посочва невалидно твърдение, заедно с името на програмата и номера на реда и програмата се прекратява.
Общият прототип на отстояването е както следва:
твърдя (условие) където условие => израз на скаларен тип
Утвърждаването е макрос на препроцесор, който се използва за оценка на условен израз. Ако условният израз оценява false, тогава програмата се прекратява след показване на съобщението за грешка. Съобщението за грешка обикновено се състои от неуспешен условен израз, име на кодовия файл и номер на реда на твърдение.
По този начин ние опознаваме къде е възникнал проблемът, както и какъв е проблемът, възникнал в кода. Следователно използването на твърдения прави отстраняването на грешки по-ефективно.
Заглавката на C ++< касир > съдържа функционалността за твърдение. Най-често използваме функцията за отстояване в кода, за да проверим дали параметрите, предадени на функция, са валидни, да проверим връщаната стойност на функция или да проверим границите на масива, наред с други неща.
Основен пример за твърдение на C ++.
#include #include using namespace std; void display_number(int* myInt) { assert (myInt!=NULL); cout<<'myInt contains value' << ' = '<<*myInt< Изход:
![Утвърждение на C ++](//myservername.com/img/other/31/c-assert-assertion-handling-c-with-examples-2.png)
В горната програма използвахме извикване за утвърждаване, което съдържа израза (myInt! = NULL) във функцията display_number. Първо в основната функция предаваме указател на променлива second_ptr, който съдържа адреса на променлива myptr. Когато това обаждане е направено, твърдението е вярно. Следователно изпълнението на програмата е нормално и стойността се показва.
Във второто извикване на display_number, ние предаваме нулевия указател, като по този начин assert false. По този начин, когато е направено второто повикване, се показва съобщение за неуспешно твърдение, както е показано в изхода.
Деактивиране на твърдение с NDEBUG
Когато използваме твърдения, те се проверяват по време на изпълнение. Твърденията правят отстраняването на грешки ефективно, но трябва да се внимава да не се включват твърдения в компилацията на изданието на приложението. Това е така, защото знаем, че когато пуснем приложение, го правим само когато сме сигурни, че приложението е тествано щателно.
Затова трябва да деактивираме всички твърдения, когато пуснем софтуера. Можем да деактивираме твърдения в програма, като използваме макроса NDEBUG. Използването на макрос NDEBUG в програма деактивира всички извиквания за заявяване.
Можем да включим ред, даден по-долу в програмата, за да деактивираме всички твърдения за твърдение.
#define NDEBUG
Следването на C ++ програми показва как програмата се държи, когато се коментира NDEBUG, както и когато NDEBUG е активен.
# 1) NDEBUG е посочен, но коментиран.
#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
'; }
Изход:
как да отворите торент файл
![NDEBUG е посочен, но коментиран.](//myservername.com/img/other/31/c-assert-assertion-handling-c-with-examples-3.png)
В тази програма сме посочили оператора #define NDEBUG, но е коментиран. Това означава, че изявлението за твърдение е активно. По този начин, когато програмата се изпълнява, второто извикване за утвърждаване връща false и съобщението за грешка мига и програмата се прекъсва.
# 2) NDEBUG е активен.
#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
'; }
Изход:
![NDEBUG е активен.](//myservername.com/img/other/31/c-assert-assertion-handling-c-with-examples-4.png)
В тази програма коментирахме макроса NDEBUG. Сега, когато изпълняваме програмата, инструкциите за твърдение вече не са активни. Следователно програмата продължава нормалното си изпълнение, дори когато второто условие в изявлението за твърдение е невярно.
По този начин, като коментираме реда #define NDEBUG, деактивирахме инструкциите за твърдение в програмата.
Утвърждаване и static_assert
Твърдението, което видяхме досега, се изпълнява по време на изпълнение. C ++ поддържа още една форма на утвърждаване, известна като static_assert, и извършва проверка на твърдение по време на компилация. Той присъства от C ++ 11.
Static_assert има следния общ синтаксис.
static_assert (bool_constexpr, message)
Тук bool_constexpr => c Контекстуално преобразуван постоянен израз на тип bool.
Съобщение => Низ, който ще се появи като съобщение за грешка, ако bool_constexpr е false.
Така че, ако bool_constexpr оцени като true, програмата продължава нормално. Ако bool_constexpr прецени като false, издава се грешка на компилатора.
Програмата по-долу показва използването на static_assert в програма на C ++.
#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
'; }
Изход:
![static_assert - изход](//myservername.com/img/other/31/c-assert-assertion-handling-c-with-examples-5.png)
В горната програма предоставихме static_assert с израз и съобщение. Когато не успее, се издава грешка на компилатора, както е показано в изхода.
често задавани въпроси
В # 1) Какво е Assert в C ++?
Отговор: Утвърждаването в C ++ е предварително дефиниран макрос, с който можем да тестваме определени предположения, зададени в програмата. Когато условният израз в израз на твърдение е зададен на true, програмата продължава нормално. Но когато изразът е false, се издава съобщение за грешка и програмата се прекратява.
В # 2) Какво е static_assert?
копирайте DVD на твърд диск безплатно
Отговор: Static_assert се оценява по време на компилиране спрямо израза assert (), който се оценява по време на изпълнение.
Static_assert е включен в C ++ от C ++ 11 нататък. Необходим е условният израз и съобщение, които да бъдат показани като аргументи. Когато състоянието се изчисли на false, се издава грешка на компилатора и се показва съобщението. След това програмата се прекратява.
В # 3) Каква е целта на макроса assert ()?
Отговор: Макросът Assert () се използва за тестване на условията или предположенията, които не трябва да се появяват в дадена програма. Например, индексът на масива винаги трябва да бъде> 0. Друго предположение може да бъде 2 + 2 == 3 + 1.
Така че, използвайки assert (), можем да тестваме такива предположения и докато те оценяват на истина, нашата програма работи нормално. Когато са неверни, програмата се прекратява.
Заключение
В този урок видяхме работата на инструкциите assert () в C ++. Операторът assert () е дефиниран в заглавката. Можем да деактивираме утвърждаването с помощта на макроса NDEBUG. Разработчиците трябва да внимават, че отстояването не може да се използва в производствения код, тъй като се очаква производственият код да бъде тестван щателно и да не съдържа грешки.
Освен инструкцията assert () C ++ 11 също така поддържа static_assert (), който се оценява по време на компилация. Когато static_asset () оцени като false, се издава грешка на компилатора и програмата се прекратява.
Твърденията са начин за тестване на предположенията в програмата и чрез оценка на условните изрази вътре в твърдения можем да тестваме програмата задълбочено и отстраняването на грешки става по-ефективно.
=> Проверете ВСИЧКИ уроци за C ++ тук.
Препоръчително четене
- C # Урок за обработка на изключения с примери за кодове
- Примери за твърдение на селен - практически приложения в проекти
- Структура на програмата C # и основен синтаксис с примери
- Урок за Python DateTime с примери
- Изрежете командата в Unix с примери
- Синтаксис на командата Unix Cat, Опции с примери
- Използване на курсора в MongoDB с примери
- Ls Command в Unix с примери