- 1 名前:デフォルトの名無しさん [2019/04/02(火) 11:23:37.62 ID:SQXqRaAc0.net]
- !extend:checked:vvvvv:1000:512
C言語の話題のみ取り扱います C++の話題はC++スレへ 質問には最低限の情報(ソース/コンパイラ/OS)を付ける 数行で収まらないソースは以下を適当に使ってURLを晒す https://paiza.io/ https://ideone.com/ codepad.org/ C11 www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf C99 www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf kikakurui.com/x3/X3010-2003-01.html C FAQ 日本語訳 www.kouno.jp/home/c_faq/ JPCERT C コーディングスタンダード https://www.jpcert.or.jp/sc-rules/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
- 321 名前:306 mailto:sage [2019/05/01(水) 02:42:38.43 ID:LlVhs4fx0.net]
- https://ideone.com/JeNdi9
こういうエラー処理を書きたいんですが
- 322 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 13:05:10.79 ID:Vm5gAWGsa.net]
- >>305
str[4]が改行コードの\nだとして str[5]は\0にはならないの?
- 323 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 14:38:29.13 ID:pGaFGHQ6a.net]
- >>310
それは明らかになりません。 null文字入れるのは大抵はこっちの役目です。
- 324 名前:デフォルトの名無しさん [2019/05/01(水) 14:41:59.38 ID:yF2N0E1tH.net]
- >>304
%c は空白文字は入らないのでは?
- 325 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 15:19:37.49 ID:pGaFGHQ6a.net]
- %cは文字は全部入る。
受け付ける文字をはっきりさせたいなら[]使うのがよい。
- 326 名前:デフォルトの名無しさん mailto:sage [2019/05/02(木) 12:01:07.73 ID:oq2ExZVd0.net]
- printf()のペアっぽいからという理由で
scanf()を使わせる初心者本をこの世から駆逐すべき
- 327 名前:デフォルトの名無しさん mailto:sage [2019/05/02(木) 12:52:42.24 ID:Yg4L14jR0.net]
- 使い方を熟知している人が使う分には問題ないが
「良い子はマネをしてはいけません」の典型だな
- 328 名前:デフォルトの名無しさん mailto:sage [2019/05/02(木) 13:24:17.15 ID:+EePt9KB0.net]
- 初心者はただ値が入力できりゃ楽しいんじゃね
ついでにscanfはかんたんに間違いを引き起こすことが出来るから脆弱性の説明にも使える このご時世、かんたんに間違いを体験させること自体が難しくなってる セキュリティが高くなると間違えさせる行動へのコストもまた高くなる
- 329 名前:デフォルトの名無しさん [2019/05/02(木) 15:41:08.09 ID:jQNzLmJja.net]
- 昔のマイコン的なものだと暴走したりしてなお良い。
core dump してるようじゃまだまだ安全過ぎる。
- 330 名前:デフォルトの名無しさん mailto:sage [2019/05/02(木) 19:38:22.59 ID:lQcGaGZC0.net]
- たしかにscanfが危険なものだと知った時にどうやってfgetsに置き換えるか考えたの思い出した
- 331 名前:デフォルトの名無しさん mailto:sage [2019/05/02(木) 21:18:22.90 ID:H376nx5x0.net]
- >>287
その数%のアセンブラの部分を、おまえさんは「OS」と呼ぶのか?
- 332 名前:デフォルトの名無しさん mailto:sage [2019/05/02(木) 21:20:29.21 ID:H376nx5x0.net]
- >>314
scanfの仕様をロクに調べもせず自分の頭で考えもせず どっかの受け売りを初心者に吹聴する無能老害こそ この世から駆逐すべきだろうが
- 333 名前:デフォルトの名無しさん [2019/05/02(木) 21:21:11.50 ID:TaSBDpemM.net]
- >>319
ヨコからスマンけど そゅ意味じゃないのが 理解できないほどの馬鹿は ここにくるべきではない
- 334 名前:デフォルトの名無しさん mailto:sage [2019/05/02(木) 21:22:02.02 ID:H376nx5x0.net]
- >>315
「よい子は真似をしてはいけません」と言われる芸当をやっているプロになろうって人には当てはまらない
- 335 名前:デフォルトの名無しさん mailto:sage [2019/05/02(木) 21:24:27.49 ID:H376nx5x0.net]
- >>321
おまえさんこそ>>283からの話の流れを読んでるか? 人を馬鹿呼ばわりした自分の発言に責任を持てよ
- 336 名前:デフォルトの名無しさん mailto:sage [2019/05/02(木) 21:25:23.96 ID:H376nx5x0.net]
- 匿名掲示板だから逃げたければ逃げられるが
おまえさんの人間性の問題が変わるわけではない
- 337 名前:デフォルトの名無しさん [2019/05/02(木) 21:34:15.84 ID:TaSBDpemM.net]
- 馬鹿丸だし(笑)
論文ゼロの院生くずれ馬鹿ニート という雰囲気プンプンだな(爆)
- 338 名前:デフォルトの名無しさん mailto:sage [2019/05/02(木) 21:53:25.96 ID:TlCaXbcx0.net]
- 院生とかめっちゃ高評価じゃんw
俺には大学にコロコロコミックを持ってきて、全ての人間が敵に見えて毎日発狂してた同級生の江○君と被ってしまう。 頭はすこぶる良いんだけど、頭が弱い残念なアイツの雰囲気がプンプン
- 339 名前:デフォルトの名無しさん mailto:sage [2019/05/02(木) 21:55:19.32 ID:H376nx5x0.net]
- 学歴コンプレックスまる出しだな
頭隠して尻隠さずw
- 340 名前:デフォルトの名無しさん [2019/05/02(木) 22:04:26.88 ID:TaSBDpemM.net]
- 院生の意味が理解できない馬鹿(笑)
- 341 名前:デフォルトの名無しさん [2019/05/02(木) 22:05:27.60 ID:TaSBDpemM.net]
- 学歴など無意味
馬鹿は馬鹿(笑)
- 342 名前:デフォルトの名無しさん mailto:sage [2019/05/02(木) 22:06:18.25 ID:BLoepDOP0.net]
- >>319
何を言いたいのか意味不明w
- 343 名前:デフォルトの名無しさん mailto:sage [2019/05/02(木) 22:22:28.19 ID:H376nx5x0.net]
- 効いてる効いてるw
突然論文ゼロとか言い出すカモは扱いやすすぎ
- 344 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 00:28:15.71 ID:ykdjIw3IM.net]
- #include <stdio.h>
int main(void){ remove("https://mevius.5ch.net/test/read.cgi/tech/1554171817/"); return 0; }
- 345 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 03:22:53.97 ID:l9gwftmb0.net]
- 文字列を消しても実態が消えないのでは
- 346 名前:デフォルトの名無しさん [2019/05/03(金) 07:52:51.95 ID:EnpL9vkxM.net]
- Cできるけどアセンブラできない、
ってのはCもできないってことだ。
- 347 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 09:31:51.08 ID:Adh7HeMA0.net]
- アセンブラからCに行ったらアセンブラでやってたアルゴリズムがCで表現できなく、非常にもどかしくて・・・
- 348 名前: mailto:sage [2019/05/03(金) 10:16:06.44 ID:ZD3cPA9Q0.net]
- >>335
それは初耳、いや、どういうのに手こずったのか参考に教えていただけませんか?
- 349 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 17:51:44.54 ID:VHrwonhY0.net]
- 出来る出来ないっていう話なら、基本Cできるんじゃないかな。
CPU固有のブルック転送命令とかそんなのを除いて。 (それすら別にできるけどね。) 1命令でできてたことがめんどくさくなるってものならあるかも。
- 350 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 18:09:15.33 ID:Mu7G7jjV0.net]
- アセンブラで作るにしてもでもアルゴリズムで実装しているならCでも出来るんじゃないの?
- 351 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 18:10:41.96 ID:3HjiUXGl0.net]
- プラットフォーム依存の問題は言語じゃなくてコンパイラより下が解決するわけでさ、それをできると言っていいならなんでもできると思うよ。
- 352 名前: mailto:sage [2019/05/03(金) 18:51:30.00 ID:ZD3cPA9Q0.net]
- >>335
一つ思い出しました、キャリー
- 353 名前:フラグを活用するアルゴリズムは、そのままでは C でかけずに大変ですね
ローテートとかシフトとか [] - [ここ壊れてます]
- 354 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 19:20:32.29 ID:Qo5d3PXm0.net]
- >335
キャリーフラグが無くてオーバーフロー/アンダーフロー判定が面倒だとか、 ビットシフトはあってもローテーションが無いとか。 ジャンプ命令使うとパイプラインが初期化されるからなるべく使うなと聞いたのに 逆汗見たらジャンプしまくってるじゃないかとか。 8/16bit時代のアセンブラは1バイト、1ステート削って処理速度稼いでたんで 上記の差を補う処理が無駄に思えて・・・。 かといってインラインアセンブラ使うのはなんか違うと(インライン使うと最適化されないとも聞いてたし)。 それならアセンブラでCから呼べる関数書いた方がすっきりするとか。 20世紀時代のことだ。
- 355 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 19:43:11.87 ID:EWn4tN7a0.net]
- マシン語でコード書いてるときはオンレジスタ思考なのに
当時のCはデフォautoつまりオンメモリなので ああ、やはりマシン語よりは速度が落ちる言語なんだな コンパイラ言語とインタプリタ言語のような違いが もう1つあるんだなって思っていた
- 356 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 20:21:30.59 ID:B4eLqFJ00.net]
- スパゲッティなものを書いてるならともかく、真っ当にサブルーチン化してたら必要悪としてレジスタ志向は早々に諦めてたわ。
局所的に最適化するならそれは別問題として解決してた。
- 357 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 20:27:04.09 ID:EWn4tN7a0.net]
- 構造化なんか眼中になかったね
速度こそ純粋で美しい法律だった
- 358 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 20:31:26.00 ID:4Ii/FXBd0.net]
- >>340
> 一つ思い出しました、キャリーフラグを活用するアルゴリズムは、そのままでは C でかけずに大変ですね それはアルゴリズムと言うより実装の話かと
- 359 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 20:52:43.47 ID:EWn4tN7a0.net]
- PC9801のVRAMを1ドットスクロールさせるのなんか
キャリー使って書いてたのをキャリーなしで書き直させられるのは悲しかった
- 360 名前: mailto:sage [2019/05/03(金) 21:19:31.21 ID:0u/4Gvfl0.net]
- >>345
>アルゴリズムと言うより実装の話 いや、それは不思議な分類だと思います、DES/AES などはローテート・シフトがそのままアルゴリズムになるのでは?
- 361 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 22:27:22.12 ID:4Ii/FXBd0.net]
- >>347
そのアルゴリズムにキャリーフラグなんて出てこないでしょ?
- 362 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 22:32:04.75 ID:EWn4tN7a0.net]
- アルゴリズムという特定ワードに囚われて用語の定義の話に逸れていくつまらん展開だ
- 363 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 04:19:37.51 ID:qzgt3pmZ0.net]
- 文字列入力を受け付けて、それをstrという変数に代入する…というプログラムを書きたいのですが、知りたいことがあって以下のような条件を課させていただきます。
・for文を使い、その中でscanf(“%c”,str[i])により1文字ずつ文字をstrの各配列に格納していくこと ・文字数は最大50文字までとし、たとえば「abcd」などのように4文字であった場合も、abcdと入力→Enterが押された時点で、その文字列をstrに代入して、その4文字を表示して完了とする ・if文を使ってそれを実現すること #include<stdio.h> int main(void){ int i,str[50]; for(i=0;i<50;i++){ //入力処理 scanf(“%c”,str[i]); } for(i=0;i<50;i++){ //出力 printf(“%c”,str[i]); } } このコードだと、「abcd」と入力してEnterを押しただけでは、出力されません。(50文字入力されるまで入力受け付け状態から遷移しない) どのように改良すればよいでしょうか?
- 364 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 05:12:15.70 ID:Yh80Q70x0.net]
- 入力される度に文字のチェックしてみれば。
- 365 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 05:15:36.04 ID:eVIwB2YR0.net]
- >>350
宿題は自分でやれ
- 366 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 05:21:50.50 ID:I31OC90J0.net]
- 何故誰もscanf("%c", str[i])に突っ込まないのか
- 367 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 05:39:39.99 ID:RAMEL17i0.net]
- >>350
- 368 名前:「入力処理」のforループで、「50文字入力されたら」を判定してるけど、
もう一方の終了条件「Enterが押されたら」を判定してないからでしょ。 1文字受け取るごとに、Enter '\n' ならループを抜ける、をやらなきゃ。 というわけで >>315 に至る。 >>353 このスレッドの伝統かと。>>299 以下を参照のこと。 あちらはスルーしたのに、こちらでツッコむのは抵抗感がある、みたいな。 [] - [ここ壊れてます]
- 369 名前:354 mailto:sage [2019/05/04(土) 10:20:54.58 ID:RAMEL17i0.net]
- 誤: というわけで >>315 に至る。
正: というわけで >>351 に至る。 315 を確認したところ、まるっきり見当違いでもなかったね。
- 370 名前:デフォルトの名無しさん [2019/05/04(土) 10:47:02.91 ID:lguQ1Ppja.net]
- >>354
>>299は見逃していたなあ。空目だな。
- 371 名前:デフォルトの名無しさん [2019/05/04(土) 11:41:09.49 ID:yT0QTmUja.net]
- >>350
もし宿題が本当に scanf(“%c”,str[i]) と書いてある場合は先生が間違えてるので「 scanf(“%c”, &str[i]) ですよね?」とツッコミを入れてみると良い。 そうすると君はできる学生と思われて成績が上がるるか、または気に入らんやつと思われて成績が下がると思う。
- 372 名前:デフォルトの名無しさん [2019/05/04(土) 13:40:22.89 ID:tOD9kuurM.net]
- そういえば東大では今でも
C言語が必修なのか? まじ時代遅れの馬鹿だと思ってたら、 Cしかできない在日の馬鹿教員が いるのだとか
- 373 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 13:51:43.16 ID:k+B84EwL0.net]
- 学歴コンプレックスの人?
- 374 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 14:16:41.02 ID:vXlxEQ1E0.net]
- 参照型とか出てくるのにそもそも参照がなにかも理解出来てないにわかオブジェクト指向が増えるよりよっぽどマシよ
なんの言語とは言わないけども C言語なら理解しなければ先に進まないから
- 375 名前: mailto:sage [2019/05/04(土) 14:19:50.76 ID:7fnHNdb20.net]
- >>358
C が分からないようでは話にならないのでは?
- 376 名前:デフォルトの名無しさん [2019/05/04(土) 14:47:16.31 ID:tOD9kuurM.net]
- >>361
トヨタ系の研究所には Cの分かる研究員がもういないのです 研究には全く支障がないです 組込みやってる高卒やFランが Cをやるべきでしょ?
- 377 名前: mailto:sage [2019/05/04(土) 14:55:00.73 ID:7fnHNdb20.net]
- >>362
それは多分ありえない話でしょうね、なぜならば C は計算機言語の基本で、各種書籍ではアルゴリズムの記述に C を使うものが大半ですから 本も読めない人がトヨタの研究者とか、あなたの空想の話なのでは?
- 378 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 15:22:49.59 ID:Yh80Q70x0.net]
- アルゴリズムの勉強はpythonがいいよ
- 379 名前: mailto:sage [2019/05/04(土) 15:25:54.07 ID:7fnHNdb20.net]
- >>364
python で二分木の実装とかできますか?
- 380 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 16:05:03.07 ID:Yh80Q70x0.net]
- >>365
できますん
- 381 名前:デフォルトの名無しさん [2019/05/04(土) 16:07:19.80 ID:LvYM7SOrM.net]
- >>365
そんなのはFランの仕事でしょ?
- 382 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 16:13:20.77 ID:8Q7/PMC20.net]
- 論文の次はFランか、哀れだなw
- 383 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 16:49:12.48 ID:vXlxEQ1E0.net]
- やっぱり相当コンプレックスの塊で頭悪いんだろうなぁ
- 384 名前: mailto:sage [2019/05/04(土) 18:28:05.43 ID:7fnHNdb20.net]
- >>366
本当ですか?ポインタがない python では無理なんじゃないですか!?
- 385 名前:デフォルトの名無しさん [2019/05/04(土) 18:39:36.30 ID:yT0QTmUja.net]
- pythonって参照ないの?
- 386 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 18:43:01.66 ID:gINSNBZZa.net]
- 真面目に言うとpythonは基本的に全部参照渡しだね。
参照したものを直接いじれるかというとそうでない場合があるけども。
- 387 名前: mailto:sage [2019/05/04(土) 19:05:41.64 ID:7fnHNdb20.net]
- >>372
なるほど、ではユーザー定義の型は自動的に参照扱い、すなわち Java みたいなかんじなんですね であれば苦労すれば二分木を実装できますね、大変失礼いたしました
- 388 名前:はちみつ餃子 mailto:sage [2019/05/04(土) 19:18:51.61 ID:21Of2ELD0.net]
- >>370
Python に限らず動的型の言語の多くは変数に値を入れるんじゃなくて、 オブジェクトと変数の間に束縛 (bind) を作ることで成り立ってる。 辿ることでオブジェクトを参照するんだ。 実質的にポインタだよ。 むしろポインタしかない。 (小さい値 (小さい数値とか文字とか) はアロケーションを抑制するためにそのまま ワードに突っ込むような最適化をする言語 (処理系) もあるけども。)
- 389 名前: mailto:sage [2019/05/04(土) 20:22:17.94 ID:7fnHNdb20.net]
- >>374
Java ならば boxing でヒープにとる値とスタックに取る値とをある程度(意識せずに)変換できますね(そういう C/C++ like な意識が皆無ではない、という意味) ただし、二分木に関してはいいたいことがまだあって、「本物の」二分木は二重ポインタ(ポインタのポインタ)が必要なのではないか?と思っています さすがに Java には二重ポインタはない、そんな用途の言語じゃない Python や ruby にはあるのでしょうか?
- 390 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 20:55:58.63 ID:cZ5M6KFWa.net]
- 二重ポインタを何に使う?
Cだと引数でノードのオブジェクトを返す辺りか?
- 391 名前: mailto:sage [2019/05/04(土) 21:01:18.06 ID:7fnHNdb20.net]
- >>376
ノードを追加する関数add の引数を add(&root, Object) ってするでしょ?&root ってことは、struct *node のアドレス、すなわち struct node ** が必要なのではないかと
- 392 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 21:43:09.25 ID:cZ5M6KFWa.net]
- >>377
わからんが、Cでも戻り値でポインタを返せばいいんじゃないか?
- 393 名前:はちみつ餃子 mailto:sage [2019/05/04(土) 21:46:08.02 ID:21Of2ELD0.net]
- >>375
参照を持つオブジェクトへの参照を持てるんだから、事実上の二重ポインタとして使えるよ。
- 394 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 21:57:52.42 ID:8Q7/PMC20.net]
- 二重までは使うんだよなあ
三重をなぜ使わないか、説明できるか?w
- 395 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 22:09:57.55 ID:RtDHzLy60.net]
- ガベージコレクションと裸のポインタって相性が悪いような
- 396 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 22:15:35.23 ID:eVIwB2YR0.net]
- >>378
2個返したい時とか、戻り値は成功かどうかのコードを返したいとか
- 397 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 23:07:46.23 ID:cZ5M6KFWa.net]
- 道はいろいろあると思うが、せっかくあるんだから構造体使って皆くるんじゃえと思うよ。
- 398 名前:デフォルトの名無しさん [2019/05/05(日) 00:20:41.66 ID:nwgMKC8Ra.net]
- 微妙にスレチのように思うので続きはJava初心者のスレでやった方が良いのではないか?
まあ人に聞かなくても Java を勉強して Java の API のソースを読めばそういうのをどうしているのかは何れわかると思うけどね。
- 399 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 00:21:53.66 ID:tvdtPjB+0.net]
- Ruby での、Jaggy 配列は、
ary = [ ] # 配列の配列 ary.push [ "a" ] ary.push [ 1, 2 ] p ary #=> [["a"], [1, 2]] C/C++ 以外のたいていの言語では、数字などのprimitive 以外は、すべて参照。 (primitiveは参照にするよりも、その場所へ値を埋め込んだ方が速い) 外側の配列は、内側の配列の参照を持っている。 内側の配列は、(primitive以外の)各要素の参照を持っている primitive以外は、コピーしても参照がコピーされるだけで、値はコピーされない。 つまり、同一インスタンスを指す。 別のインスタンスは作られない new されていなければ、インスタンスは作られない。 代入しただけでは、参照がコピーされるだけ これを、shallow copy (浅いコピー)と呼ぶ(同一インスタンス)。 new して、別のインスタンスを作ることを、deep copy (深いコピー)と呼ぶ(別のインスタンス)
- 400 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 00:37:14.86 ID:RPhfdkos0.net]
- >>385
馬鹿は消えろ
- 401 名前: mailto:sage [2019/05/05(日) 08:54:51.63 ID:3EWrT4Pn0.net]
- >>378
それは無駄な代入が発生するでしょう?
- 402 名前: mailto:sage [2019/05/05(日) 09:01:10.92 ID:3EWrT4Pn0.net]
- >>380
余裕で三重ポインタなどほいほいと使いますよ https://mevius.5ch.net/test/read.cgi/tech/1434079972/26 void prep_exe(char *sttp, char **path, char ***argv) char **argv を使うことが理解できるのだったら「argv のアドレスを渡す」みたいな場合に渡された関数側では三重ポインタを使うことになるでしょう
- 403 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 09:04:36.94 ID:hoO1o10+0.net]
- >>388
それcodepadだろ? 使いさえすればいいって話じゃなくて
- 404 名前: mailto:sage [2019/05/05(日) 09:08:14.08 ID:3EWrT4Pn0.net]
- >>389
無論使いさえすればいい、というわけではなく、この例では小さなシェルを実装しており、シェルのパイプ機能を実装するのに三重ポインタを使ったのです
- 405 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 09:21:39.41 ID:2T/oydys0.net]
- >>387
引数を介すと代入が減るってこと?
- 406 名前: mailto:sage [2019/05/05(日) 09:47:47.39 ID:3EWrT4Pn0.net]
- >>391
代入命令が増えるという意味ではなく、「同じ値」なのに代入してしまう、という作業が >>378「戻り値でポインタを返」す方式の書き方だと不可避です
- 407 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 10:05:07.93 ID:bV6goPu10.net]
- 呼び出しの前後で、ptrの値が 同じかもしれない、場合よっては変わるかもしれない関数
ptr = func1(ptr, opt); と func2(&ptr, opt); うーんどっちも使うな…
- 408 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 10:28:11.80 ID:2T/oydys0.net]
- >>392
じゃあ、一時変数に代入しとけば?
- 409 名前: mailto:sage [2019/05/05(日) 10:29:23.05 ID:3EWrT4Pn0.net]
- >>393
前者 >ptr = func1(ptr, opt); は初心者用で、>>392 のいう無駄な代入が含まれています、二重ポインタがわかるのなら後者にするべきです
- 410 名前: mailto:sage [2019/05/05(日) 10:30:14.08 ID:3EWrT4Pn0.net]
- >>394
シンプルな記述ができるのに、わざと複雑な書き方にするのは問題なのでは?
- 411 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 10:32:32.58 ID:2T/oydys0.net]
- >>396
じゃあ、戻り値そのまま使えば? mallocは使うんでしょ?
- 412 名前: mailto:sage [2019/05/05(日) 10:33:46.84 ID:3EWrT4Pn0.net]
- >>397
その場合無駄な代入が発生しますね、>>393 がいい例を示しています
- 413 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 10:35:01.06 ID:bV6goPu10.net]
- エラー伝達に NULL を使う realloc は即代入するとお漏らししちゃうし
あれ、なん引数書き戻しにしなかったんだろう? 素朴な疑問
- 414 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 10:35:57.12 ID:2T/oydys0.net]
- >>398
代入されているのかされていないのか、わからない方が良いってこと?
- 415 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 10:36:08.55 ID:bV6goPu10.net]
- ×あれ、なん引数書き戻しに
○あれ、なんで引数書き戻しに
- 416 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 10:41:29.60 ID:2T/oydys0.net]
- >>399
正直、nullが来た時点で終わってるしなあ…。 まあでも一時変数使うのが筋だと思いますよ。戻り値でも引数でも同じこと。
- 417 名前: mailto:sage [2019/05/05(日) 11:25:51.36 ID:3EWrT4Pn0.net]
- >>400
ちがいます 代入するのか代入しないのかは malloc() したかしなかったかにかかっています。 代入は malloc() したとききだけにすればよく それが >>393 の func2(&ptr, opt); の書き方 一方 >>393 ptr = func1(ptr, opt); は malloc() したかしないかにかかわらず代入を行います、これは無駄な代入を含みます
- 418 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 11:31:24.71 ID:2T/oydys0.net]
- >>403
だから、関数の内部的に何してるのかわからんのが良いってことじゃない?
- 419 名前: mailto:sage [2019/05/05(日) 11:37:36.53 ID:3EWrT4Pn0.net]
- >>404
着目点はそこにはありません。関数による記述で内部を隠蔽するのが目的ではありません 問題は、malloc() したときだけ代入し、malloc() しなかったときには代入しない、という記述を正確にかけるかどうか…@、にかかっており >>393 ptr = func1(ptr, opt); は@を記述できる可能性が皆無、一方 >>393 func2(&ptr, opt); は@を記述できる可能性がある、というわけです
- 420 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 11:38:01.66 ID:orE8GGyod.net]
- >>393
前者の方が好ましい 2重ポインタなんて最適化の妨げになるものは、それしか使えない場面でのみ使うべき
- 421 名前: mailto:sage [2019/05/05(日) 11:44:46.28 ID:3EWrT4Pn0.net]
- >>406
非常に大きな二分木(ノートが1億個)があって、そのはるか先端で malloc() してそこで代入すればいいだけなのに、 その先端から root に戻ってくる途中の3
|

|