Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

gccの不思議な警告

タグ: gcc C++
#include <iostream>

int main(int argc, char* argv[])
{
	const int dec = -263716858L;
	const int hex = 0xf0480006L;

	const int expr = 0xf0480006L;
	
	switch(expr)
	{
	case dec:
		std::cout << dec << std::endl;
	}

	switch(expr)
	{
	case hex:
		std::cout << hex << std::endl;
	}

	return 0;
}

このコードをgccでコンパイルすると

hoge.cpp: function 内の `int main(int, char**)':
hoge.cpp:18: 警告: 暗黙の定数変換でオーバーフローしました

こんな警告が表示された。

dechexも表記が違うだけで、実際の値は同じ。
にもかかわらずなぜ18行目

case hex:

ここだけ警告されるのか。

上記の警告を出したgccは、試せた中では以下の2つ。

  • gcc バージョン 3.2.3 20030502 (Asianux 1.0 3.2.3-53.1)
  • gcc バージョン 3.4.4 20050721 (Red Hat 3.4.4-2)

また

  • gcc version 4.0.1 (Apple Inc. build 5465)

これは警告を出なかったが、-pedantic付きでコンパイルしたら

hoge.cpp: In function ‘int main(int, char**)’:
hoge.cpp:18: error: overflow in constant expression

と言われた。

とりあえず、問題なく動いているし、警告を消すだけなら

const int hex = static_cast<const int>(0xf0480006L)

などという方法もあるのでまあ良いのだが……何か、気持ち悪いなぁ。

スポンサーサイト

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://idlysphere.blog66.fc2.com/tb.php/7-55c86db2
この記事にトラックバックする(FC2ブログユーザー)

Appendix

タグ

Blog内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。