-1

いくつかの関数があり、引数を検証したいとします。たとえば、NULLでない場合:

void* myFunction(char* str1, char* str2){
    if(str1==NULL || str2==NULL) return NULL;
    ...
}

私の質問は、標準Cライブラリによって行われるような、優れた低レベル(API)検証と呼ばれるものです。

ありがとう。

4

2 に答える 2

1

C は、自分を吊るすためのロープがたくさんあり、安全ネットがほとんどないということです。Appleの strcpy のこの実装を例に取りますが、それらはすべて非常によく似ています。

char *strcpy(char *s1, const char *s2)
{
    char *s = s1;
    while ((*s++ = *s2++) != 0)
    ;
    return (s1);
}

C は例外の概念を認識していないため、すべてのエラー通知は関数の戻り値を介して行う必要があり、場合によってはグローバル変数 errno を介して行う必要があります。

したがって、標準ライブラリの機能に合わせたい場合は、安全性をほとんど提供する必要はありません。

于 2012-12-06T01:38:00.387 に答える
0

大切なのは「言うことをやる」「やることを言う」ことです。「あなたの言うこと」は明確に説明する必要があります。説明はドキュメントに記載する必要がありますが、コメントまたは関数名またはパラメーター名に記載することもできます。

要件を述べたら、その要件を満たしていることを確認してください。トラップするエラーケースを定義する場合は、呼び出し元がこれを使用errnoまたは別の方法で判断できることを確認してください。

于 2012-12-06T01:42:22.700 に答える