C言語関係掲示板

過去ログ

No.282.「max」という名前の関数

[戻る] [ホームページ]

No.1688

配列の最大値を求める「max」という関数を作ってみたのですが
投稿者---縄五重(2002/06/08 10:22:11)


初めての投稿です。C言語も初心者です。よろしくお願いします。

配列[0]〜[4]に格納されている値の最大値を求める関数「max」を作ってみたのですが、この関数を使って実行すると、「0」がたくさん出てきます。この関数は、どこか間違っているのでしょうか?

int max(int a[]){
	int i,j;
	j = a[0];
	for(i=1; i<5; i++){
		if( j < a[i] ){
			j = a[i];
		}
	}
	return j;
}


No.1695

Re:「max」というライブラリ関数があります
投稿者---ともじ(2002/06/09 01:17:45)


こんばんは。

>配列[0]〜[4]に格納されている値の最大値を求める関数「max」
>を作ってみたのですが、この関数を使って実行すると、「0」が
>たくさん出てきます。この関数は、どこか間違っているのでしょうか?

ANSIの標準関数ではありませんが、「max」という名前の関数があります。
2つのint型引数の大きい方を返却すると言うものですが、ユーザ関数に
この「max」という名前を使うと正常に動作しなくなります。
同様に「min」という関数も存在します。




No.1699

Re:「max」というライブラリ関数があります
投稿者---C職人(2002/06/09 19:07:54)


>こんばんは。
>
>>配列[0]〜[4]に格納されている値の最大値を求める関数「max」
>>を作ってみたのですが、この関数を使って実行すると、「0」が
>>たくさん出てきます。この関数は、どこか間違っているのでしょうか?
>
>ANSIの標準関数ではありませんが、「max」という名前の関数があります。
>2つのint型引数の大きい方を返却すると言うものですが、ユーザ関数に
>この「max」という名前を使うと正常に動作しなくなります。
>同様に「min」という関数も存在します。
>
>#include <stdio.h>

int max(int a[]);

int main(void)
{
int a[] = {100,20,60,30,10};
int ret;

ret = max(a);
printf("%d\n",ret);

return 0;
}


int max(int a[]){
int i,j;
j = a[0];
for(i=1; i<5; i++){
if( j < a[i] ){
j = a[i];
}
}
return j;
}


VCで上記のように動かしてみたところ、正常に動作します。
アルゴリズムも間違っていません。




No.1707

Re:「max」というライブラリ関数があります
投稿者---ともじ(2002/06/09 23:02:59)


こんばんは、C職人さん。ちょっとご無沙汰ですね。忙しかったですか。

>>ANSIの標準関数ではありませんが、「max」という名前の関数があります。
>>ユーザ関数にこの「max」という名前を使うと正常に動作しなくなります。

>VCで上記のように動かしてみたところ、正常に動作します。
>アルゴリズムも間違っていません。

少し言葉が足りなかったようです。すみません。
縄五重さんはおそらくLSIC試食版をご使用なのだと思います。
LSIC試食版でユーザ関数名に「max」という名前をつけると、
うまく動きません。ユーザーズマニュアルにも、「特に関数名
として使用すると、他のライブラリ関数が正しく動作しなくなる
ことがあります。」とあります。

max()は処理系依存の関数(あるいはマクロ)で、一般に
stdlib.hに登録されているようですので、
stdlib.hを#includeしている状態ではユーザ関数名をmaxとする
ことはできません。ですから、「max」という名前で外部変数名や
関数名を宣言すべきではないでしょう。

ところで、常連のshuさんが「C言語ソースをHTML形式に変換」
するツールを作成してくれました。この上の「掲示板ご利用上の
注意」から入れますので、よろしかったらご利用ください。





No.1709

Re:ありがとうございました。
投稿者---縄五重(2002/06/09 23:24:57)


ともじさんがおっしゃる通り、LSIC試食版を使っています。
「max」をすべて「saidai」に変えてみたらうまく動きました。
詳細なご説明ありがとうございました。