C++ アサーションがプログラムを緊張させる

1. 背景

アサーションはめったに使われないし、重大な問題はないだろうが、
意味からすると空であるかの判定など非常に必要で、プログラムを癇癪にさせる、いやもうやめろ、というかこれだけだはい、プログラムは間違いを犯しません。エラーが発生してプログラムがまだ実行されている場合は、さらに大きなエラーが発生します。このとき、プログラムは怒りを感じて終了することを直接選択します。これが最良の選択です。これが主張の意味です

1.1 具体的な使い方は以下の通りです。

アサート、中国語ではアサーションと翻訳されますが、これは関数ではなくマクロ定義であることに注意してください。
C++ では、assert を使用するには、cassert ヘッダー ファイルをインクルードすることができ、cassert は最終的にassert.h を参照します。
Assertの機能は他の言語と同様で、条件でエラーが返された場合はコードを終了し、ソースファイル、エラーコード、行番号を出力します。

1.2 使用上の注意

プログラミングにおけるその役割は、アサーションを使用して不可能なことを防ぐことであり、これがアサーションの意味です。
「もちろんそんなことは起こりえない」と思った場合は、コードを追加してこれを確認してください。
実際の処理の代わりにアサーションを使用しないでください。アサーションは、パラメーターを NULL にすることはできない、またはそうである必要があることが理解できるなど、起こり得ないことをチェックします。

アサートは例外を処理するためではなく、明らかな間違いを避けるためのものです。エラーと例外は同じではありません。エラーは発生すべきではなく、例外は避けられません。C言語の例外は条件判断によって処理できますし、他の言語にも独自の例外処理機構があります。

Assert を使用する場合の非常に単純なルールは、メソッドまたは関数の先頭で使用することですが、メソッドの途中で使用する場合は、使用するかどうかを慎重に検討する必要があります。この方法の開始時点では機能プロセスは開始されておらず、機能プロセスの実行中に発生する問題はほとんどが異常である。
エラーが発生すると、プログラムは実行を続けることができなくなり、実行を続けるとさらに大きな問題が発生するため、プログラムを終了する必要があります。
異常、つまり、処理できるエラーであれば、プログラムは実行を継続できます。

2 つのインスタンス

 1 #include <cstdio>
  2 #include <cassert>
  3 #include <string.h>
  4 
  5 void func1(char *cName) {
    
    
  6    assert(cName != NULL);
  7    strcpy(cName,"liming");
  8 }  
  9 
 10 int main(int argc, char const *argv[])
 11 {
    
    
 12     char *cName = NULL;
 13     func1(cName);
 14     printf("cName=%s", cName);
 15     
 16     return 0;
 17 }   
 18 

動作状況:

root@mkx:~/learn/assert1# ./assert1 
assert1: assert1.cpp:6: void func1(char*): Assertion `cName != NULL' failed.
已放弃 (核心已转储)
root@mkx:~/learn/assert1# 

3 まとめ

画像.png


簡単に言うと、耐えられないエラーが起きたとき、私は倒れるしかなかったのです。私は短気です。このことから、人間が短気であることは正しいことが分かります。短気は、人を守るためのものです。」、手順は同じです。

おすすめ

転載: blog.csdn.net/maokexu123/article/details/126549023