_beginthreadの戻り値がunsigned という仕様なのに

[戻る]
kyu 2003/12/15(月) 20:39:20
MSDNには、
「エラーが発生した場合、-1」
って載ってあるんだけど、どうやってエラーチェック
したらいいのでしょう?

アイススケーター 2003/12/16(火) 08:02:16
-1でチェックすればいいのでは。
unsignedの変数に-1を代入してみてください。
longの場合には0xffffffffが代入されているはずです。

kyu 2003/12/16(火) 13:16:27
[[解決]]
そか。
普通に-1と == 評価してもtrueになるんですね。
ありがとうございました。

tetrapod 2003/12/16(火) 14:27:03
あまり関係ない話なのですが

http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/vccore98/html/_crt__beginthread.2c_._beginthreadex.asp

には失敗時に 1 が返ると書かれていますね。
どっちが誤植なんだろ。

YuO [E-Mail] 2003/12/16(火) 14:36:08
1が返る,という方が間違いでは?

とりあえず,VC++ 5.0の_beginthreadのソース(srt/src/thread.c)では,
(unsigned long)-1Lを返しています。


というか,-1を1と書いているのは他にもありまして……。
http://msdn.microsoft.
com/library/en-us/shellcc/platform/commctls/editcontrols/editcontrolreference/ed
itcontrolmessages/em_limittext.asp
> For multiline edit controls, this value is either 1 bytes or the value of the 
wParam parameter, whichever is smaller.
こんなエディットコントロール,どう使えと……。

前は,
> For multiline edit controls, this value is either -1 bytes or the value of the 
wParam parameter, whichever is smaller.
だったと思いますが……。

どっちにしても,unsignedな値に対して-1と書くのはどうかと思いますけどね……。

tetrapod 2003/12/16(火) 15:01:19
VC++6.0 の crt/src/thread.c 確認しました。確かに (unsigned long)-1L です。

うーん。昔は、
MSDN 日本語ドキュメントを信ずるものは救われない
MSDN 英語ドキュメントを信じるものは救われる
だったのですが、こーなってくると何を信じてよいのやら。

とりあえず古い MSDN Library CD-ROM を捨てずに取っておこう。

古いスレッドには追加発言できません。