C言語:gccコンパイラだと動くがBorland C++ Compilerだと動かないことはある

Cプログラミング C言語

以下のCプログラムはgccコンパイラでもBorland C++ Compiler(bcc32)でもすんなりコンパイルが通ってしまう。

search_char.c

#include <stdio.h>

int search(char c, char *v){
	int index;

	while(v[index]){
		if(c == v[index]) break;
		index++;
	}
	return index;
}

int main(void)
{
	int index;
	char value[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

	index = search('R', value);
	printf("index = %d", index);

	return 0;
}

それぞれ実行してみる。

gccコンパイラの実行イメージ

index = 17

Borland C++ Compilerの実行イメージ


Borland C++ Compilerの方は何も起きない。

どちらかと言うとBorland C++ Compilerの方の挙動が正しい。

変数indexは、初期化していないため、C言語の仕様(変数は宣言しただけではどんな値が入っているか分からない)からすれば挙動がおかしくなるはず。

正しくはこうすべきだ。(青字の部分)

#include <stdio.h>

int search(char c, char *v){
	int index = 0;

	while(v[index]){
		if(c == v[index]) break;
		index++;
	}
	return index;
}

int main(void)
{
	int index;
	char value[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

	index = search('R', value);
	printf("index = %d", index);

	return 0;
}

0クリアしていない変数があってもコンパイル警告は出ない。gccコンパイラは割と変数値を0クリアしてくれるようなので、注意したい。

コメント

タイトルとURLをコピーしました