- 1 名前:デフォルトの名無しさん [2020/09/28(月) 14:41:30.00 ID:QxfbhGyV0.net]
- !extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください) 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/ ※前スレ C言語なら俺に聞け 155 https://mevius.5ch.net/test/read.cgi/tech/1589120427/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
- 413 名前:デフォルトの名無しさん [2021/01/03(日) 11:41:35.97 ID:TDgWBZToF.net]
- <0は終わらないじゃなくて始まらないの間違いだった
- 414 名前:デフォルトの名無しさん mailto:sage [2021/01/03(日) 13:51:43.57 ID:3NmY3eCcd.net]
- unsigned int a;
for( a = 11; a > 0; a -= 2 ) ... こんな感じのを作ってしまったことはあったな… aは1のあと65535になるので永久に終わらず aは0になる可能性もあるので条件式ではwarningも出ず
- 415 名前:デフォルトの名無しさん mailto:sage [2021/01/03(日) 14:28:17.87 ID:izXBuwpQd.net]
- >>407
#defineの値によって警告でちゃうから おせっかいイラネ
- 416 名前:ビル・ジョブズ [2021/01/04(月) 00:09:11.84 ID:V9PboY9+0.net]
- mallocとか常に成功を返すんじゃない?
問題はそのアドレスに何か操作をした時。 MMUありの前提だけど。
- 417 名前:デフォルトの名無しさん mailto:sage [2021/01/04(月) 00:29:40.79 ID:NWAwlt7F0.net]
- 実行してみないと使えるか分からないとなると
医療関係では使用禁止になるな
- 418 名前:デフォルトの名無しさん mailto:sage [2021/01/04(月) 01:03:06.31 ID:PMQqdXD/0.net]
- validation 通らないだろうねぇ
- 419 名前:デフォルトの名無しさん mailto:sage [2021/01/04(月) 07:24:09.81 ID:Nz2iXOdN0.net]
- >>413
メモリーオーバーコミットの話をしたいんだろうけどLinuxとかでも設定によるし>>414の言うように医療やECU等のようにそんなもんが許されない組込系の機器もあるから環境によるとしか言えんわな
- 420 名前:デフォルトの名無しさん [2021/01/05(火) 12:05:40.60 ID:G8BimKKu0.net]
- 宇宙関係も無理やろね
- 421 名前:デフォルトの名無しさん mailto:sage [2021/01/05(火) 12:12:18.79 ID:8w5sr2J0d.net]
- 失敗が絶対に許されないならmallocとか使うな
スタティックで確保しろ
- 422 名前:デフォルトの名無しさん mailto:sage [2021/01/05(火) 13:27:41.97 ID:zIEcR2TW0.net]
- 一つのファイルポインタで読み書きする場合、読みと書きを切り替えるときに
fseek(fp,0,SEEK_CUR)等を挟むことはANSI Cにも書いてるわけですが、 挟まなくていい環境(Linuxとか)もありその実装上の違いってどうなってるんでしょうか? バッファゼロにしてもfseekが必要なので、バッファリングってわけでもなさそうです。
- 423 名前:デフォルトの名無しさん [2021/01/05(火) 13:36:43.08 ID:sz7Oy+6E0.net]
- https://github.com/gcc-mirror/gcc
ここからwindowsのfseekとlinuxのfseekを見つけ出す
- 424 名前:はちみつ餃子 mailto:sage [2021/01/05(火) 14:23:40.55 ID:N7gEH2Zs0.net]
- C の規格では OS とかの支援のない 「フリースタンディング」な環境にも言及していて、
フリースタンディング処理系は標準ヘッダ float.h iso646.h limits.h stdarg.h stdbool.h stddef.h stdint.h の内容に限定した機能が用意されてればよいことになってる。 malloc は stdlib.h だから無くても規格合致フリースタンディング処理系と名乗れる。
- 425 名前:デフォルトの名無しさん mailto:sage [2021/01/05(火) 16:33:30.17 ID:9HicEvTUd.net]
- >>413
あり得ない malloc()で==NULLテストして「メモリーが足りません終了します」とかする事はできるが 確保した変数に読み書きした瞬間のエラーは感知する方法がないので そこでエラーにされてもコアダンプして終了するしかない ユーザー側から見たら未完成プログラムである
- 426 名前:デフォルトの名無しさん mailto:sage [2021/01/05(火) 16:45:24.18 ID:7nbNqUCud.net]
- ユーザーからしたら
エラーメッセージを出そうが突然死だろうが メモリが足りなくなる事自体不完全プログラムだ エアバッグが作動するときに、 [メモリ不足で動作できませんでした] なんて表示されても何の意味もない
- 427 名前:はちみつ餃子 mailto:sage [2021/01/05(火) 16:47:22.16 ID:N7gEH2Zs0.net]
- >>422
やっとる (環境も多い) やろがい。
- 428 名前:デフォルトの名無しさん mailto:sage [2021/01/05(火) 17:03:07.78 ID:9HicEvTUd.net]
- >>423
それなら「エアバッグの数が多すぎるんだな」とか推論できるが なんのメッセージもなく作動しなかったらユーザーはスピードメーター、ショックセンサー、安全装置などあらゆる関連部分を点検しなければならない
- 429 名前:デフォルトの名無しさん mailto:sage [2021/01/05(火) 18:07:14.87 ID:dzUtU5Ds0.net]
- そんな事はユーザーからすればどうでもいい
不完全な事にはかわりない
- 430 名前:デフォルトの名無しさん mailto:sage [2021/01/05(火) 18:09:46.84 ID:9HicEvTUd.net]
- ソフト作ったことない人だねw
メッセージの有無はバグが起きたときの対処に大きな違いがある
- 431 名前:デフォルトの名無しさん mailto:sage [2021/01/05(火) 18:13:12.71 ID:dzUtU5Ds0.net]
- メッセージの有無なんかよりも
動作するかどうか の方がはるかに重要 メモリ確保が失敗する可能性があるところで 失敗が許されない動作に対してmallocを使うのが間違い
- 432 名前:デフォルトの名無しさん mailto:sage [2021/01/05(火) 18:15:35.99 ID:dzUtU5Ds0.net]
- 適切なエラー処理をすればそれで十分
ソフト設計者のしたっぱの発想
- 433 名前:デフォルトの名無しさん [2021/01/05(火) 18:35:11.65 ID:zMZuOoIk0.net]
- >>423
読む人がいないならメッセージも無意味.
- 434 名前:デフォルトの名無しさん mailto:sage [2021/01/05(火) 18:47:10.76 ID:oFYQTpSv0.net]
- 確保できないと返ってくれば対処方法はあるだろう
OK返されたあと、実際に使おうとしたら実はってなると その分リカバリーが複雑になる
- 435 名前:デフォルトの名無しさん mailto:sage [2021/01/05(火) 19:00:03.87 ID:K71kt7oj0.net]
- ここの人はOOM Killerも知らんのか?
確保したプロセスが死ぬとは限らんのだが… https://reboooot.net/post/kernel-params-related-to-oom-killer/
- 436 名前:デフォルトの名無しさん mailto:sage [2021/01/05(火) 19:39:22.64 ID:eT+iPfAP0.net]
- 確保しようとしてエラーになったなら対処のしようもあるが、空手形乱発していざとなったら
関係ないプロセスが殺されるってのも困ったもんだよな。 初期のOSXはOOM Killerのような仕組みもなくてシステム全体が固まってたな。
- 437 名前:デフォルトの名無しさん mailto:sage [2021/01/05(火) 19:58:11.78 ID:dzUtU5Ds0.net]
- >>431
1秒後に再度確保? バカ丸出し
- 438 名前:デフォルトの名無しさん mailto:sage [2021/01/05(火) 20:01:22.72 ID:8cFKE+AV0.net]
- お行儀よく死ぬ機構があるかどうか
- 439 名前:デフォルトの名無しさん mailto:sage [2021/01/05(火) 21:50:05.77 ID:9HicEvTUd.net]
- >>428
話が変わってるぞw 論理的に思考できない根本的にプログラマー向きじゃない人だな >>429 どんな適切なエラー処理をすればいいのか ご教示願いたいw
- 440 名前:デフォルトの名無しさん mailto:sage [2021/01/05(火) 22:27:33.74 ID:K71kt7oj0.net]
- >>436
> どんな適切なエラー処理をすればいいのか ケースバイケース 前提示さずにこんな質問する奴はプログラマーに向いてない
- 441 名前:デフォルトの名無しさん mailto:sage [2021/01/05(火) 23:58:57.29 ID:zD1ciQHW0.net]
- OOM Killer は、Kubernetes のリソース制限の基本。
Linux のnamespace, cgroup 例外は、 アプリ例外は業務上のエラーだから、アプリで処理すべき。 システム障害などは、アプリで処理できる例外ではない
- 442 名前:デフォルトの名無しさん mailto:sage [2021/01/06(水) 00:01:25.01 ID:WT+BV7/+0.net]
- その分類上、メモリ確保失敗はアプリで処理すべきなのかどうかわかんなくない?
- 443 名前:デフォルトの名無しさん mailto:sage [2021/01/06(水) 00:46:50.28 ID:g4fxgipO0.net]
- mallocに失敗したらローカルで確保してみる
それが駄目なら一時ファイル作ってそこに格納する 他にも手はありそうだ
- 444 名前:デフォルトの名無しさん mailto:sage [2021/01/06(水) 01:23:26.66 ID:8o6ePSWp0.net]
- >>440
ねーよ間抜け
- 445 名前:デフォルトの名無しさん mailto:sage [2021/01/06(水) 03:55:31.45 ID:Sqdcyjlhd.net]
- >>437
ケースバイケース言いたいだけだったのかw >>428 new使うだけでmallocされるのにそんな化石みたいなこと言われても
- 446 名前:デフォルトの名無しさん mailto:sage [2021/01/06(水) 05:25:17.33 ID:kVhO/tYW0.net]
- >>440
> mallocに失敗したらローカルで確保してみる ローカルが何を意味してるのかわからんがローカル変数のことならはじめからローカル変数で確保しておくべき
- 447 名前:デフォルトの名無しさん mailto:sage [2021/01/06(水) 05:28:43.74 ID:kVhO/tYW0.net]
- >>442
> ケースバイケース言いたいだけだったのかw 言いたいだけって言うかそれ以外に言いようがないだろw マジで言ってるならプログラマー失格レベル
- 448 名前:デフォルトの名無しさん [2021/01/06(水) 07:24:13.29 ID:bGGeDo6wM.net]
- アプリケーション開発しかやったことないのでシビアな状況のプログラムってのがよくわかってないけど
通常のプログラムだったらNULLが帰ってきたら終了だろうね 失敗が許されない環境で、もしメモリを使い果たして確保できないような状況の場合は失敗が許されないのにメモリを使い果たすようなプログラム自身を改善した方が良いような ファイルから必要なデータだけを読み込むようにして使い終わったメモリは開放するとか メモリを使い果たして無いのに失敗する可能性とかだったら、標準関数の正常な役割が信用できないという事になるのでプログラム言語自体使えなくなるよね C/C++だけじゃなくて それならアセンブラで直接書くしか無くなるのでは この場合だったら「たらーれば」の言いがかりにしか聞こえないけど
- 449 名前:はちみつ餃子 mailto:sage [2021/01/06(水) 09:52:33.41 ID:NVCaEro60.net]
- そこんところはホスト環境・開発システムがどこまで保証するかという話になるので、
各環境で十分な保証があるなら使えばいいし、保証がないなら使えないというだけのことでは。 私も実態を知ってるわけじゃないが組み込み開発だったら 実際には保証というか自分たちで検証することも多いと思うが。
- 450 名前:デフォルトの名無しさん mailto:sage [2021/01/06(水) 15:10:46.82 ID:6EEBy3Y5d.net]
- Linux系にはヒープの上限を設定できないの?
よくある入門書にはnewで敵キャラでもエフェクトでも作って動かしましょうみたいなのがよくあるが それやって消すのを忘れると一日動かしてるとかなりの容量になり突然システムが止まる 懐かしいシングルタスクOSの時代と変わらんw Win16や32だとローカルヒープは上限があって一杯になってもアプリが止まるだけでシステムは続行できた
- 451 名前:デフォルトの名無しさん mailto:sage [2021/01/06(水) 15:49:09.66 ID:kVhO/tYW0.net]
- >>447
> Win16や32だとローカルヒープは上限があって一杯になってもアプリが止まるだけでシステムは続行できた それはプロセス単位の制限だろ、man ulimit でググってこい OOM Killerとかはシステム全体の話な
- 452 名前:デフォルトの名無しさん mailto:sage [2021/01/06(水) 16:05:04.01 ID:QohpZ5Jnd.net]
- >>446
Cスレだから組み込み系が話題の中心だと思ってたが PCのアプリをCで書くなんて人がいまだにいるの?
- 453 名前:はちみつ餃子 mailto:sage [2021/01/06(水) 17:27:30.00 ID:NVCaEro60.net]
- >>449
ロジック部分を C で書くことはもうあまりないかもしれんが、 低レイヤや速度チューニングがなくなるわけではないからなぁ。 コードの総量に C が占める割合は少ないにしても C が (一部には) 使われているものはまだまだあるんじゃね?
- 454 名前:デフォルトの名無しさん mailto:sage [2021/01/06(水) 17:33:29.06 ID:QohpZ5Jnd.net]
- アプリの速度チューンならC++で良いと思うんだが
なぜC?
- 455 名前:デフォルトの名無しさん mailto:sage [2021/01/06(水) 18:33:49.31 ID:m3At07SYM.net]
- >>447
ulimit -d でできるぽいね
- 456 名前:デフォルトの名無しさん mailto:sage [2021/01/06(水) 18:53:37.18 ID:kVhO/tYW0.net]
- >>449
LinuxのカーネルとかApacheとか未だにC言語は残ってるよ 新規は少なくなっていくだろうけどCOBOLと同様にメンテでは当面使い続けられると思うぞ
- 457 名前:デフォルトの名無しさん mailto:sage [2021/01/06(水) 19:00:16.49 ID:A7AJXFBH0.net]
- カーネルがmallocで失敗???
システムごと死ぬだろ
- 458 名前:デフォルトの名無しさん mailto:sage [2021/01/06(水) 20:05:41.96 ID:6EEBy3Y5d.net]
- >>448
だからアホなアプリ一個でシステムが止まるなんて前世紀の話か?と聞いてるんだよね それともここはシステム関連の話だけか? mallocの仕組みもしらずにシステムいじろうなんて命知らずの人だねw >>452 シェルコマンドじゃなくて このアプリちょっと試してみてよ、と他人に渡した時に行儀よくできるような言語自体のオプションはないものかな mallopt()が近いみたいだけど英語ドキュメントしかないや
- 459 名前:デフォルトの名無しさん mailto:sage [2021/01/06(水) 20:50:30.31 ID:kVhO/tYW0.net]
- >>455
> だからアホなアプリ一個でシステムが止まるなんて前世紀の話か?と聞いてるんだよね だから OOM Killer でググってこいよ システムを止めるかどうかは設定によるし、Windows でもメモリー逼迫したら不安定になるから > シェルコマンドじゃなくて https://linuxjm.osdn.jp/html/LDP_man-pages/man2/setrlimit.2.html そもそもシェルから設定できるのにプログラムから設定できないわけ無いだろ プログラマーの素養なさ過ぎ
- 460 名前:デフォルトの名無しさん mailto:sage [2021/01/06(水) 20:52:54.12 ID:3ZsNazx6d.net]
- C言語なんだから無条件でPC前提にするのやめようぜ
- 461 名前:デフォルトの名無しさん mailto:sage [2021/01/06(水) 20:58:31.92 ID:3ZsNazx6d.net]
- Windowsでも
プロセスとスレッドのプライオリティを上げて メモリを大量に使えば スワップしまくって激重になって 事実上システムが死ぬけどね
- 462 名前:デフォルトの名無しさん mailto:sage [2021/01/06(水) 20:59:44.32 ID:3ZsNazx6d.net]
- アプリ1個でシステムダウンさせるのはそれほど難しくない
- 463 名前: mailto:sage [2021/01/06(水) 21:09:38.92 ID:yUU4KxYw0.net]
- >>459
さすがにそれは不可能では?win3.1 ならまだわかるのですが‥‥
- 464 名前:デフォルトの名無しさん mailto:sage [2021/01/06(水) 21:12:39.72 ID:3ZsNazx6d.net]
- プライオリティの高いスレッドをたくさん作って無限ループすれば死ぬ
- 465 名前:デフォルトの名無しさん mailto:sage [2021/01/06(水) 21:17:12.89 ID:3ZsNazx6d.net]
- プライオリティ31のスレッドを論理コア数分作ればマウスカーソルも止まる
- 466 名前:デフォルトの名無しさん mailto:sage [2021/01/06(水) 22:06:17.54 ID:FKs+KUNY0.net]
- 間違えてforkしまくるスクリプト実行してしまって何もできなくなった
- 467 名前:デフォルトの名無しさん mailto:sage [2021/01/06(水) 22:06:21.76 ID:6EEBy3Y5d.net]
- いや別に知恵を絞って無理に止める話はしてないじゃんw
うっかりミス程度で止まったらおそろしいなあ気楽にプログラミングもできないなあって話
- 468 名前:デフォルトの名無しさん mailto:sage [2021/01/06(水) 22:38:40.29 ID:g4fxgipO0.net]
- うっかりシステムをフォーマットしてしまうこともあるしな
- 469 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 00:44:03.16 ID:Vx7SD3qO0.net]
- うっかりプライオリティの高いスレッドをいっぱい作っちゃった場合の話
- 470 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 02:16:41.45 ID:yeIMGQh50.net]
- 何の話してたか忘れた
- 471 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 15:11:57.86 ID:9QJGSme00.net]
- mallocを使っていても総使用量の最大は見積もっとけって話
- 472 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 16:20:03.10 ID:DL1zbij8d.net]
- 総使用量に対してメモリが十分あっても
フラグメントで確保出来ないかもしれない
- 473 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 17:22:12.04 ID:6v7F/BUW0.net]
- malloc をラップして
オレオレアローケーターで一括で確保して使いまわそうとすると malloc の実装とほとんど変わらんよな?って気分になる
- 474 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 17:32:32.97 ID:DL1zbij8d.net]
- 固定長が多ければ専用化の価値が大きい
- 475 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 17:50:56.57 ID:9QJGSme00.net]
- >>469
malloc実装してみな フラグメントなんてどんな程度の問題かわかるから
- 476 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 19:23:46.37 ID:jTCzKEfy0.net]
- とあるスコープ内だけで有効なヒープで、さらにスコープから抜けると開放したい
という用途でがんばった
- 477 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 20:07:04.52 ID:b6arBunA0.net]
- 何十日何百日稼働するソフトならそれなりに効いてきそうだけど<フラグメント
- 478 名前: mailto:sage [2021/01/07(木) 20:08:45.38 ID:gAnZzjje0.net]
- >>473
alloca()
- 479 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 20:19:01.01 ID:jTCzKEfy0.net]
- >>475
ほしかったがなかったのだ
- 480 名前: mailto:sage [2021/01/07(木) 21:26:54.87 ID:gAnZzjje0.net]
- >>476
C にはデストラクタがないから、C の範囲で実現するのは困難ですね alloca() の実装は、ライブラリだけでは処理できずにコンパイラ側の支援が必要だと思いますので、標準ライブラリには入りにくいでしょうね
- 481 名前:デフォルトの名無しさん mailto:sage [2021/01/07(木) 21:43:59.65 ID:jTCzKEfy0.net]
- >>477
longjmp は対象外とし 完全自動は諦めてスコープの外に回収関数を置く紳士協定で手打ちに
- 482 名前:デフォルトの名無しさん mailto:sage [2021/01/08(金) 00:02:52.02 ID:RWydUoCr0.net]
- >>472
フラグメントで確保出来ない事があったわけだけど
- 483 名前:デフォルトの名無しさん mailto:sage [2021/01/08(金) 00:51:10.08 ID:aEO+ezsE0.net]
- 使ってるアロケータの実装が何なのか, とどう使っているか示さないと何の意味もない
K&R mallocに毛が生えた程度のmalloc (Tronとか)ならものすごい勢いで断片化するし glibc mallocとかのbest fitアロケータを使う分には断片化はかなり起こりにくい あとメモリリークじゃないことは間違いないんだよね?
- 484 名前:デフォルトの名無しさん mailto:sage [2021/01/08(金) 05:16:18.16 ID:gKD5AY0L0.net]
- >>479
>>388を再度問う
- 485 名前:デフォルトの名無しさん mailto:sage [2021/01/08(金) 08:53:26.45 ID:/42fFLGad.net]
- C言語スレなのに組み込みやったことないヤツばっかりってのが不思議
>>480 アロケータの実装次第で断片化がおこる と自分で書いてるわけだ それが答え どんな優れたアルゴリズムでも 断片化はおこるんだけど 完全に未来が予測出来る神アルゴリズムでも
- 486 名前:デフォルトの名無しさん mailto:sage [2021/01/08(金) 09:11:57.78 ID:yPaAOWPid.net]
- Go/C/C++以外に直接システムコールしてる言語ってありますか?
- 487 名前:デフォルトの名無しさん mailto:sage [2021/01/08(金) 09:18:29.89 ID:/42fFLGad.net]
- アセンブラ
- 488 名前:デフォルトの名無しさん mailto:sage [2021/01/08(金) 09:37:02.14 ID:MUX0m4u5M.net]
- c/c++もアセンブラ使わないとシステムコール呼べないけどな
- 489 名前:デフォルトの名無しさん mailto:sage [2021/01/08(金) 12:03:05.57 ID:lqJPJl/10.net]
- CALL 5 が使える言語は全部大丈夫
- 490 名前:デフォルトの名無しさん mailto:sage [2021/01/08(金) 12:52:43.97 ID:0DW9z0rLM.net]
- >>486
call 5って何のこと?
- 491 名前:はちみつ餃子 mailto:sage [2021/01/08(金) 14:24:17.01 ID:PuoTeu6a0.net]
- >>477
VLA があれば alloca は要らん。 上限が見積もれないときはいずれにしても使うべきではないが……。
- 492 名前:デフォルトの名無しさん mailto:sage [2021/01/08(金) 14:34:20.89 ID:NkKDsd1u0.net]
- CALL 5ってシステムコール一般の事を指してるのかな?
CALL 5はCP/Mから引き継いだMS-DOSのファンクションコールか ふつうMS-DOSはINT 21Hって内部割り込みつかってたけどCALL 5もできたそうな
- 493 名前:デフォルトの名無しさん mailto:sage [2021/01/08(金) 15:15:28.39 ID:/42fFLGad.net]
- 直接システムコール
の定義によってはどの言語でも出来るし 定義によってはどの言語でも出来ない 質問者は定義を明確に
- 494 名前: mailto:sage [2021/01/08(金) 19:43:55.15 ID:cUApPko30.net]
- >>488
でも VLA は C++ では非推奨でしょう? というか C であっても VLA の格納位置がスタックなら、それこそ悪意を持つクラッカに格好の餌をやっているとしか思えません‥ C99 or later では「VLA の確保場所をスタック禁止でヒープとする」という縛りはあるのでしょうか?
- 495 名前: mailto:sage [2021/01/08(金) 21:47:27.82 ID:cUApPko30.net]
- >>491,448,477
いろいろ調べたところ、私が間違っていることがわかりました、つまり alloca() はスタックに配列を確保する実装とのことだそうです つまり alloca() は setjmp/longjmp と同じ「C で記述できない」関数ということになりますね‥‥
- 496 名前:デフォルトの名無しさん mailto:sage [2021/01/08(金) 22:26:35.55 ID:gKD5AY0L0.net]
- だからこそ標準に組み入れられているんだよ
非標準でどうしろと言うのか考えろ
- 497 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 13:37:23.88 ID:lvRTpcj70.net]
- アセンブラで作ったサブルーチンをそうとは知らずに呼べるのはCの良いところ
- 498 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 14:13:13.77 ID:wanRtpand.net]
- それだけならC++でも
- 499 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 16:16:23.92 ID:fHVxD+CU0.net]
- 知らずに呼べるって、それアセンブラ側でC呼び出し規約で書いてあげたからじゃね。
- 500 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 16:42:31.78 ID:lvRTpcj70.net]
- ABIちゅーもんがあってだな
- 501 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 17:00:45.39 ID:fHVxD+CU0.net]
- だからそう言ってる。Pascal規約で書けばPascalから呼べたり。
- 502 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 17:08:25.76 ID:L3ZBilIB0.net]
- フルアセンブラなら
パラメーターの渡し方は自由 独自のスタック構造だろうが レジスタだろうが 臨機応変に出来る 今時フルアセンブラなんて事は非常に稀で C/C++の呼び出し規約に従うのが普通 というだけ
- 503 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 17:10:33.54 ID:L3ZBilIB0.net]
- 今でも超小規模マイコンだと関数コールの構造をとらないフルアセンブラコードを使う事がある
- 504 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 17:52:11.58 ID:lvRTpcj70.net]
- __declspec(naked)とか__attribute__((naked))とか
- 505 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 18:48:02.08 ID:fHVxD+CU0.net]
- それexternで宣言できないから、アセンブラで書いたルーチンを呼ぶためのものじゃなくて
従来アセンブラを使わないと書けなかったルーチンをCのインラインアセンブラで書くためのものじゃね?
- 506 名前:デフォルトの名無しさん [2021/01/09(土) 19:47:19.13 ID:gjIQ6YZR0.net]
- 純粋なC言語プロジェクトとして作るより
C++プロジェクトとして作ってCコードを書いた方が 利用可能なライブラリが増えるしほぼ上位互換、という考えは合ってる?
- 507 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 19:51:04.00 ID:Z+DmrKyh0.net]
- >>503
それ多分C++コードだと思う
- 508 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 20:16:57.05 ID:kPw1IBO30.net]
- >>494
それができない言語の方が珍しいと思うけど?
- 509 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 20:17:11.62 ID:OS8QkCVT0.net]
- C++のベターC的な使い方であってpureなCとうまく連結できるかというと…
- 510 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 20:18:36.46 ID:kPw1IBO30.net]
- >>503
合ってる、いわゆるベターCって奴
- 511 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 21:18:21.63 ID:lvRTpcj70.net]
- DLLなんかどこの馬の骨言語/コンパイラ/アセンブラで作られたかもわからんものを当たり前に使えるだろ
- 512 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 22:58:21.36 ID:L3ZBilIB0.net]
- それはDLLで呼べるように作ってあるからであって
- 513 名前:デフォルトの名無しさん mailto:sage [2021/01/09(土) 23:00:18.51 ID:L3ZBilIB0.net]
- 別にCの特徴でもない
|

|