From: "U.Nakamura" Date: 2010-12-06T22:48:18+09:00 Subject: [ruby-dev:42695] Re: [Ruby 1.9-Bug#4120][Assigned] 2 failures on test/mkmf/test_convertible.rb こんにちは、なかむら(う)です。 In message "[ruby-dev:42694] Re: [Ruby 1.9-Bug#4120][Assigned] 2 failures on test/mkmf/test_convertible.rb" on Dec.06,2010 21:09:36, wrote: > >> VCでは以下のコードがエラーにならずに警告しか出ないからなのですが、何を > >> 考えているんでしょうね。 > > > > 規格上これをエラーにしないといけないというルールはないような > > 気がするので[要確認]、普通に同じ幅なので警告で許してやろうと > > いうことでしょうかねえ。 > > 最近はC言語の規格もインターネットで閲覧できるんですね。インターネット万歳 > > http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf 実はその後自分でもC99眺めてたんですが、実際に矛盾が起きた時ど うするかは Annex J.2 Undefined behavior の方にあります。 つまり、 In a context requiring two function types to be compatible, they do not have compatible return types, or their parameters disagree in use of the ellipsis terminator or the number and type of parameters (after default argument promotion, when there is no parameter type list or when one type is specified by a function definition with an identifier list) (6.7.5.3). の部分です。 というわけで、未定義動作のリストにこうやって挙げられているわ けなので、矛盾する二つの関数宣言子が存在するコードがどのよう に扱われるかは未定義です。鼻から悪魔。 > > なので、だとしたら、これがエラーになることを利用する奴が悪い > > ということになるんじゃないでしょうか。 というわけで、悪いどころじゃなくて、宇宙が滅ぶかもしれないコ ードを書いてそれを処理系に食わせるなんて信じられない! > とはいえ、VCを無視するのは現実的ではないのでテストケース側を直すことに賛成します。 まあ、そう簡単にC処理系が宇宙を滅ぼしたりはしないと思うので、 実際に現状rubyがサポートしてる処理系ごとにどうなるのか情報を 集めて対応するしかないかなと思います。 さすがにエラーも出さなきゃ警告すらしない、という処理系はない と信じたいので、警告かもしれないということを押さえさえすれば 大丈夫じゃないですかね。 それでは。 -- U.Nakamura