c assert assertion handling c with examples
Aquest tutorial sobre afirmacions de C ++ posa de manifest les afirmacions de C ++ que són declaracions per provar les suposicions del programa fetes pel programador:
quin dels següents no es troba en l'estat de la prova del sistema?
En un programa C ++, normalment fem suposicions en un programa com un índex de matriu que ha de ser superior a zero.
Quan aquestes suposicions es compleixen, el programa s’executa bé, però quan aquestes suposicions es fan falses, el programa no s’acaba amb normalitat.
=> Visiteu aquí el curs complet C ++ d’experts.
Què aprendreu:
Afirmacions en C ++
Un assert és una afirmació de C ++ que prova una condició com l'explicada anteriorment. Si la condició és certa, el programa continua amb normalitat i, si la condició és falsa, el programa finalitza i es mostra un missatge d'error.
Podem proporcionar una afirmació mitjançant una macro de preprocessador d’afirmació.
Amb l’enter myInt, podem declarar una afirmació que diu que myInt hauria de ser> 0 de la següent manera.
assert (myInt > 0);
Suposem que el valor de myInt especificat és -1, per tant, l'afirmació falla quan el compilador troba la sentència anterior, ja que el valor myInt és -1. Un cop l'afirmació falla, s'emet un missatge que afirma l'afirmació no vàlida juntament amb el nom i el número de línia del programa i es finalitza el programa.
Un prototip general d’afirmació és el següent:
afirmar (condició) on condició => expressió de tipus escalar
Un assert és una macro de preprocessador que s'utilitza per avaluar una expressió condicional. Si l'expressió condicional s'avalua com a falsa, el programa s'acaba després de mostrar el missatge d'error. El missatge d'error consisteix normalment en l'expressió condicional fallida, el nom del fitxer de codi i el número de línia de l'assert.
Així, coneixem on s’ha produït el problema i quin és el problema que s’ha produït al codi. Per tant, utilitzar afirmacions fa que la depuració sigui més eficient.
La capçalera C ++< cassert > conté la funcionalitat assert. Utilitzem principalment la funcionalitat assert del codi per comprovar si els paràmetres passats a una funció són vàlids, per comprovar el valor retornat d’una funció o per comprovar els límits de la matriu, entre altres coses.
Exemple bàsic d’afirmació de C ++.
#include #include using namespace std; void display_number(int* myInt) { assert (myInt!=NULL); cout<<'myInt contains value' << ' = '<<*myInt< Sortida:

Al programa anterior, hem utilitzat una trucada assert que conté l'expressió (myInt! = NULL) a la funció display_number. A la funció principal primer, passem una variable punter second_ptr que conté l'adreça de la variable myptr. Quan es fa aquesta trucada, l’afirmació és certa. Per tant, l'execució del programa és normal i es mostra el valor.
A la segona trucada a display_number, passem el punter nul fent així afirmar fals. Així, quan es fa la segona trucada, es mostrarà el missatge fallit en l'afirmació tal com es mostra a la sortida.
Desactivació de l'afirmació amb NDEBUG
Quan fem servir afirmacions, es comproven en temps d'execució. Les afirmacions fan que la depuració sigui eficaç, però s’ha de tenir cura de no incloure les afirmacions a la versió de la versió de l’aplicació. Això es deu al fet que sabem que quan publiquem una aplicació, ho fem només quan estem segurs que l'aplicació es prova a fons.
Per tant, hem de desactivar totes les afirmacions quan publiquem el programari. Podem desactivar les afirmacions en un programa mitjançant la macro NDEBUG. L'ús de la macro NDEBUG en un programa desactiva totes les trucades per afirmar.
Podem incloure una línia que es mostra a continuació al programa per desactivar totes les afirmacions.
#define NDEBUG
Seguir els programes C ++ mostra com es comporta el programa quan es comenta NDEBUG, així com quan NDEBUG està actiu.
# 1) NDEBUG especificat però comentat.
#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
'; }
Sortida:
com obrir un fitxer torrent

En aquest programa, hem especificat la sentència #define NDEBUG però hem comentat. Això significa que la declaració assert està activa. Així, quan s’executa el programa, la segona trucada per afirmar torna falsa i apareix un missatge d’error i el programa s’aborta.
# 2) NDEBUG està actiu.
#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
'; }
Sortida:

En aquest programa, hem descomentat la macro NDEBUG. Ara, quan executem el programa, les sentències assert ja no estan actives. Per tant, el programa continua la seva execució normal fins i tot quan la segona condició de la declaració assert és falsa.
Per tant, en fer un comentari a la línia #define NDEBUG, hem desactivat les afirmacions assert del programa.
Afirmació i afirmació estàtica
L'afirmació que hem vist fins ara s'executa en temps d'execució. C ++ admet una altra forma d’assert coneguda com static_assert i realitza una comprovació d’assercions en temps de compilació. Està present des de C ++ 11.
Un static_assert té la sintaxi general següent.
static_assert (bool_constexpr, message)
Aquí bool_constexpr => cExpressió constant convertida contextualment del tipus bool.
Missatge => Cadena que apareixerà com a missatge d'error si bool_constexpr és fals.
Per tant, si bool_constexpr avalua com a vertader, el programa continua amb normalitat. Si bool_constexpr avalua com a fals, es produeix un error del compilador.
El programa següent mostra l'ús de static_assert en un programa 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
'; }
Sortida:

Al programa anterior, hem proporcionat static_assert amb una expressió i un missatge. Quan falla, s'emet un error del compilador tal com es mostra a la sortida.
Preguntes freqüents
P # 1) Què és Assert a C ++?
Resposta: Un assert en C ++ és una macro predefinida mitjançant la qual podem provar certes suposicions establertes al programa. Quan l'expressió condicional d'una declaració assert s'estableix en true, el programa continua amb normalitat. Però quan l'expressió és falsa, s'emet un missatge d'error i es finalitza el programa.
Q # 2) Què és static_assert?
Resposta: Static_assert s'avalua en temps de compilació en comparació amb la sentència assert () que s'avalua en temps d'execució.
Static_assert s'ha incorporat a C ++ a partir de C ++ 11. Cal mostrar l’expressió condicional i un missatge com a arguments. Quan la condició és falsa, s'emet un error del compilador i es mostra el missatge. A continuació, s'acaba el programa.
què és un fitxer 7z?
P # 3) Quin és el propòsit de la macro assert ()?
Resposta: La macro Assert () s'utilitza per provar les condicions o suposicions que no haurien de produir-se en un programa. Per exemple, l’índex de matriu sempre ha de ser> 0. Un altre supòsit pot ser 2 + 2 == 3 + 1.
Per tant, mitjançant assert () podem provar aquests supòsits i, sempre que s’avaluïn com a cert, el nostre programa s’executa normalment. Quan són falses, el programa s’acaba.
Conclusió
En aquest tutorial, hem vist el funcionament de les sentències assert () a C ++. La sentència assert () es defineix a la capçalera. Podem desactivar l’assert mitjançant la macro NDEBUG. Els desenvolupadors han de tenir cura de que assert no es pugui fer servir al codi de producció, ja que s'espera que el codi de producció es provi a fons i no contingui errors.
A part de la declaració assert (), C ++ 11 també admet static_assert () que s'avalua en el moment de la compilació. Quan static_asset () s’avalua com a fals, s’emet un error del compilador i el programa es finalitza.
Les afirmacions són una manera de provar els supòsits del programa i, avaluant les expressions condicionals de les afirmacions, podem provar el programa a fons i la depuració esdevé més eficient.
=> Consulteu TOTS els tutorials de C ++ aquí.
Lectura recomanada
- Tutorial de maneig d'excepcions C # amb exemples de codi
- Exemples d’assercions de seleni: aplicacions pràctiques en projectes
- Estructura del programa C # i sintaxi bàsica amb exemples
- Tutorial de Python DateTime amb exemples
- Talla l'ordre a Unix amb exemples
- Sintaxi d'ordres Unix Cat, opcions amb exemples
- Ús del cursor a MongoDB amb exemples
- Ordre Ls a Unix amb exemples