Topic :
在同一項目組應明確規定對界面function參數的合法性檢查應由function的調用者負責還是由界面function本身負責,default是由界面function本身負責。一般在界面function內使用ASSERT()來檢查。
Description :
對於模塊間界面function的參數的合法性檢查這一問題,往往有兩個極端現象,即:要么是調用者和被調用者對參數均不作合法性檢查,結果就遺漏了合法性檢查這一必要的處理procedure,造成問題隱患;要么就是調用者和被調用者均對參數進行合法性檢查,這種情況雖不會造成問題,但產生了冗餘程式碼,降低了效率。
Example: /* #include<stdio.h> #define assert(expr) \ int my_assert(char* expr, char* file, int line) { exit(1); void bar(char *bar_str){ void foo(){ int main(int argc, char* argv[]){ 這個 sample 解釋了 assert的使用。
* sample-72
*
* This sample shows how to use assert function,
* and where is placed better.
*
*/
#include<stdlib.h>
#include<string.h>
((void) ((expr) || \
my_assert(__STRING(expr), __FILE__, __LINE__)))
printf("Assertion failed (assert(%s)) in %s:%i\n", expr, file, line);
return (1);
}
char str[20];
assert(bar_str); // use assert function to avoid unpredictable result
strcpy(str, bar_str);
printf("str : %s\n", str);
}
char *str = NULL;
// you can check "str" before call bar()
// but it may cause redundant code
bar(str);
}
foo();
return 0;
}
沒有留言:
張貼留言