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(fp1) ;

解説 LOOK1:『char *』を渡す所で 『unsigned char *』とする位は 許せるのですが、 strcmp(ucp,cp) →strcmp((char *)ucp,cp) ;と修正するよりは、 unsigned char ucp[] →char ucp[] が良いです。 LOOK2:『FILE *』を渡す所で 『char *』を渡してはいけません。 プロトタイプを知らない人は、プログラミング言語C 第2版 ANSI規格準拠 カーニハン リッチー著/石田晴久訳』 「第1章 やさしい入門」Page32 を参照して下さい。 プロトタイプを使用して 関数の引数ミスを無くそう!!