いくつかの関数があり、引数を検証したいとします。たとえば、NULLでない場合:
void* myFunction(char* str1, char* str2){
if(str1==NULL || str2==NULL) return NULL;
...
}
私の質問は、標準Cライブラリによって行われるような、優れた低レベル(API)検証と呼ばれるものです。
ありがとう。
いくつかの関数があり、引数を検証したいとします。たとえば、NULLでない場合:
void* myFunction(char* str1, char* str2){
if(str1==NULL || str2==NULL) return NULL;
...
}
私の質問は、標準Cライブラリによって行われるような、優れた低レベル(API)検証と呼ばれるものです。
ありがとう。
C は、自分を吊るすためのロープがたくさんあり、安全ネットがほとんどないということです。Appleの strcpy のこの実装を例に取りますが、それらはすべて非常によく似ています。
char *strcpy(char *s1, const char *s2)
{
char *s = s1;
while ((*s++ = *s2++) != 0)
;
return (s1);
}
C は例外の概念を認識していないため、すべてのエラー通知は関数の戻り値を介して行う必要があり、場合によってはグローバル変数 errno を介して行う必要があります。
したがって、標準ライブラリの機能に合わせたい場合は、安全性をほとんど提供する必要はありません。
大切なのは「言うことをやる」「やることを言う」ことです。「あなたの言うこと」は明確に説明する必要があります。説明はドキュメントに記載する必要がありますが、コメントまたは関数名またはパラメーター名に記載することもできます。
要件を述べたら、その要件を満たしていることを確認してください。トラップするエラーケースを定義する場合は、呼び出し元がこれを使用errno
または別の方法で判断できることを確認してください。