C言語なら俺に聞け 157

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 0345-kMi9)
垢版 |
2021/06/28(月) 11:22:51.50ID:so+vl3vs0
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/

※前スレ
C言語なら俺に聞け 156
https://mevius.5ch.net/test/read.cgi/tech/1601271690/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2021/08/01(日) 21:58:23.19ID:4Ph4Dvnc0
なるね
何か困るの?
2021/08/01(日) 22:05:54.64ID:grRzUWQ80
>>158
はっきりした基準はないという前提だけどぼんやりとした概念的な部分では
OS はアプリケーションソフトの対比的なものだと思う。
用途ごとのアプリケーションソフトを起動するという前提がないなら機能的に OS 相当のものを
含んでいても普通は OS とは言わないんじゃないかな。
2021/08/01(日) 23:18:55.12ID:bX2lzryL0
ホントにOSだと主張するなら、ぜひWindowsの仮想環境で動かしてみてくれ
2021/08/02(月) 00:18:03.59ID:AinH6UQa0
もしかして仮想マシンとエミュレータ混同してる?
2021/08/02(月) 00:39:04.73ID:5dFVW6Kq0
動かせないのなら、回りくどい事言わず、無理ですと言えば済むよ
2021/08/02(月) 01:06:43.81ID:AinH6UQa0
amd64で動くN-BASICがあるならできるんじゃない?
無いなら無理だわな
2021/08/02(月) 05:11:39.16ID:qOaSDvjS0
>>163
>>151
166デフォルトの名無しさん (ワッチョイ d6d2-MjzU)
垢版 |
2021/08/02(月) 07:46:31.20ID:HO5h+jLQ0
最近はスマホのカメラ部品にTRON OS入ってるんだって?
もうBIOSやファームウェアもOSになるんじゃないかとも思っちゃう。
2021/08/02(月) 10:11:13.69ID:nmkqokJHF
>>152-153
BIOS: BI + OS
DOS: D + OS
OSとは
2021/08/02(月) 10:12:43.19ID:nmkqokJHF
>>154
>わざと言っているとしたら悪質

ほんそれ
最近そういう書き込みが多い
5chから人を減らす作戦だろう
2021/08/02(月) 11:03:41.91ID:qOaSDvjS0
>>167
> BIOS: BI + OS
ネタか?
Basic Input/Output System やぞ

> DOS: D + OS
こっちは合ってる
2021/08/02(月) 12:33:14.68ID:uwbNVnssM
>>169
もちろんネタと書いてあるのでネタなんでしょ。
171デフォルトの名無しさん (エムゾネ FF9a-By/s)
垢版 |
2021/08/02(月) 13:13:02.28ID:y7YH8RaeF
Basic Interpreter OS
2021/08/02(月) 13:17:25.48ID:y7YH8RaeF
質問です
int flagA = 3 == 3;
int flagB = 3 == 3 == 3;
int flagC = 3 == 3 == 1;
の結果が
flagA : 1
flagB : 0
flagC : 1
になるのですが
flag B とか flag C は何が怒っているのでしょうか?
173デフォルトの名無しさん (ワッチョイ d6d2-By/s)
垢版 |
2021/08/02(月) 13:31:37.39ID:HO5h+jLQ0
>int flagB = 3 == 3 == 3;

int flagB = (3 == 3) == 3;

int flagB = (1) == 3;

int flagB = 0;

>int flagC = 3 == 3 == 1;

int flagC = (3 == 3) == 1;

int flagC = ( 1 ) == 1;

int flagC = 1;
2021/08/02(月) 13:31:42.08ID:y7YH8RaeF
int flagD = 3 != 3;
int flagE = 3 != 3 == 0;
int flagF = 3 != 3 == 1;

flagD : 0
flagE : 1
flagF : 0
になります
2021/08/02(月) 13:31:46.39ID:59KH06XU0
タイホするっ!! ダーン ダーン

int flagB =
ここまでと
3 == 3 == 3
が別のパーツになっていて
== は左から結合するので
(3 == 3) == 3 となり真は1になるので
1 == 3 で偽すなわち0だ
2021/08/02(月) 13:41:18.14ID:y7YH8RaeF
解決しました
ありがとうございました
177デフォルトの名無しさん (ワッチョイ 7aad-ePXc)
垢版 |
2021/08/02(月) 16:38:34.45ID:qdvnGLBb0
俺が怒っている
2021/08/02(月) 19:33:02.95ID:YziYRSV70
演算子の優先順位って覚えるのヤダー。自分書くと括弧だらけだわ。
どの辺が塩梅なんかねー?明示的でないと駄目よってコーディングとかもあるし。
2021/08/02(月) 19:49:19.60ID:5dFVW6Kq0
それでいいよ
2021/08/02(月) 20:03:46.84ID:Uu01rKAP0
& ^ | なんかのビット演算が比較よか低いのが微妙に嫌
2021/08/03(火) 09:51:48.02ID:wbx4PwZT0
憶える気のない者は成長しない
182デフォルトの名無しさん (アウアウウー Sa09-Vs42)
垢版 |
2021/08/03(火) 10:01:19.19ID:Z1msEN+ba
結合の優先度は、自分が分かっていても
記憶があやふやな人が不安になるといけないから
結局カッコを明示的に描くかな…
2021/08/03(火) 10:17:52.20ID:wbx4PwZT0
中学のマイコン部かよ
2021/08/03(火) 13:41:40.87ID:34OfFMxOr
>>181
覚える気があっても、覚えさせられる気がしねー。
2021/08/03(火) 13:45:58.11ID:wbx4PwZT0
自分を磨くのは本人なので
そんなお節介は考えなくていい
2021/08/03(火) 14:20:08.34ID:kdIV+1e00
CでC++の純粋仮想関数のような事をやりたいのですができますか? 疑似インターフェースです。
2021/08/03(火) 14:30:35.30ID:wbx4PwZT0
typedef struct iunknown iunknown;

struct vtable
{
int (*query_interface)(iunknown*, int, void**);
int (*add_ref)(iunknown*);
int (*release)(iunknown*);
};

struct iunknown
{
long count;
vtable* vtbl;
};

みたいなことか?
2021/08/03(火) 14:31:17.98ID:wbx4PwZT0
あ、いかんvtableのtypedef忘れたけどまあ許せやw
2021/08/03(火) 14:32:38.22ID:lGpJxUYy0
のような事の解釈余地に幅がありすぎ
2021/08/03(火) 19:27:01.81ID:I3gKaej4M
幅があると言うなら狭めるようなヒント書けばいいだけ
たたき台として>>187はそれほど悪くないと思う
2021/08/03(火) 20:41:05.50ID:kdIV+1e00
>>187
スゴーイ 感謝感激 ありがとうございます。

typedef struct {
void (*interface_a)();
void (*interface_b();
,
.
} TINTERFACEXXX;

typedef struct {
TINTERFACE ia;

} TOBJA;

なんてリレーションスタイルも考えたんですが、
いずれにしろ、クリーンアーキテクチャーのCでのSOLID原則ができるというところまでこぎつけました。
ありがとうございます。
2021/08/03(火) 23:48:19.32ID:Ucc8C21f0
COM最強
2021/08/05(木) 14:10:06.71ID:9IiPo8vtH
奥村晴彦 『改訂新版 C言語による標準アルゴリズム事典』の
「改訂新版 序」に、
> 現代の慣習に従って、[…] EXIT_SUCCESSを0にしたりした
とあるのですが、EXIT_SUCCESSマクロ変数を使った方が
定数即値を決め打ちするよりも可搬的であり、
それこそ「現代の慣習」であるように思うのですが、
実際はEXIT_SUCCESSより0を使う方が「現代的」なんですかね。

なお、誤植も疑ったのですが、集録されている実際のコードにおいても
return 0;と書かれていました。
2021/08/05(木) 14:30:14.22ID:O0DzK1TA0
>>193
0以外 は1以上も-1以下もあるし、下手すりゃ数値以外の可能性すらあるけど
0 は絶対0なので、少なくともこれに関してだけは
私は許そう
2021/08/05(木) 15:00:49.33ID:9IiPo8vtH
>>194
なるほど、「0 は絶対0なので」というので納得できました。
ありがとうございます。
2021/08/05(木) 15:20:09.93ID:igzlcjJl0
>>193
思想的にはともかく、その件については習慣として定着してるという事実があるんで、
事実に逆らってもしょうがない。

ちなみに main 関数だけは return 文を通過せずに } に到達した場合には
return 0; と同じになるという仕様になってるんで、 return 文自体を省略するという
スタイルもある。
2021/08/05(木) 16:18:55.16ID:TenuDSkO0
>>193
mainの出口は仕方ないんだよ
enumなんて考え方ができる遙か前に決まったことで今さら変えられないというのが現実だ

mainの第2引数だって今ならconst付けそうなところだけど
これまたconstなんかなかった頃に決まったことだ
2021/08/05(木) 17:17:51.97ID:lrEA3gELa
>>197
歴史的にはそうなのかもしれないけど、それだと「EXIT_SUCCESSを0に」することが「現代の慣習」であることの説明になってなくないような
なんでEXIT_SUCCESSと書いてたのを0と書くようにしたのかが知りたいんでは
もう納得してるみたいなんでアレだけども
2021/08/05(木) 17:57:00.56ID:TenuDSkO0
enumつったんだけど
話通じてねえな
2021/08/05(木) 18:23:46.65ID:sS7OglMj0
マジックナンバーなんて駄目でしよってノリでEXIT_SUCCESSを使ってたけどあまり流行らなかったから0に戻したってことじゃないの?
2021/08/05(木) 18:25:20.09ID:sS7OglMj0
>>199
マクロ (#define) の話だからenum関係ないよ
2021/08/05(木) 18:36:03.13ID:C1udim1A0
C言語7不思議

enum { A=1 } main(void) { return A; }

このコードは合法か否か?
2021/08/05(木) 18:54:07.04ID:nywX30PRM
法なんてない
2021/08/05(木) 20:40:48.16ID:TenuDSkO0
>>200
だね
じゃあEXIT_SUCCESSはマジックナンバーないのかって
2021/08/05(木) 21:00:13.63ID:RBdzanHxM
オレのばっちゃが決めたんだ
2021/08/05(木) 21:12:45.92ID:sS7OglMj0
>>204
マジックナンバーって何かわかってる?
ググってからでないとenumみたいに頓珍漢なこと言って恥かくよ?
2021/08/05(木) 22:30:22.56ID:TWSeb4Gn0
横だけどeasing関数でマジックナンバーっての見たけど、結局何だったのかわからないままですわ
2021/08/05(木) 22:33:51.51ID:RyeVbM3/0
線形合同法で作る乱数に出てくる謎定数
2021/08/06(金) 00:25:46.52ID:xkvwFph10
>>202
基本的には否だが、許容される場合はありうる。
main の型は以下のいずれか。

@ int main(void);
A int main(int argc, char * argv[]);
B 以上の二つのいずれかと等価 †1
C 以上の三つのいずれでもない処理系定義の方法

それとは別に
「main関数の返却値の型がintと適合しない場合,ホスト環境に戻される終了状態は,未規定とする。」†2
とするという文言もある。
C で言う「未規定」というのは処理系が挙動を選択して良いことを意味するので、
適合しなくても適合したときと同等の処理になるように実装している処理系はあるかもしれない。

enum で定義した型 (列挙型) は
「char,符号付き整数型又は符号無し整数型と適合する型とする。型の選択は,処理系定義とする」 †3
とあり、列挙型が int と適合する可能性はある。

また、上述のCとして処理系が main の返却値の型が列挙型であったときを許容するような定義をしているかもしれない。

-------------------------
†1 typedef やマクロによる別名、あるいは型調整などで同等になるものという意味
†2 「適合」に関する規則は複雑なのでここでは説明しない
†3 個別の列挙型ごとに選択してよい
2021/08/06(金) 07:01:45.65ID:QgUKHcUo0
>>206
おまえさんこそ何かわかってなさそうだな
なぜ、その値なのか由来が不明な定数は
スペルが0であろうがEXIT_SUCCESSであろうが
0x00であろうが本質的に同じことだぞ
UNIXを背景とせずにreturn 0;が説明できるか?

おまえさんみたいにググって拾った情報を丸呑みしてると
わかってないやつの間違った理解が伝搬するだけだぜ
2021/08/06(金) 08:15:51.79ID:3zvDecHz0
>>210
EXIT_SUCCESSがどういう意味かもわからないなら英語からやり直せよw
値の話じゃないことぐらい理解しろ

非常に稀な例としてEXIT_SUCCESSが0でないシステムが存在する
例えばOpenVMSでは
EXIT_SUCCESS = 1
EXIT_FAILURE = 2
だったりする
http://fafner.dyndns.org/cgi-bin/conan.com?key=CRTL~exit%2C_exit~Argument&title=VMS%20Help

なのでそういうシステムへの移植を考えてるなら意味はあるけどそんな人はほとんどいないからreturn 0;でいいやんって話

そもそもunixでも0, 1以外の値を返すコマンドは多数あってその場合は自分でEXIT_xxxを定義する必要あるから0, 1だけ定義されててもねぇって感じもあるし
2021/08/06(金) 08:30:30.04ID:QgUKHcUo0
>>211
おまえさんは>>193が英語の話だと思っていたのかw
0がどういう意味かもわからないならCをやり直せよ
2021/08/06(金) 09:12:19.75ID:xkvwFph10
>>211
関係ない。 言語仕様としては 0 が成功を表すというのは保証された動作で、
もしもホスト環境の都合と食い違うならランタイムサポート (スタートアップルーチン) で補正すべきこと。
EXIT_SUCCESS 「も」成功を意味する値として使えるというのとは独立した話。
2021/08/06(金) 09:17:08.98ID:3zvDecHz0
>>212
まじでマジックナンバー知らんのか?

0じゃ何を意味するかわからんから名前をつけるって話だぞ
EXIT_SUCCESSが英語だから英語の勉強しろって言ってるだけ
日本語使える環境なら
 正常終了 = 0
でもいい

で、>>193の件はそうは言っても正常終了で0以外なんてまずないし、たいていの人はmain()が0を返したら正常終了ってわかるからreturn 0;でいいやってなってるだけ
2021/08/06(金) 09:19:10.68ID:3zvDecHz0
>>213
> 関係ない。 言語仕様としては 0 が成功を表すというのは保証された動作
どこで規定されてるのか示してみ
そもそもOpenVMSの処理系は規格違反とでも言うのかよw
2021/08/06(金) 09:19:24.86ID:9vf9CEgT0
>>214
ほかはともかく、 0 だけはマジックではなく明確に意味を共通で持たせている
という話なのでは?
2021/08/06(金) 09:26:12.98ID:9vf9CEgT0
>>215
mainの戻り値がデフォルトで正常なときは 0 なのは言語仕様に規定されてるね

0又はEXIT_SUCCESSの場合,成功終了
この「又は」はほんとにORなので、EXIT_SUCCESS=1 のときは 0でも1でも正常よ
2021/08/06(金) 09:44:11.58ID:xkvwFph10
>>215
繰り返すが EXIT_SUCCESS 「も」成功を表すことは保証されている。
それとは関係なく 0 が成功なのは保証された動作

以下は C99 からの抜粋 (日本語は JIS から対応箇所を抜粋)

5.1.2.2.3 Program termination

If the return type of the main function is a type compatible with int,areturn from the
initial call to the main function is equivalent to calling the exit function with the value
returned by the main function as its argument

main関数の返却値の型がintと適合する場合,main関数の最初の呼出しからの復帰は,
main関数が返す値を実引数としてもつexit関数の呼出しと等価とする

7.20.4.3 7.20.4.3 The exit function

If the value of status is zero or
EXIT_SUCCESS, an implementation-defined form of the status successful termination is
returned. If the value of status is EXIT_FAILURE, an implementation-defined form
of the status unsuccessful termination is returned. Otherwise the status returned is
implementation-defined.

statusの値が0又はEXIT?SUCCESSの場合,成功終了(successful termination)状態を処理系定義の形式で返す。
statusの値がEXIT?FAILUREの場合,失敗終了(unsuccessful termination)状態を処理系定義の形式で返す。
それ以外の場合,返される状態は処理系定義とする。
2021/08/06(金) 10:06:15.17ID:QgUKHcUo0
>>214

#define AHO_NO_3zvDecHz0 0
int main(void)
{
return AHO_NO_3zvDecHz0;
}
こう書いてもなぜ0なのかはわからない
マジックナンバーとはこういうことだぞ

extern int svc_get_success_code();
int main(void)
{
return svc_get_success_code();
}
こういうのと違うからな
2021/08/06(金) 10:38:06.15ID:3zvDecHz0
>>216
ほとんどの環境で 0 を正常と解釈できるからマジックナンバー扱いでなくてもいいだろって言う判断を奥村晴彦氏がしたってだけの話だと思う

>>217
途中でreturnせずにmain()の最後まで到達したら0を返す(これは言語仕様)という話と返された0が正常終了とみなすかどうかは別の話

> 0又はEXIT_SUCCESSの場合,成功終了
と主張するなら規格のどこで規定されてるのか書いてくれ
2021/08/06(金) 10:53:05.07ID:QgUKHcUo0
5.1.2.2.3 プログラム終了処理
 main 関数の返却値の型がint と適合する場合,main 関数の最初の呼出しからの復帰は,main 関数が返す値を実引数としてもつexit 関数の呼出しと等価とする。main 関数を終了する}に到達した場合,main 関数は,値0 を返す。

7.20 一般ユーティリティ<stdlib.h>
EXIT_FAILURE
及び
EXIT_SUCCESS
は,整数定数式に展開され,それぞれホスト環境に失敗終了状態又は成功終了状態を返すために,exit関数の実引数として使用することができる。
2021/08/06(金) 11:01:20.62ID:3zvDecHz0
>>217-218
すまん今規格見たら確かに書いてあったわ
OpenVMSとかは処理系で変換してるんだろうな

>>219
それは単にアホが意味不明な名前付けしてるだけ
そんなレベル低い話はチラ裏にでも書いとけ
2021/08/06(金) 11:25:57.87ID:QgUKHcUo0
>>222
スペルを変えるだけでは無駄ってことだよ
どこから出てきたのか、何から導いたのかが示されていなければ同じことだ
2021/08/06(金) 11:59:37.28ID:GGzcYLSBM
>>223
何わけわからんこと言ってるんだよ
EXIT_SUCCESS がわからないならプログラマ辞めちまえよw
2021/08/06(金) 12:04:06.56ID:QgUKHcUo0
は? EXIT_SUCCESSの意味を英語で理解しろとか言ってきたのおまえさんだぜ
NO_PROBLEMなんてオレオレマクロでもおまえさんは満足なんだろ
どうりで規格票もロクに読まねえわけだ
プログラマ辞めちまえをそのまま返すぜドスカタン
2021/08/06(金) 13:43:09.92ID:3zvDecHz0
> は? EXIT_SUCCESSの意味を英語で理解しろとか言ってきたのおまえさんだぜ
EXITもSUCCESSも英語だから英語「を」理解しろって言ってるんだが?
英語の前にお前は日本語を理解できるようになならないと駄目だなw
2021/08/06(金) 14:26:52.67ID:QgUKHcUo0
知らねえやつがまずいない英単語でドヤってて恥ずかしくねえの? ちょっと神経わからんなw
Cを使う以上はISO/IEC 9899に書かれていることが前提だからこそEXIT_SUCCESSというスペルの意味を知っているべきだが
おまえさんが露呈したアレこそがプログラマにあるまじき姿だろうがよ
2021/08/06(金) 14:34:50.29ID:KBiduyaj0
シェルスクリプトスレの名物キチガイコンビみたいだなお前ら
2021/08/06(金) 15:10:51.95ID:3zvDecHz0
>>227
> 知らねえやつがまずいない英単語でドヤってて恥ずかしくねえの?
どこを見たらドヤッてるように見えるんだよ…

> ちょっと神経わからんなw
そもそもドヤるという神経がわからんわw
2021/08/06(金) 15:15:17.60ID:QgUKHcUo0
>>229
どこを見るってPCのモニタだがw
1たす1は2なんだぞ〜ぼくすごいだろ〜みたいなお気の毒な姿
2021/08/06(金) 15:23:31.43ID:QgUKHcUo0
規格票は英語で書かれているわけだが
読んでないのは誰かさんだったね(プークスクス
2021/08/06(金) 15:34:06.02ID:3zvDecHz0
>>230
> どこを見るってPCのモニタだがw
わー、おもしろい

これで満足かな?w
2021/08/06(金) 15:37:08.92ID:QgUKHcUo0
スルーすれば逃げられると思っているようなのでもう一度言ってやる

Cを使う以上はISO/IEC 9899に書かれていることが前提だからこそEXIT_SUCCESSというスペルの意味を知っているべきだが
おまえさんが露呈したアレこそがプログラマにあるまじき姿だろうがよ
2021/08/06(金) 17:07:54.01ID:3zvDecHz0
露呈したのはEXITやSUCCESSでドヤられたとか思うお前のレベルだろw
2021/08/06(金) 19:16:51.91
なんだか香ばしいですね‥‥

>>218
完璧な回答ですね‥‥
2021/08/06(金) 20:02:31.35ID:CzNdrnJF0
main以外の関数だと、成功失敗の値は特に決められてはいないんですよね?
2021/08/06(金) 20:47:42.91ID:y8oe7xdW0
>>236
うん、決められてないよ

まあユーザ的には0を成功としておけばいい雰囲気だけど
システムコールに近づくとだいたい0が失敗になってくよね
0っつーかぬるぽっつーか
2021/08/06(金) 20:49:05.43ID:+/iE6x4C0
(s)scanf() の戻りは渡った非引数への変換に成功した数ですし ケースバイケースですわね
2021/08/06(金) 20:49:34.62ID:+/iE6x4C0
s/非/被/
2021/08/07(土) 00:16:24.99ID:YBZ7G4A60
>>236
規定はないけどある程度の習慣はあって、おおざっぱにまとめると

・関数が受け持つ機能が副作用であり、
 返却値は成功or失敗のみを通知すればよいときは 0 を成功値とする
・関数が意味のある値を返すときはありうる値の範囲ではない値を失敗値とする
 (0、ヌルポインタ、負数、無限、NaNなど)
・入力値 (関数の引数) が正しい限り失敗がないことを見込めるときは
 不正な入力があった場合を未定義とする
 (呼出し前にチェックされているか、ロジック上正しいことをプログラマが保証することを期待する)

という感じだと思う。

あくまでも標準ライブラリやそれを踏襲した習慣をまとめるとこんな感じだろうという私なりのまとめなので
常に正しい選択というわけではないということはことわっておくが、
標準ライブラリを全く使わないようなプログラムもないだろうし
標準ライブラリを真似ておけば全体として一貫性が出て綺麗なんじゃないかな。
241デフォルトの名無しさん (ワッチョイ 6985-6hcM)
垢版 |
2021/08/07(土) 00:29:33.44ID:rXkekRAR0
strcmp
2021/08/07(土) 00:54:21.18ID:YBZ7G4A60
strcmp は失敗しない。
2021/08/07(土) 06:09:45.55ID:ZNSsPCBy0
>>234
それでexitやsuccessの意味を知らないと証明したつもりになっているアホを
じゃあドヤる以外のどんな表現をすればいいんだ?
2021/08/07(土) 08:46:51.55
>>240
cctypes
2021/08/07(土) 09:05:40.63ID:AEz+LKNR0
>>243
> それでexitやsuccessの意味を知らないと証明した
どこからそんなアホなことを言い出したんだ?
またPC画面からかな?w
2021/08/07(土) 09:15:42.75ID:xdlB1E9b0
exitなんかで終わらしちゃダメでしょ
returnで終わらせないと
2021/08/07(土) 09:50:33.76ID:YBZ7G4A60
>>244
文字判定系の関数に失敗はない。
2021/08/07(土) 11:27:30.28ID:sspluaGX0
exit は どこでもドアで便利
249デフォルトの名無しさん (ワッチョイ 13ad-E1rX)
垢版 |
2021/08/07(土) 17:43:31.00ID:efxonHum0
どこから終わっても良いのか?それとも出口は一つにすべきか?
2021/08/07(土) 18:13:40.12
>>249
どこからでも return してよいのか?それとも return 文の記述は一箇所に限定するべきか?
2021/08/07(土) 18:18:29.86ID:sspluaGX0
一つの関数内でreturnは一つにするというコーディング規約があったときは
gotoの使用が増えてましたっけ
252デフォルトの名無しさん (ワッチョイ 13ad-Z6Ah)
垢版 |
2021/08/07(土) 18:31:09.62ID:efxonHum0
Cなので仕方がないな。他の言語のように例外処理が try ... catch とかで使えれば gogo なくしても見易く書けるだろうけど。
2021/08/07(土) 18:35:47.91ID:HEQEjPMP0
出口を1つにしたほうが達成感がある
だがreturnお前はだめだ
254デフォルトの名無しさん (ワッチョイ 13ad-Z6Ah)
垢版 |
2021/08/07(土) 18:36:21.14ID:efxonHum0
goto なしでやる方法は色々あるが、30年ぐらい前に何も参考にせずに俺が考えついたのは for (;;) のブロックに入れて途中で条件により break する方式。
2021/08/07(土) 18:44:02.64ID:608OSAzY0
無限ループって怖くね?
2021/08/07(土) 18:54:15.41ID:vvCAvRb50
実利の無いこだわりはやめていただきたく……
257デフォルトの名無しさん (ワッチョイ 13ad-E1rX)
垢版 |
2021/08/07(土) 18:54:27.54ID:efxonHum0
>>255
最後のbreakを忘れたらそうなるのでそれだけは注意が必要
258デフォルトの名無しさん (ワッチョイ 13ad-E1rX)
垢版 |
2021/08/07(土) 18:58:54.78ID:efxonHum0
ま、しかし、今はそういう例外処理的なやつは躊躇せずにgoto使うけどね。そうしないと見づらいし分かり難くなるから。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況