トップページ⇒tech
31コメント8KB

真/偽を表す返値って?!

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
返値に、

正常:0
エラー:-1

とするルールって、昔からありますけど、発祥はどこなんですかね。

JavaScriptなんかだと、boolean(true/false)の他に、
if文等では、「数値の0」、空文字列""、null、undefined、NaNを
false、それ以外はtrueとして扱われますね。

お上の都合もあって、コーディングルールを統一する時に
色々面倒なんですよね...

おそらく過去にもこういうスレあったんだろうとは思うんですが、
現行スレにはないし、倉庫漁るのも...だったので新規一本立ちしてみます。
0002デフォルトの名無しさんNGNG
>>1
そんなルールねーよ。
0003デフォルトの名無しさんNGNG
unixのシステムコールは大体そうなっとる。
例外あるかな?
0004デフォルトの名無しさんNGNG
!0=0xFF・・・
だから-1なだけでは?

整数値返すべき関数のエラー値を負の数で表現すると
扱いやすいとか、そんな理由は無いかなぁ?
0005デフォルトの名無しさんNGNG
>!0=0xFF・・・
>だから-1なだけでは?

Cだと !0==1 だけど?
0006デフォルトの名無しさんNGNG
>>4 それはビット補数演算死でしょ

~(0x00) = 0xFF

# やべ、チルダでよかったっけ?マチルダさ〜ん
0007デフォルトの名無しさんNGNG
ははは。
00081NGNG
企業でのコーディングルールはどうなってるんですかね>返値
勤めてる方の意見も聞いてみたいです。
大抵の方は気にせずに、正常:0 エラー:-1にしてるのかな。

私自身が前に勤めていた時はどうしていたか、記憶にないです...鬱
今現在、個人的には正常:1 エラー:0が好きなんですが...異常ですか 笑
0009 NGNG
つか、boolだと エラーの種類返せないじゃん
0010デフォルトの名無しさんNGNG
>>8 例外。今時の C/C++/Java 系は返値でエラーを示すような
ダサい設計どこもしとらん (組み込みとかは別だろうが)。
0011デフォルトの名無しさんNGNG
BOOL/booleanで返すならtrueで正常でいいし
intで返すなら0=正常、それ以外=エラー(エラーコード)
今時ならbooleanで返して例外投げるか、Win的にするなら
GetLastErrorとか使うか
0012デフォルトの名無しさんNGNG
>今時の C/C++/Java 系は返値でエラーを示すようなダサい設計どこもしとらん

C++, Java はともかく、
Cに例外ってありましたっけ。

ってもしやC99には取り入れられた?
00131NGNG
もちろん、こんな私だって最近はJavaでboolean使ったりするわけですが、
ASPでエラーチェック関数用意した時とか...
0014デフォルトの名無しさんNGNG
特定の処理系にはあるのかも。C99標準にはないでしょ。
http://www.geocities.co.jp/SiliconValley/1002/c99d/
0015デフォルトの名無しさんNGNG
無理矢理Cでマクロとlongjumpつかって例外のまねごとしたことあるけど
死んだ>俺が
0016デフォルトの名無しさんNGNG
デジタル回路の名残でないのか?
電圧低い→false、0
電圧高い→true、1
0017デフォルトの名無しさんNGNG
>>14
inlineがCでも使えたなんてしらなんだ。
0018デフォルトの名無しさんNGNG
誰もgccとは言ってないけど。

>>17
http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/gccextend.html

おもしろいよ。もし例外が使えるCの処理系があるなら教えて欲しいです。
0019デフォルトの名無しさんNGNG
前の会社は戻り値は文字列で返していました(C言語)。
"OK", "NG"
"YES", "NO"
"TRUE", "FALSE"
"GOOD", "BAD"
・・・
しかも統一されていない。
1グローバル変数に値を入力する。
2関数を呼ぶ
3戻り値チェック
4OKならこの関数の結果がグローバル変数へ代入されている。
 NGなら前に呼んだ関数の結果がグローバル変数へ代入されたまま。

COBOLのプログラムをCへ忠実に移植したものです。
かなり古いCOBOL仕様です。70年代。
0020デフォルトの名無しさんNGNG
>今現在、個人的には正常:1 エラー:0が好きなんですが...異常ですか 笑

「正常」は1種類しかないけど、「失敗」には何種類もあるので、
正常:0 エラー:その他 のほうがやっぱり合理的ではないでしょうか?
0021デフォルトの名無しさんNGNG
最近のはほとんど C++ 対応だから、逆に例外が使えない C コンパイラ
を探す方が難しいのではないか?LSI C-86試食版とかか。
0022デフォルトの名無しさんNGNG
>>21
>最近のはほとんど C++ 対応だから

Cとしてコンパイルさせたときも例外使えるのか?
0023デフォルトの名無しさんNGNG
Cで戻り値で表すなら 正常/成功=!0 異常/失敗=0 派です。
エラー原因は別の変数使う。
if (func()) //成功
if (!func()) //失敗
0024デフォルトの名無しさんNGNG
どうせならebxレジスタにでも格納しましょう。
0025デフォルトの名無しさんNGNG
なぜわざわざ C としてコンパイルする必要があるんだ?
オープンソースで作ってるなら話はべつだが、使えるもの使わん奴は
ただの車輪屋さんだぞ。ちなみに数年前の gcc はオプションで例外
使えるようになってたが、よくコンパイルで「構文が複雑すぎる」と
文句いわれてた。
0026デフォルトの名無しさんNGNG
>>25
駄目駄目なC屋が書いたコードはconst性のチェックでひっかかって
コンパイルできず、Cとしてコンパイルするに1票
002725NGNG
>>26 それは悲しすぎる...
002826NGNG
でもありがちじゃない?
C屋が書いたライブラリを使う羽目になるとconst_castしまくりなんだけど。
俺の周りだけ?
002926NGNG
やばい。別にCが嫌いなわけじゃないです。
実際に今も2ch見ながらCのコード書いてる。
0030デフォルトの名無しさんNGNG
しかもスレの趣旨からはずれた...ごめん。
0031デフォルトの名無しさんNGNG
真理値についてHSPで激しく争っていた人々がいたなあ。
■ このスレッドは過去ログ倉庫に格納されています