e47.c
プロトタイプ宣言と異なる





/*###12 [cc] 警告: CBC:e47: プロトタイプ宣言と異なります。第N引数%%%*/
charにはunsignedを付けろと先輩が言ったので、
僕は文字列にもunsignedを付けているよ
unsigned char ucp[] = "文字列" ;
文字列にunsignedをつけたら、ソースはキャストだらけになる。
charにはunsignedを付けろと先輩が言ったのはここ。
struct とっても大きな構造体 {
unsigned char 符号拡張の問題コリゴリ変数 ;
}
/* 修正前 */
unsigned char ucp[] = "文字列" ;
int ret = strcmp(ucp,cp) ; /* LOOK1 */
FILE * fp1 = fopen(cp,"r") ;
fclose(cp) ; /* LOOK2 */
/* 修正例 */
char ucp[] = "文字列" ;
int ret = strcmp(ucp,cp) ;
FILE * fp1 = fopen(cp,"r") ;
fclose() ;
解説
LOOK1:『char *』を渡す所で
『unsigned char *』とする位は
許せるのですが、
strcmp(ucp,cp)
→strcmp((char *)ucp,cp) ;と修正するよりは、
unsigned char ucp[]
→char ucp[] が良いです。
LOOK2:『FILE *』を渡す所で
『char *』を渡してはいけません。
プロトタイプを知らない人は、
『プログラミング言語C 第2版 ANSI規格準拠
カーニハン リッチー著/石田晴久訳』
「第1章 やさしい入門」Page32
を参照して下さい。
プロトタイプを使用して
関数の引数ミスを無くそう!!