91981


提示コードの`if (scene ==
nullptr)`内部の`assert(0)`ですがこれは`assert`の使い方として正しいのでしょうか？エラーの取り方として`printf()`と`assert`と`テキストファイルにログ`を取るという三つのやり方が主だと思うのですがデータがありません等の場合はどんな形で取るのが正解なのでしょうか？

##### 考えたこと

この場合だとエラーが起きた時に動作を停止してほしいので`assert()`にすることにしたのですが

##### 知りたいこと

`assert()`の正しい使い方が知りたい。

##### 参考サイト

1,https://c.keicode.com/lib/assert-when-you-should-use.php  
2,https://cpprefjp.github.io/reference/cassert/assert.html  
3,http://marupeke296.com/DBG_No2_Assert.html

[code]

    /*############################################################################################
    # モデル　ロード
    ############################################################################################*/
    std::unique_ptr<FrameWork::Model> FrameWork::Resource::LoadModel(const std::string p)
    {
        path = p + "/";
        std::string modelName = "/model.fbx";
        std::string pa = path + modelName;
    
        Assimp::Importer importer;
        const aiScene* scene = importer.ReadFile(path + modelName, aiProcess_CalcTangentSpace | aiProcess_Triangulate | aiProcess_JoinIdenticalVertices | aiProcess_SortByPType | aiProcess_Triangulate | aiProcess_FlipUVs);
    
        if (scene == nullptr)
        {
    
            std::cout << "ロード出来ません:　" << path + modelName << std::endl;
            assert(0);
        }
    
        ProcessNode(scene->mRootNode, scene);
    
    
        return std::make_unique<Model>(meshes,path);
    }
    
    
[/code]


CC BY-SA 4.0
2022-11-04T02:27:29.480
91980
2022-11-04T03:02:09.373
2022-11-04T02:32:01.383
55177
55177
question
c++
アセットロードにおけるassert()の正しい使い方が知りたい


[`assert`](https://cpprefjp.github.io/reference/cassert/assert.html)は

>
> このマクロは、直前の`<cassert>`（または`<assert.h>`）のインクルード時点でマクロ`NDEBUG`が定義されていなかった場合に有効となり、`NDEBUG`が定義されていた場合は無効となる。

と説明されているように、条件によって実行が継続されます。つまり、その状態を満たしていなくても処理が継続できる必要があります。  
今回の場合、ファイルオープンできていない以上、明確に終了するべきかと思います。

この場合、素直に例外を投げてはどうでしょうか？
`catch`して回復処理していれば実行が継続されますし、`catch`されていなければプログラムは停止します。


CC BY-SA 4.0
2022-11-04T03:02:09.373
91981
2022-11-04T03:02:09.373
4236
91980
answer