1 名前:デフォルトの名無しさん [2021/06/28(月) 11:22:51.50 ID:so+vl3vs0.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言語なら俺に聞け 156 https://mevius.5ch.net/test/read.cgi/tech/1601271690/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2 名前:デフォルトの名無しさん mailto:sage [2021/06/28(月) 11:26:33.76 ID:so+vl3vs0.net] 前スレ末期の流れを再掲 > 996 自分:デフォルトの名無しさん (ワッチョイ 0f45-Sffs)[sage] 投稿日:2021/06/28(月) 09:33:23.09 ID:so+vl3vs0 [1/2] > printf("%d", sizeof (char)123); とやろうとしたら > キャストのカッコがsizeofのカッコと解釈されてエラーになるのな > printf("%d", sizeof((char)123)); ならおkなんだけど > なんだか気持ち悪い > > 997 返信:デフォルトの名無しさん (ワッチョイ cf05-Ibo0)[sage] 投稿日:2021/06/28(月) 10:13:18.97 ID:x/UkG1ge0 > >>996 > sizeofって括弧なしで使えるの? 知らなかった > > 998 返信:デフォルトの名無しさん (ワッチョイ 0fda-qjGA)[sage] 投稿日:2021/06/28(月) 10:20:43.69 ID:WejOUFlX0 > >>996 > sizeof演算子の優先順位はcast演算子の優先順位より高いので、括弧がないと > まず最初にsizeofと数値リテラルが評価されてその後でその結果をcastで評価するという > おかしな状態になるのでエラーになったのでは? > > 999 自分:デフォルトの名無しさん (ワッチョイ 0f45-Sffs)[sage] 投稿日:2021/06/28(月) 10:38:03.51 ID:so+vl3vs0 [2/2] > sizeofとキャストはどちらも単項式なので右から結合するはず > にも関わらずキャストが先に読まれないので気持ち悪いと言ったんだ > 字句解析と意味解析ってことかな > > 1000 名前:デフォルトの名無しさん (ワッチョイ 0fd2-kMi9)[] 投稿日:2021/06/28(月) 11:05:48.75 ID:HW6dR9O/0 > そもそも > sizeof (char) > paだけでいいものをそう記述してるのが気持ち悪い。
3 名前:デフォルトの名無しさん mailto:sage [2021/06/28(月) 11:28:49.59 ID:so+vl3vs0.net] >>前スレ1000 いやcharのサイズが知りたいのではなく キャスト式(char)123のサイズを調べようとしたんだ Cはchar変数の値を使おうとするとintに拡張するし文字定数もint型なので char型の値を持つ式なんてあるのかって
4 名前:デフォルトの名無しさん mailto:sage [2021/06/28(月) 11:37:03.08 ID:XSoi24UgM.net] cppreferenceのc operator precedenceの項の注釈によるとオペアンドはtype castにはできないって書いてあるね。ただ仕様書の該当箇所は探せなかった
5 名前:デフォルトの名無しさん mailto:sage [2021/06/28(月) 11:58:43.53 ID:so+vl3vs0.net] 脚注2は俺が気持ち悪いと言ったことと似てるけどsizeof(int)*pが (sizeof(int)) * pという算術乗算になるという話なら単項式のsizeofより優先順位が低いからまだわかる
6 名前:デフォルトの名無しさん mailto:sage [2021/06/28(月) 12:57:31.08 ID:XSoi24UgM.net] A.2.1が引用元みたいなんで読んでみるとsizeof (int)123はダメだね。 sizeof +(int)123なら動くようだ。sizeof (int){1}も動きそう。
7 名前:デフォルトの名無しさん mailto:sage [2021/06/28(月) 15:54:14.85 ID:so+vl3vs0.net] あーそうか A.2.1. (6.5.3)では unary-expressionに該当するものの1つに unary-operator cast-expressionがあるけど unary-operatorにキーワードsizeofが含まれず、 カッコなしのキャスト式は sizeof unary-expressionとなっていて sizeof cast-expressionではないってことか
8 名前:デフォルトの名無しさん [2021/06/29(火) 00:32:13.44 ID:jRoYjmsV0.net] ところで sizeof((char) 123) と sizeof(char) って同じことだよな?
9 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 01:01:59.00 ID:cYz04uBKM.net] ポインタキャストは敷居線さえ跨がなきゃ思い通りの値出てくるけど 数値キャストは難しいんだよな
10 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 01:04:11.67 ID:lZY/6JCta.net] >>8 GCC 9.3.0 では両方とも 1 でした
11 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 01:05:05.10 ID:cYz04uBKM.net] printf さんの独自性もあるし
12 名前:デフォルトの名無しさん [2021/06/29(火) 02:00:52.74 ID:jRoYjmsV0.net] >>10 ていうかやるまでもなく結果が同じにならないとおかしいよね。 一方は値を char 型にキャストしているんだから sizeof の結果は char 型のサイズになる。 もう一方は char 型のサイズを求めているから char 型のサイズになる。
13 名前:はちみつ餃子 mailto:sage [2021/06/29(火) 04:29:15.93 ID:OP5z1lEO0.net] 二項演算子のいくつかでは汎整数拡張が適用されることになっているが sizeof に渡す分には char のオブジェクトは char のオブジェクトだよ。
14 名前:デフォルトの名無しさん [2021/06/29(火) 08:37:44.49 ID:F75/2W0I0.net] char型 + char型 の式でもint型に拡張されるんだっけ?
15 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 13:20:32.79 ID:f0Xm8hptd.net] もち 単項プラスでさえ拡張する
16 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 13:41:07.94 ID:dKjX5GmV0.net] typedefによる新しい型の定義って、コンパイラの工程的にはどの工程で定義されるの? 字句解析?構文解析?プリプロセスじゃないよね
17 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 14:16:01.66 ID:NxeKtV2S0.net] 質問が間違ってる気がするけどね。 コンパイルレベルで処理されるのか、リンクするまで処理されないのか、でしょ。 で、typedefは前者
18 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 20:18:28.43 ID:SX14oDOe0.net] 翻訳段階の何番目でやってんのかって質問だろ
19 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 20:52:30.02 ID:0ahpifum0.net] 構文解析の後 typedef と認知したうえで、シンボルのテーブルに追加してかないと 置換?読み替え?はできないよねぇ… C言語は、その構造上1回の通読では解決できないんだっけ?
20 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 21:06:15.61 ID:SX14oDOe0.net] 5.1.1.2 Translation phasesくらい読んでから来いよ
21 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 22:00:49.44 ID:NxeKtV2S0.net] だからぁw 構文解析ってのはパーサね?w←これは例えばbisonで作るやつね?w 字句解析ってのはレキシカルアナライザね?w←これは例えばflexで作るやつね?w レキシカルアナライザかパーサかって、そもそもレキシカルアナライザってのは 字句区切るだけだよwそれをどんな命令であるかを解釈を決めるのが構文解析ねw コンパイルの1pass,2passって話なら、まあそれでもいいけどさw 用語がでたらめすぎんでしょ。 だいたいそんなこと知ってどうするんだよ?w
22 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 22:05:17.86 ID:gp7v5PNW0.net] セキュリティホール探し?
23 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 23:35:14.00 ID:dKjX5GmV0.net] Cの構文解析器実装してるんだけどBNFのtypedefの扱いがイミフなんだよねー
24 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 23:57:55.23 ID:NxeKtV2S0.net] >>23 またぁw BNF関係ないでしょうw つか、typedefなんて意味不明なんてことはないと思うけど。 特定の記法のことを指してるの?BNFで書かれた typedefの規則が読みとれないって言ってるの?w typedef struct {...}; と struct {...} xxx; を区別できないとかそんな話? よくわかんないけど、変に切り出すんじゃなくて、 ストレートにこれがやりたいけど、これどうしたらいいか わかんない、って聞く方がいいと思うんだが。 なにいってんだか、知ってる人ほど却ってわかんねーと思うんだが。
25 名前:デフォルトの名無しさん mailto:sage [2021/06/30(水) 00:35:54.93 ID:dsegDYOD0.net] typedefがstorage-class specifierに属してることを言ってるなら 構文上の便宜のためだけ(for syntactic convenience only)って6.7.1(5)に書いてあるけど Annexのsyntax summaryだけ見てる感じかな かなりエスパーしてるから的外れだったらすまぬ
26 名前:デフォルトの名無しさん mailto:sage [2021/06/30(水) 01:02:59.78 ID:xHlidKVh0.net] みなさんレスありがとう 「C BNF」でググって一番上に出るBNFを参考に実装しているんだけど、BNFが古いせいかtypedefの構文が欠落してるような気がして(気のせいでした。↓のレス参照) でも<typedef-name>という要素はあるからtypedef機能自体はあるらしい BNFに書いてないってことは構文解析以前の処理になるのかもしれないと思ってここで聞いてみたんだけど 混乱した人もいるみたいですまない >>25 あー!そういうことですか なるほど疑問が解けました typedefをspecifierで扱ってるわけですね ありがとうございます
27 名前:デフォルトの名無しさん mailto:sage [2021/06/30(水) 06:48:58.92 ID:tpFz8l2w0.net] typedefがないってことはK&R Cか 規格票でもドラフトでもいいから拾って読んでみ www.open-std.org/jtc1/sc22/wg14/
28 名前:デフォルトの名無しさん mailto:sage [2021/06/30(水) 09:43:56.46 ID:xHlidKVh0.net] >>27 参照してるBNFはおそらくK&R Cですね 関数の宣言が古いスタイルになっているので ありがとうございます、参照してみます
29 名前:デフォルトの名無しさん mailto:sage [2021/07/17(土) 09:12:05.75 ID:17h8nqYk0.net] リスト型構造体配列って他の言語でもあるのでしょうか? 現在職業訓練で勉強中なのですが、独学でやらないといけない範囲のようでして、 時間的余裕があまりない状態です。 他言語でも似たような考えが出てきて、Cで覚えておくと役立つなど ございましたら、頑張って挑戦してみようと思っています。
30 名前:デフォルトの名無しさん mailto:sage [2021/07/17(土) 12:16:52.25 ID:xP6i4weKM.net] リスト型構造体配列ってのは講師の人の自作用語? それなら定義を示してもらわんと。
31 名前:デフォルトの名無しさん mailto:sage [2021/07/17(土) 12:38:05.00 ID:+M7J9sQi0.net] リンクリストなら他の言語にもある 普通は配列とは言わないからその言葉は謎だけど……
32 名前:デフォルトの名無しさん mailto:sage [2021/07/17(土) 13:34:21.36 ID:e6axNbpd0.net] ポインタの代わりに配列のインデックスを保持してるような感じなのかね? リスト型構造体配列
33 名前:デフォルトの名無しさん [2021/07/17(土) 16:17:40.91 ID:USprSk230.net] C99かそれ以降の標準的な環境において (bool)someval と !!someval って(例外なしに)全くおなじ効果を生むと思っていいですか。 前者はJISX3010の6.3.1.2などで「値が0になるなら0,それ以外なら1」と書かれている一方, 後者は(初学者なので経験がなく,正しい認識ではないかもしれませんが)慣用的な書き方なので 規格票にも書かれておらず,正確に同じ意味なのかどうかを確かめられませんでした。
34 名前:デフォルトの名無しさん mailto:sage [2021/07/18(日) 00:36:46.74 ID:vIcCvIPT0.net] >>33 「意味するところは全く違うが、結果だけ見れば全く同じ」です。
35 名前:デフォルトの名無しさん [2021/07/18(日) 01:19:32.77 ID:euqgtMPHa.net] bool型が導入されたことで得られるメリットはは何かあるでしょうか またデメリットはあるでしょうか
36 名前:デフォルトの名無しさん mailto:sage [2021/07/18(日) 07:53:07.50 ID:OEfNT0QGM.net] メリットは、必ず真偽値になること デメリットは、必ず真偽値になってしまうこと 例えばエラーコードのようにいい加減な経緯で拡張していくことはできない
37 名前:ハノン mailto:sage [2021/07/18(日) 09:54:45.66 ID:9YAoR/6C0.net] >>35 ctypes.h の isalpha() とか islower() とかその他大勢は、偽のときは 0 を必ず返しますが、真のときは 1 とは限らない 0 でない別の数を返したりするんですよ そういうのは紛らわしいので、そういう紛らわしさが減る bool の存在はありがたいですね
38 名前:デフォルトの名無しさん [2021/07/18(日) 16:58:13.77 ID:jPlpwmsoF.net] 関数の () は演算子 キャストの () は演算子 だそうですが 数学の数式で優先度上げるのに相当する () は演算子ですか?
39 名前:デフォルトの名無しさん mailto:sage [2021/07/18(日) 17:14:40.88 ID:6AMrYKMS0.net] いいえ
40 名前:デフォルトの名無しさん mailto:33 [2021/07/18(日) 20:03:28.13 ID:i83/r50ia.net] >>34 ありがとうございます!
41 名前:33 mailto:sage [2021/07/18(日) 20:08:43.08 ID:i83/r50ia.net] >>34 すんません 入力欄間違えました。
42 名前:はちみつ餃子 mailto:sage [2021/07/18(日) 21:49:36.58 ID:+Ch+KzUq0.net] >>33 真偽値型にキャストした結果の型は _Bool で、 !! を通した型は int という違いはある。 https://wandbox.org/permlink/zlxhRTGr5Sj8IsiH 整数を扱う多くの場合では整数拡張が入ったりして違いが吸収 されてしまうからどちらでもいい場合がほとんどだと思うけど、 あらゆる状況で完全に同じとは言い切れない。 ちなみに C++ では整数に ! を適用した結果は bool なので、 もちろん !! の結果も bool になる。
43 名前:デフォルトの名無しさん mailto:sage [2021/07/18(日) 21:52:36.39 ID:V2Gw1I3v0.net] >>38 違う 一次式を囲む()は 後置式に属する関数呼び出しの()でも 単項式に属するキャスト記法のキャストの()でもない
44 名前:デフォルトの名無しさん mailto:sage [2021/07/18(日) 22:42:35.27 ID:4j3GDjyk0.net] >>42 _Generic 便利ですね……。C11から追加されたんだ。
45 名前:デフォルトの名無しさん mailto:sage [2021/07/18(日) 22:44:22.95 ID:4j3GDjyk0.net] >>38 ほとんど関係ないけど,Haskelだと優先度を上げる()記法を $演算子で代用できるから, 「優先度を上げる()を演算子としてみる」というのはそう不自然ではないかも。 でも(たぶん)C言語だとそういうことはない。
46 名前:デフォルトの名無しさん mailto:sage [2021/07/19(月) 17:37:03.07 ID:3YhpibAgF.net] こういう認定試験用にC言語勉強するときって https://www.sikaku.gr.jp/js/cpjv/ 32bit版のコンパイラの方が良いんでしょうか? 64bit版でintとかsize_tとかサイズ変わると困りませんか?
47 名前:デフォルトの名無しさん mailto:sage [2021/07/19(月) 17:41:05.09 ID:GP2gJIPC0.net] 逆にsizeof(size_t)が返す値が処理系定義であることを考え落とす癖がつくと そこを弱点として狙われるぞ
48 名前:はちみつ餃子 mailto:sage [2021/07/20(火) 15:47:40.82 ID:BjsPOMc70.net] 変わって困ることならむしろ困ってみたほうが勉強になるんじゃね。
49 名前:デフォルトの名無しさん [2021/07/20(火) 17:03:23.21 ID:2ecX9oPqF.net] > 1級で使用する環境について(公開試験) コンパイラ Borland C++ Compiler 5.5 JIS X 3010-1993に対応 エディタ TeraPadまたはメモ帳 文字コード:SHIFT-JIS、改行コード:CR+LF ※当コンパイラの操作にはコマンドプロンプトの知識が必要です。 ※解答用のソースプログラムは、SHIFT-JISで保存してください。 ※指定した保存形式で保存されていない場合は、採点の対象となりません。 ・・・なんだかなぁ
50 名前:デフォルトの名無しさん mailto:sage [2021/07/20(火) 18:27:33.17 ID:rDNdpvsmK.net] せめてC99対応コンパイラにしようよ
51 名前:デフォルトの名無しさん mailto:sage [2021/07/20(火) 18:37:29.47 ID:LjuPHZpl0.net] JISX 3010 1993で使えない構文や関数を回避して回答する能力を受験者に課すなんてなかなか高度な試験だね
52 名前:デフォルトの名無しさん mailto:sage [2021/07/20(火) 20:03:33.02 ID:Plw9uEZeM.net] BCCってまだVSの無料版が無かった頃に無料で使えるコンパイラとして粂井氏のHPで紹介されてて使ってたなあ その時代から何も進化してない資格なんだろうな……
53 名前:デフォルトの名無しさん mailto:sage [2021/07/21(水) 00:20:28.07 ID:fGno+40ia.net] bccとかLSI-C(試食版)とか、Cマガの付録で
54 名前:デフォルトの名無しさん mailto:sage [2021/07/21(水) 07:39:41.26 ID:A0/pIuIc0.net] BCCは知ってても それだけじゃ困ります
55 名前:デフォルトの名無しさん mailto:sage [2021/07/21(水) 09:12:39.48 ID:+0/niNvm0.net] > JIS X 3010-1993に対応 つーことは int main(void) { printf(""); int x; /* これがダメ */ //このコメントもダメ for(int y = 0; y < 1; y++) ; //これもダメ } 今どきのコンパイラはみんなOKなのに うっかり使うと減点されるという陰険な罠だな
56 名前:デフォルトの名無しさん mailto:sage [2021/07/21(水) 09:45:21.46 ID:DbniEar00.net] 検定する側が時代遅れで しかもこんなレベルじゃ 最早コボちゃん世代を嗤えませんね?
57 名前:はちみつ餃子 mailto:sage [2021/07/21(水) 10:08:36.90 ID:tIqEOSex0.net] まあそういう時代もあったというのは知識として有るに越したことは無いが、 前提とされるとだいぶんしんどいな。
58 名前:デフォルトの名無しさん mailto:sage [2021/07/21(水) 11:16:37.45 ID:CAhJ9aCx0.net] じじい度検定になっとる
59 名前:デフォルトの名無しさん mailto:sage [2021/07/21(水) 20:55:54.33 ID:NQ6A/S1F0.net] Cの範囲内なのにえらいストレスフルやな //コメントや for 内の変数宣言が禁じられると辛い
60 名前:デフォルトの名無しさん mailto:sage [2021/07/21(水) 21:11:33.77 ID:kmyfY3M8M.net] だんだんいじくり回されてワケわからん言語になるんだろうな
61 名前:はちみつ餃子 mailto:sage [2021/07/21(水) 22:43:38.51 ID:tIqEOSex0.net] >>60 あまり変更するのもどうかと思うけど 昔のままで良しというわけにもいかん部分もあるし、 現実的な妥協点をさぐりながら改定していくしか仕方がないだろ。
62 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 00:04:04.57 ID:0pHC70l40.net] 今日,O'rellyの『Lex & Yacc』で「自己参照型構造体」という概念を知ったんだけど, これが動作する理屈とかこういう書き方をする利点がマジでわからなくて苦戦してる。 でもこれを理解できるようになればメモリ確保やポインタ参照の話がわかるようになる…… と期待してがんばる。
63 名前:はちみつ餃子 mailto:sage [2021/07/22(木) 00:13:03.51 ID:r7I3CYuM0.net] 基本的なメモリ管理をわからない段階で yacc の本を読んでるのか。 実用を通して理解するのもひとつの道ではあるだろうけど、 最初はもっと単純な事例集みたいなのを見るほうがいいと思う。
64 名前:蟻人間 mailto:sage [2021/07/22(木) 00:14:52.69 ID:24/oAOWdd.net] >>62 言わば再帰的定義の産物だよ。 論理的に入れ子の構造にする訳。 ヌルポインタで終わり。
65 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 09:38:36.05 ID:ERrrf0sq0.net] 自分が興味あることから掘り下げて行くのはいいと思うよ とりあえず C言語 リスト構造 とかでググってみて
66 名前:デフォルトの名無しさん [2021/07/22(木) 10:14:39.29 ID:I7nexIleF.net] struct A { A a; }; ではないからな struct A { A *p; }; ならただのポインタ
67 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 10:53:20.02 ID:kFdJ5CFB0.net] Ruby は、Bison, flex だったか?
68 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 12:38:58.69 ID:0pHC70l40.net] >>63 「勉強不足」といわれればそれはその通りなんだけど 寧ろC言語のやっかいな部分にできるだけ触らないですむように という動機でlexとyaccを学んでるんですよね……。 ↑まあこういう考え方が間違ってるかもということに 『Lex & Yacc』を読んでいて気付きはじめていますが…… >>65 こういう↓ことですよね。 https://dev.grapecity.co.jp/support/powernews/column/clang/031/page02.htm 実は『Lex & Yacc』内ではそのコード概念の名前はでてこなくて コード断片でggったりしてました。
69 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 12:48:57.06 ID:MMqyZQ9/0.net] >>66 - A *p; + struct A *p; ここはCスレだぞ struct A { struct A a; //incomplete typeなのでオブジェクトは定義できない };
70 名前:デフォルトの名無しさん [2021/07/22(木) 14:18:45.83 ID:I7nexIleF.net] 「自己参照型」っていうのが 誤訳なんじゃないかって思ってる 実際には「自己型参照型」でしかない ポインタを代入するときに自分自身(オブジェクト)のポインタを代入する訳じゃないから 自己を参照してる訳じゃないんだ ここを誤解するから理解が進まない >>69 君には伝わってるから良いよ
71 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 14:34:42.13 ID:MMqyZQ9/0.net] ISO: self-referential structure JIS: 自己参照する構造体 誤訳かねえ
72 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 14:50:14.55 ID:G9vEgy1w0.net] int arg; p = (*p)(arg); 戻りが関数(A)のポインタとなる 引数int を取る関数(A) の宣言もまた 記述が無理な事案ですかの
73 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 15:29:46.76 ID:kFdJ5CFB0.net] 自己参照型は、2分木とか? 親は、2つの子のポインターを持っていて、それが再帰的に続くもので、 親子は同じ構造をしているもの
74 名前:はちみつ餃子 mailto:sage [2021/07/22(木) 16:19:06.28 ID:r7I3CYuM0.net] わざわざ「自己参照する構造体」という用語が与えられているのは構造体タグのスコープを 説明する文法解説上の都合じゃないかな。 ノードを直列に接続すればリストになったり複数の接続を持てば木になったりというデータ構造のことと、 他のノードへの接続には C ではポインタを使うのが自然だというふたつの事柄を併せると 結果的に自分自身 (を含む構造体) と同じ型のオブジェクトを指すポインタが現れることもあるというだけのことで、 (データ構造、また、その管理においては) 指している型が同じなのか違うのかで ことさらに区別して考える意味はあまりないように思う。
75 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 16:44:22.00 ID:zX6Mldkk0.net] C言語の勉強中にリスト構造とかの部分でポインタがよくわからない!って人良く見るけど 実際のところC言語で仕事するときにリストとか二分木ってあんま使わなくね? 構造体の配列は良く見るけど 組み込み系とかだとメモリ少しでも節約するためにリストにしたりするの?
76 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 16:55:22.66 ID:MMqyZQ9/0.net] > 組み込み系とかだとメモリ少しでも節約するためにリストにしたりするの? 意味がよくわからんが 組み込みでもリストもmallocも普通に使うぞ OSがなきゃmalloc使えんとでも思っているのか?
77 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 17:03:27.91 ID:zX6Mldkk0.net] >>76 いや一般的にリソース制約の多い組み込み系だからこそmallocとリスト構造使って 本当に使う分だけメモリ確保するのかなと思ったんだけど なんか気に触ったのならすみません
78 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 17:12:18.33 ID:MMqyZQ9/0.net] > C言語で仕事するときにリストとか二分木ってあんま使わなくね? 気に障るってか、数秒えってなった
79 名前:はちみつ餃子 mailto:sage [2021/07/22(木) 17:27:11.52 ID:r7I3CYuM0.net] >>75 ワイはプロではないし組み込みのこともよう知らんけど 言語処理系を作ったときに当然ながら構文木を組み立てたりはしたし、 宣言した名前を保存するハッシュテーブルはチェイン法を使ったのでリストの一種でもあるわな。 (今なら面倒くさいので C++ で書いてしまう (標準ライブラリのコンテナを使う) だろうけど。) 分野によるとは思うけど、リストや木がそんなにほとんど目にしないというほうが不自然な気がする。
80 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 17:58:20.48 ID:4yFOTvD80.net] >>77 横からだけどマイコン次第だわな。メモリの動的確保なんて、 そもそも無理ーって処理系もある。コンパイル時にメモリは固定しちゃう。 昨今の32bitのARMマイコンやらESPやら最近触ってるけどmallocも普通にあるし、 サポートライブラリにlistのソース付いてたり(それを使うべきかは悩む)。 更にc++なんかも普通に使えるから、なんか落ち着かんw
81 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 21:02:00.87 ID:NQdyjX4FM.net] 簡単なテキストエディタ作ってみてください
82 名前:デフォルトの名無しさん [2021/07/23(金) 00:04:27.67 ID:efwzK8IKa.net] っsed
83 名前:デフォルトの名無しさん mailto:sage [2021/07/23(金) 00:26:23.76 ID:IkF8M4100.net] あれは簡単なのか?w コマンド自由に操れる人、果たしているのかな?
84 名前:デフォルトの名無しさん mailto:sage [2021/07/23(金) 06:51:28.40 ID:U6L8J7vD0.net] 作るのが簡単 ≠ 使うのが簡単
85 名前:デフォルトの名無しさん mailto:sage [2021/07/23(金) 07:52:07.52 ID:/J+0ROXX0.net] えー? sed禁止とか言われたら立ち直れんぞ
86 名前:デフォルトの名無しさん mailto:sage [2021/07/23(金) 09:04:13.56 ID:/WZbwRMt0.net] sed awkして(ry
87 名前:デフォルトの名無しさん mailto:sage [2021/07/23(金) 09:41:53.92 ID:lst4CtWH0.net] Screen EDitor ですねわかります
88 名前:デフォルトの名無しさん mailto:sage [2021/07/23(金) 18:17:37.42 ID:kuO5Sx1T0.net] よくUnixについての記事や書籍に, 「sedは入力全体を一度に読み込まず一行ごとに処理するから 動作が遅くならず,メモリ容量も気にしなくていい」 みたいなことが書いてあって,それは概ね事実だと思うんだけど, C言語でsedを実装するときもviを実装するときに比べて メモリ確保とかが楽なんだろうか。
89 名前:デフォルトの名無しさん mailto:sage [2021/07/23(金) 19:24:45.90 ID:Nx0yKcVz0.net] Ruby では、 IO.readlines は、ファイル内のすべてを読み込むが、 IO#each_line は、1行ずつ読み込む
90 名前:デフォルトの名無しさん mailto:sage [2021/07/23(金) 19:49:44.19 ID:IkF8M4100.net] sedにもホールドスペースがあるから、テキスト全体を読み込んで処理する事も出来る
91 名前:デフォルトの名無しさん mailto:sage [2021/07/23(金) 23:06:00.86 ID:kreL/CiTK.net] >>88 そらviよりは楽だろうが、Nコマンドとかで複数行抱える必要はあるし、そもそも数百万桁の行食わされるかもしれんし。 オリジナルsedは確か桁数制限あったよね?
92 名前:デフォルトの名無しさん mailto:sage [2021/07/24(土) 00:40:19.89 ID:osiAYP280.net] >>91 最新の標準Unixだとsedは最低8192バイトだけ読み込めばいいみたいよ。 https://pubs.opengroup.org/onlinepubs/9699919799/utilities/sed.html
93 名前:デフォルトの名無しさん mailto:sage [2021/07/24(土) 01:03:44.23 ID:3ie/V+ee0.net] POSIX標準は満たすべき最低レベルを規定しているって事ではないかな? GNU sed の実装はこうみたいだ For those who want to write portable sed scripts, be aware that some implementations have been known to limit line lengths (for the pattern and hold spaces) to be no more than 4000 bytes. The POSIX standard specifies that conforming sed implementations shall support at least 8192 byte line lengths. GNU sed has no built-in limit on line length; as long as it can malloc() more (virtual) memory, you can feed or construct lines as long as you like.
94 名前:62 mailto:sage [2021/07/26(月) 12:30:48.85 ID:yVSFJZsJ6.net] 自己参照型構造体(用語法的に正しくないという指摘もあるけど…)がちょっとわかったかも。 はじめは『もう一度基礎からC言語』の第31回「データ構造(10)〜構造体をポインタでつなぐ」 https://dev.grapecity.co.jp/support/powernews/column/clang/031/page02.htm を参考にしてたんだけど,記事集の題名からも察せる通り「初めてC言語を学んでいる」 という状態で読むには向いていなかった。 図書館でそれっぽい本を漁って見つけた, 『C実践プログラミング』の17章「高度なポインタ」にある解説が 初学者としては一番わかりやすかった。 わざわざこのスレで報告する需要はないかもしれないけど, 将来に,おなじような概念の理解で詰まっているひとの 助けになるかもしれないからという言い訳でもって書き込ませてください。 -- C言語でデータ構造を作ろうと思ったら, 基本的にコンパイル時から大きさを決め打ちして用意せざる得ないけれど, 無から有を作り出せるー*1]malloc関数を用いることで コンパイル時ではなく実行時に自由に拡大できるという, 記憶領域を食いにくいのに大規模な情報を格納できるデータ構造を作れる。 なぜ構造体を使うのかは自明すぎるためか書籍では明言されていなかった。 あえて言葉にするなら, C言語において 複雑な情報を格納できるデータ構造を作るにあたって 「構造体を定義する」ことはもっとも一般的な慣行であることと, C言語の演算子に自己参照型構造体の操作に非常に便利な演算子 構造体ポインタ演算子->が用意されているということが決め手なのかな。 *1: ちょっと違う気がするけど,書籍にはそう書いてあった。
95 名前:デフォルトの名無しさん [2021/07/26(月) 14:20:07.95 ID:9MzzzjGrF.net] https://dev.grapecity.co.jp/support/powernews/column/clang/031/page02.htm 観たけど余談が多過ぎてなかなか本題に入らずイライラするω あと確かに初心者向けではない 入口にたどり着く前に挫折する文章の書き方だと思う
96 名前:デフォルトの名無しさん [2021/07/26(月) 14:22:50.46 ID:9MzzzjGrF.net] >『C実践プログラミング』の17章「高度なポインタ」にある解説が 君にとって判り易かったのかも知れないが 君の感想文を読むとあまり良い本ではなさそう
97 名前:デフォルトの名無しさん mailto:sage [2021/07/26(月) 14:35:32.21 ID:5u5J/MDS0.net] ama zon 4900900648 2冊目か3冊目に読む本 2005年6月21日に日本でレビュー済み 以前、某雑誌の特集で、Cがわかればすべてがわかるというのがあり ましたが、まぁヨイショのし過ぎな文句なのかもしれませんが、依然 として、知っておいたほうがよい言語だと思います。 Cでプログラムするような機会は、ほんとここしばらく全くないです けど、Cを勉強していたおかげで今までかなり助かってます。なんと いってもCの影響を受けた言語は多いですからね、色々応用がきくも のなのですよ。 で、肝心のこの本ですが、前訳本でも書きましたが、初心者を脱しよ うとしている人にとっては最適だと思います。よくありがちな、Cの 文法やテクをただ書いているだけの本とは違います。プログラムのス タイルやプログラムの仕方についての記述が数多くあります。 Cのような言語の場合、どのようにコーディングするのか、言い換え るとWHATだけでなくHOWについて必ず考えなくてはならないと思いま す。この本は常に、HOWについて意識した記述をしており、そういった 点が、この本を推奨する大きな理由です。 ただ、この本だけで、ポインタとかのキモはさすがに理解できません でしたので、別の本を読む必要があります。
98 名前:デフォルトの名無しさん mailto:sage [2021/07/26(月) 14:52:24.77 ID:9wDqt6nuF.net] >>74 >(データ構造、また、その管理においては) 指している型が同じなのか違うのかで >ことさらに区別して考える意味はあまりないように思う。 それ >>94 >C言語の演算子に自己参照型構造体の操作に非常に便利な演算子 >構造体ポインタ演算子->が用意されているということが決め手なのかな。 まだ誤解してると思う
99 名前:デフォルトの名無しさん mailto:sage [2021/07/26(月) 14:57:02.20 ID:5u5J/MDS0.net] 不充分。この本だけでは足りない。 2019年4月13日に日本でレビュー済み 敢えてこの本を買う意味が分からない。 20世紀に買ったが、この本だけでは解決できない問題があり、投げた。 よくある fgets & sscanf のコードの部分では、入力バッファのクリアを行う方法が書かれていなかった。 当時はインターネットのコンテンツが今ほど発達しておらず独学ではお手上げ。 他にも何か問題点があった気がするし、今や様々な解説サイト、また「よくある解説サイトの誤りを指摘するサイト」で足りる。 セキュリティ対策についても、wikipediaのサンプルコードやjpcertの「CERT セキュアコーディングスタンダード」など、今では豊富な資料がネットで入手できる。必要なら英文資料だってネットで容易に入手できる(もちろんC99の規格文書も)。
100 名前:デフォルトの名無しさん [2021/07/26(月) 16:06:22.39 ID:+kNv7glZa.net] 諸々のコンパイラや環境がC11に準拠するようになって久しく、また業務やOSSでもC11で導入された新機能を使うようになってきてる印象があるんだけど(要出典w)、こと並列処理に関してはまだまだC99+POSIXスレッドを使ってた方が良さそうね。 久しぶりに並列処理を書いてみようと思ったんだけど、C11で標準規格として導入されたthread.hに対応してるコンパイラが現時点でも(特にUnix系で)ほとんどないことが意外だった。 今のところthread.hをUnixで使いたかったらmusl Cくらいしか選択肢がないし、 ttps://www.etalabs.net/compare_libcs.html 3年前の電子掲示板の書き込み(要は典拠性が低い)ではあるけど ttps://www.reddit.com/r/C_Programming/comments/94acpl/c11_vs_pthreads/ ほとんどの人がC11ではなくPOSIXが定めてるスレッド使ってるみたいだし。 せっかく汎OS的に並列処理がかけそうな規格なのに、もったいないというかなんというか。。。
101 名前:ハノン mailto:sage [2021/07/26(月) 20:52:03.28 ID:PhHFyA7M0.net] >>99 >入力バッファのクリアを行う方法 入力バッファのフラッシュは確か MS のコンパイラだけでしか使えない環境依存だったかと 行末に \n が在る、とかのルールがあれば、それが出るまで読み捨てればいいのですが、そういうルールがなければどうしようもない気が
102 名前:ハノン mailto:sage [2021/07/26(月) 20:54:03.66 ID:PhHFyA7M0.net] >>100 >せっかく汎OS的に並列処理がかけそうな規格 C11 は調べていませんが、C++ と比べてどうですか?私は C++11 以降でそういうのを書いています‥‥
103 名前:はちみつ餃子 mailto:sage [2021/07/26(月) 21:07:00.92 ID:afAoM3cN0.net] >>100 C11 のスレッドはオプショナルなのでスレッドを提供しなくても C11 準拠を名乗れる。 C の立場からすれば標準ではあまり高レイヤな機能を要求するのは気が引けるだろうし、 かといっていまどきスレッドに全く触れないでいるというわけにもいかないという妥協なんじゃないかな。 C11 のスレッドの基本的なモデルは POSIX のスレッドとそんなに違いがない (名前が違う程度) ので、 かえって乗り換える強い動機にならないのかも。
104 名前:62 mailto:sage [2021/07/26(月) 22:30:44.17 ID:sOMY1Y2o0.net] >>96 >>98 ご指摘ありがとうございます。 構造体リストについてもう一度 勉強しようと思います。 (他の方も書評の引用
105 名前:などありがとうございます) 『C実践プログラミング』のAmazon書評にあった 『Cクイックリファレンス 第2版』というのを試しに読んでみたところ, かなり規格網羅的で丁寧だと感じたので, 当面はこれで勉強してみようと思います。 こちらの書籍には「 struct data { // some code... struct data *next } 」という形のコードの解説そのものはありませんが, ポインタの解説をCの規格に沿ってしてくれているので かなり良い教科書として使えそうです。 以後言い訳:: いまのところ,まだC言語の規格が全て頭に入っている状態ですらなく, ましてや実際のプログラミング作法も分かっていない段階なので, ある書籍を見たときの(現代における)正確性・信頼性の判断が できないんですよね……。 『C実践プログラミング』は昔のO'Reillyが出している書籍なので ある程度信頼できるかな,と思って読み進めていたんですが, (実際,本質を突いていて分かりやすいと感じる部分も多くありました) 時代的にも正味の内容的にも現代において参考にすべき 良書とはいいがたいのかな……? [] [ここ壊れてます]
106 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 05:25:18.45 ID:x4yitIm80.net] ポインターで次へつないでいく、リストみたいな自己参照型。next pointer。 同じ構造体のリスト。 動的関数型のElixir は、片方向リストを使う a → b → c → d struct data { struct data *next } これが両方向リストなら、struct data *prev も持たなければならない。 次・前の2方向へ、たどれなければならないから a ←→ b ←→ c ←→ d ポインターに、null を代入すれば、次・前は存在しない。 つまり、終端を表す 詳細は、アルゴリズム・データ構造を参照
107 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 10:57:27.91 ID:cZjH0t2V0.net] >>98 いや確かに -> は自己参照する構造体を使うときに好都合だぞ (*(*p).next).next が p->next->next で済むんだから
108 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 11:05:53.35 ID:/ekQh9610.net] 双方向で b を削除するのに b->prev->next = b->next; b->next->prev = b->prev; b さよなら これで済むからありがたい表記ではあるな
109 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 11:39:36.88 ID:neQM5ma+0.net] >>107 あ、なる 良く出来てんな
110 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 11:42:04.93 ID:sIvc9ZAG0.net] 忘れずにちゃんと成仏させろよな
111 名前:デフォルトの名無しさん [2021/07/27(火) 16:12:06.91 ID:Dog97BpdF.net] >>106 屁理屈
112 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 17:25:02.44 ID:cZjH0t2V0.net] >>110 異論があるなら堂々と言えよ 自分の意見が屁理屈かどうか見せずにそれを言うのは卑怯だぞ
113 名前:デフォルトの名無しさん [2021/07/27(火) 18:25:54.21 ID:Dog97BpdF.net] そもそも話がかみあってない こっちは気付いてるけど 君は気付いていない ただそれだけ だから屁理屈
114 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 18:38:55.37 ID:cZjH0t2V0.net] 結局、自分は尻尾を見せないんだな やりあう価値もないゴミだな、唾棄
115 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 18:52:50.94 ID:S/tVMF6N0.net] 自己参照型の構造体で固定段数のリンク手繰るのに便利にはなってるけど 自己参照型の構造体があるがゆえに -> ができたんじゃなく 単にポインタの指し先(構造体)のメンバを (*). じゃ遠回りなので直接指定したいがための存在だと思ってる
116 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 19:55:06.48 ID:rlqI0SGsK.net] >>114 同意だが、.で共用出来なかったんかね? 関数と関数ポインタみたいな感じで、左辺がポインタだったら逆参照してからメンバアクセス。
117 名前:はちみつ餃子 mailto:sage [2021/07/27(火) 23:09:50.37 ID:eiJldbv00.net] >>115 Rust ではそうしてるんだから C でも
118 名前:最初からそういう選択も出来たはずではあると思う。 だけど違うことをするのに同じ見た目にするのが良いかどうかというのは微妙なところ。 どちらが良いと一概に言えるもんではないからな。 [] [ここ壊れてます]
119 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 00:16:37.31 ID:GYM2ckiMM.net] CはRustの派生だったのか、知らなかった
120 名前:はちみつ餃子 mailto:sage [2021/07/28(水) 00:34:49.35 ID:0ASLy6H40.net] >>117 派生関係も時系列も前提にしてない。 別の選択をしたものが事実として存在するので可能であるのは疑いないと言ってる。
121 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 00:53:01.29 ID:Fz30Fvzo0.net] FortranやCobolにも導入して欲しいのか?
122 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 01:00:09.40 ID:nkHrLyVI0.net] うーん? ある構文(範疇としては演算子の形態論?)について, 「他の言語での採用例があるからC言語がそういう構文を持っていても不思議じゃなかった」 という話が展開されていたと思うんですけど, どうして「RustはCの派生」とかFortranやCOBOLの構文の話になったんですかね……?
123 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 01:46:29.97 ID:LX2CDHAF0.net] バカだから
124 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 09:52:29.36 ID:M/k1RjyqH.net] C99以降で真偽型をboolのように表記したいときは<stdbool.h>を読み込みますが, 規格票には「型boolはマクロとして定義しろ」とあります。 www.open-std.org/JTC1/SC22/WG14/www/docs/n2596.pdf#section.7.18 一般に既存の型から新しい表記の型を定義するときはtypedefを使うべきだと (典拠は失念したのですが)聞いたことがあります。 たしか,コンパイラによる検査があったりより構文的に厳密になったりするから, というような理由だったはずです。 真偽型boolがtypedefではなくマクロで定義されている理由ってなんでしょうか。 思い当たる理由としては,C++との互換性がありますが,それをC言語の規格で考慮する意味がない (というか,C++の規格をC側から参照すると循環的になってしまう気がする) 気がします…。 C規格の論理的根拠の真偽型にかんする節も読みましたが, 「typedefではなくマクロを使う理由」は記載されていませんでした。 www.open-std.org/JTC1/SC22/WG14/www/docs/C99RationaleV5.10.pdf
125 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 10:26:19.41 ID:vTqcwKkg0.net] マクロだと#undefできるから自分でboolを定義してる古いコードのための移行措置っぽいね <stdbool.h>をincludeしなければいいと思うけど間接的にincludeされるケースもあるんだろう _Boolの方は予約語になってる 7.18 (4) ..., a program may undefine and perhaps then redefine the macros bool, true, and false. プログラムはbool、true、falseマクロをundefineして再定義することができる 7.31.11 (1) The ability to undefine and perhaps then redefine the macros bool, true, and false is an obsolescent feature. ⇒ bool、true、falseをundefineして再定義できる特性は廃止されつつある
126 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 12:14:26.76 ID:I0vZ6ZDJF.net] Win32APIとか使わずに Cの標準関数でカレントディレクトリではなく 今実行中のexeのpathを得る方法はどれですか?
127 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 12:21:24.51 ID:Zs50Z/m/0.net] int main(int argc, char* argv[]) の argv[0] で実行ファイルへのフルパスがえられるのは環境依存だったかな・・・
128 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 12:22:28.68 ID:uGnpdH8xa.net] mainの第2引数の argv[0] にはコマンドラインから入力した通りのコマンド名が入っているんだっけ フルパスで入っているんだっけ
129 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 12:24:05.30 ID:uGnpdH8xa.net] 被った たしか Windows はフルパスだったような… 違ってたらごめんなさい
130 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 12:27:22.89 ID:TLecxenIM.net] 実装に依存
131 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 12:35:40.50 ID:uGnpdH8xa.net] Windows という書き方はよくないかな シェルの実装によると思います なので、WSLに持っていくと期待通りに動かなかったりするかもしれません ここでは Windows限定でよさそうだけど
132 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 13:20:46.92 ID:6qacKWPx0.net] え?そう? Windows で C 使う人って今はあまりいないのでは? Linux とかなら分かるけど。
133 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 13:41:10.64 ID:4VQYix970.net] powershellはフルパスだけどcmdは入力のまま 結局はCreateProcessに渡した文字列なのでフルパス前提にしちゃだめよ OSに依存しない方法で確実なのはないよなぁ argv[0]が ファイル名のみ:カレント+環境変数pathを走査 相対パス:カレントと連結 絶対パス:そのまま とかやればそこそこいけるだろうけどめんどくさいな
134 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 13:54:41.98 ID:vTqcwKkg0.net] 純粋なC標準の範囲では不可能な気がする カレントディレクトリをとるgetcwd()もPOSIX(unistd.h)だし C言語の標準ライブラリにはディレクトリ階層の概念自体がなさそう
135 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 13:55:33.60 ID:uGnpdH8xa.net] >>131 powershell と cmd で違うのか… なんでそうしたんだろ 何れにしても、けぅこう面倒なのね
136 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 14:05:55.87 ID:I0vZ6ZDJF.net] みなさんありがとうございます dirname(argv[0]) したら argv[0] が壊れました ほんとうにがりがとうございました
137 名前:蟻人間 mailto:sage [2021/07/28(水) 14:19:05.25 ID:JuarLz62d.net] 本当のニガリが10、あったと?
138 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 14:21:25.34 ID:tV9+c+Bb6.net] これ解決策じゃなくて愚痴なんだが、main()関数が使えるのはホスト環境で、つまりmain()関数のargv[]引数は「OSによる支援」を前提にできるんだから、実装依存じゃなくて「argv[0]には実行されたファイルのOSにおけるパス名が格納される」みたいな仕様にしてもよかった気がする。 それこそstdint.hみたいに、多種多様な機器への対応を考えなくてもいい関数なんだから、実行環境のファイルシステムやらをある程度は仮定しちゃってもいいわけで。
139 名前:デフォルトの名無しさん [2021/07/28(水) 16:21:41.95 ID:6qacKWPx0.net] ファイルシステムもOSもない組み込み機器もあるわけで・・・
140 名前:はちみつ餃子 mailto:sage [2021/07/28(水) 16:21:59.41 ID:0ASLy6H40.net] >>136 どんな OS でも Unix 風のファイルシステムを採用しているというわけではなくて、 たとえば BTRON が採用しているファイルシステムでは 同名のファイルが存在してよく、ディレクトリのような階層化は存在しない。 全体で唯一に区別できる名前 (フルパスに相当するもの) がない。 OS だってファイルシステムだって多種多様なんで、 起動時に「なんらかの」文字列で情報が与えられるということ以上は 環境依存にならざるを得ないよ。
141 名前:はちみつ餃子 mailto:sage [2021/07/28(水) 16:25:16.04 ID:0ASLy6H40.net] >>137 その場合は通常の main 関数からの起動にはならない (main に意味のある引数が渡されないか特別なスタートアップ経由で起動される) ので、「main に値が渡されるならば」それなりの OS が仮定できるというのが >>136 の言ってることやで。
142 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 18:03:22.93 ID:Y6SMxOTL0.net] >>139 すげぇ たまには正しくわかりやすい説明できんじゃん ちょっと見直した
143 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 18:21:15.71 ID:S51yZazJ0.net] コード記述してて実行ファイルのフルパスが必要となるんだから それなりのOSから叩き起こされてること前提よね
144 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 18:43:00.22 ID:nkHrLyVI0.net] >>138 > BTRON が採用しているファイルシステムでは > 同名のファイルが存在してよく、ディレクトリのような階層化は存在しない 知らんかった……。 調べたところBTRONは組込み機器向けのファームウェアじゃなさそうだし, ホスト環境=「それなりのOSが期待できる」環境あっても, 「あるファイルのパス名が存在して,その絶対値が文字列として一意に定まる」 ことさえ期待できないのか……。
145 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 18:54:22.92 ID:wp9dn28tK.net] >>134 dirname()は引数を破壊するのでコピーしてから渡すべし 今回のケースでは結局ダメだけどw
146 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 18:56:43.36 ID:nkHrLyVI0.net] > [...] the array members argv[0] through argv[argc-1] inclusive shall contain pointers to strings, which are given implementation-defined values by the host environment prior to program startup. www.open-std.org/JTC1/SC22/WG14/www/docs/n2596.pdf#section.5.1.2.2.1 C2xでもargv[0]に何が格納されるかは「実装依存」って書いてあるね……めちゃくちゃ残念だ。 あとこれ読んでて気が付いたけど,「ホスト環境」ってhost environmentじゃないのね。 hosted enviromentだから,正確に訳すなら「ホスト済み環境」とかのほうが良いのかな?
147 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 22:12:53.76 ID:vTqcwKkg0.net] そのhosted environmentはプログラムの実行環境(execution environments)を ・freestanding(自立した環境=OS無しの組み込み系) ・hosted(OSにhostされた環境) に分けたものだからOSとかプラットフォームを指すホスト環境とはたぶん別の意味
148 名前:デフォルトの名無しさん mailto:sage [2021/07/30(金) 19:40:44.58 ID:ftRMaVHk0.net] hosted environmentの概念には明らかにUNIXが背景になってるね MS-DOSだのCP/MだのROM BASICだのまでは想定してない
149 名前:デフォルトの名無しさん mailto:sage [2021/07/31(土) 21:45:13.12 ID:c1SsRmFt0.net] >>146 くわしくしりたいです。 「OSというのものは高性能である」という前提が Unixとかでしか通用しなかったってことですか?
150 名前:はちみつ餃子 mailto:sage [2021/08/01(日) 11:25:29.19 ID:grRzUWQ80.net] >>147 性能とかじゃなくてモデル化の仕方が多様という話。 たとえば古い時代の BASIC (N-BASIC など) は環境変数やコマンドラインという概念は持たないが、 違う形でデータを受け渡す方法は持っていて、どちらが高性能かというようなものではない。
151 名前:デフォルトの名無しさん mailto:sage [2021/08/01(日) 18:29:17.83 ID:1DStn3/B0.net] >>148 今 調べた知識なのでいろいろ間違っているとは思うのですが, N-BASICとかってそもそも「OS」なんですかね……? 「hosted environmentという概念はUnixを想定したもので, 古いBASICでは通用しない」 という話からは, 1. Unixと古いBASICが同列の概念である 2. hosted environmentは「OSがある環境」を指している ようなことが読み取れるんですが, 1. N-BASICはUnixのような 「機器→抽象化層1 (HAL/OS) →カーネル→シェル」 みたいな構造では表わせない位置にあるため Unixと同列(あるいは類似)の概念として扱うのは 違うような気がすること 2. そもそもhosted environmentは C2x規格の5.1.2.2で規定されている動作を実装した処理環境であって 「OSがある環境」を指してはいないこと (だからUnixがどう,みたいな話は関係ない?) www.open-std.org/JTC1/SC22/WG14/www/docs/n2596.pdf#paragraph.5.1.2.2 などから,ちょっと納得しがたいです……。
152 名前:デフォルトの名無しさん mailto:sage [2021/08/01(日) 18:40:30.22 ID:4Ph4Dvnc0.net] IPLで起動して、ハードウエアへのアクセスを代行し、 コマンドをタイプして結果を文字で表示するCUI という観点からはUNIXとBASICは同列だよ MS-DOSでのデバドラはお行儀でしかなく アプリが直接I/Oなんて珍しくもなんともないが 一応argc, argvという概念はあった 言い出すとマイクロカーネルをヨイショする連中を嘲笑うように モノリシックカーネルでいったLinuxは、じゃあOSに非ずなのかと OSとは何か、何が該当し、何が該当しないのかは 見方が色々で誰もが認める基準はなかなかできない
153 名前:デフォルトの名無しさん mailto:sage [2021/08/01(日) 19:45:48.16 ID:bX2lzryL0.net] なんかわざと煽ろうとしている?
154 名前:デフォルトの名無しさん mailto:sage [2021/08/01(日) 20:00:02.07 ID:tSrdcQx/0.net] OSから外れた例をわざわざ挙げたのだろうと思っていたが、OSが何か分からない人でしたか...
155 名前:はちみつ餃子 mailto:sage [2021/08/01(日) 20:46:27.86 ID:grRzUWQ80.net] >>149 > N-BASICとかってそもそも「OS」なんですかね……? ---------- JIS X 0001-1994 ---------- オペレーティングシステム, OS(省略形) プログラムの実行を制御するソフトウェアであって, 資源割振り,スケジューリング,入出力制御, データ管理などのサービスを提供するもの。 備考 オペレーティングシステムは,ソフトウェアが主体であるが, 部分的にハードウェア化することも可能である。 ------------------------------------- まあ要するに OS がどのような構成を持つものなのかというのは曖昧で、 Unix 的な立ち位置も OS が持ちうる構成のひとつでしかないんよ。 > Unixと同列(あるいは類似)の概念として扱うのは > 違うような気がすること 「モデル化の仕方は多様」という例のひとつとして N-BASIC を出している。 違うように感じられるならそれは提示した意図通り。
156 名前:デフォルトの名無しさん mailto:sage [2021/08/01(日) 20:59:26.94 ID:6Hcq0V/AM.net] この人の理解が間違えている。 わざと言っているとしたら悪質
157 名前:デフォルトの名無しさん mailto:sage [2021/08/01(日) 21:23:59.60 ID:fSdDKS6o0.net] >>154 俺もわからん。 何がどう間違ってるのか説明しておくれ
158 名前:デフォルトの名無しさん mailto:sage [2021/08/01(日) 21:37:13.51 ID:dQpg7mz50.net] N-BASICは確かにハードウエアを直接制御できるという意味では OSに近い。ただ今のOSとは全然違う。BASICだと遅すぎるので 大半はマシン語で直接書いてある。今のOSとは考え方が違う。
159 名前:デフォルトの名無しさん mailto:sage [2021/08/01(日) 21:43:51.38 ID:4Ph4Dvnc0.net] BASICそのものはマシン語で書かれているんだが
160 名前:デフォルトの名無しさん mailto:sage [2021/08/01(日) 21:54:08.54 ID:1DStn3/B0.net] >>156 たしかにそういう意味では「OS」といえるのかもしれないですね。 ただ,それだと組込み機器のファームウェアだって 機器を操作できる,対人インターフェースがあるという点ではOSといえることになりません?
161 名前:デフォルトの名無しさん mailto:sage [2021/08/01(日) 21:58:23.19 ID:4Ph4Dvnc0.net] なるね 何か困るの?
162 名前:はちみつ餃子 mailto:sage [2021/08/01(日) 22:05:54.64 ID:grRzUWQ80.net] >>158 はっきりした基準はないという前提だけどぼんやりとした概念的な部分では OS はアプリケーションソフトの対比的なものだと思う。 用途ごとのアプリケーションソフトを起動するという前提がないなら機能的に OS 相当のものを 含んでいても普通は OS とは言わないんじゃないかな。
163 名前:デフォルトの名無しさん mailto:sage [2021/08/01(日) 23:18:55.12 ID:bX2lzryL0.net] ホントにOSだと主張するなら、ぜひWindowsの仮想環境で動かしてみてくれ
164 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 00:18:03.59 ID:AinH6UQa0.net] もしかして仮想マシンとエミュレータ混同してる?
165 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 00:39:04.73 ID:5dFVW6Kq0.net] 動かせないのなら、回りくどい事言わず、無理ですと言えば済むよ
166 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 01:06:43.81 ID:AinH6UQa0.net] amd64で動くN-BASICがあるならできるんじゃない? 無いなら無理だわな
167 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 05:11:39.16 ID:qOaSDvjS0.net] >>163 >>151
168 名前:デフォルトの名無しさん [2021/08/02(月) 07:46:31.20 ID:HO5h+jLQ0.net] 最近はスマホのカメラ部品にTRON OS入ってるんだって? もうBIOSやファームウェアもOSになるんじゃないかとも思っちゃう。
169 名前:デフォルトの名無しさん mailto:もちろんネタ [2021/08/02(月) 10:11:13.69 ID:nmkqokJHF.net] >>152-153 BIOS: BI + OS DOS: D + OS OSとは
170 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 10:12:43.19 ID:nmkqokJHF.net] >>154 >わざと言っているとしたら悪質 ほんそれ 最近そういう書き込みが多い 5chから人を減らす作戦だろう
171 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 11:03:41.91 ID:qOaSDvjS0.net] >>167 > BIOS: BI + OS ネタか? Basic Input/Output System やぞ > DOS: D + OS こっちは合ってる
172 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 12:33:14.68 ID:uwbNVnssM.net] >>169 もちろんネタと書いてあるのでネタなんでしょ。
173 名前:デフォルトの名無しさん [2021/08/02(月) 13:13:02.28 ID:y7YH8RaeF.net] Basic Interpreter OS
174 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 13:17:25.48 ID:y7YH8RaeF.net] 質問です int flagA = 3 == 3; int flagB = 3 == 3 == 3; int flagC = 3 == 3 == 1; の結果が flagA : 1 flagB : 0 flagC : 1 になるのですが flag B とか flag C は何が怒っているのでしょうか?
175 名前:デフォルトの名無しさん [2021/08/02(月) 13:31:37.39 ID:HO5h+jLQ0.net] >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;
176 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 13:31:42.08 ID:y7YH8RaeF.net] int flagD = 3 != 3; int flagE = 3 != 3 == 0; int flagF = 3 != 3 == 1; flagD : 0 flagE : 1 flagF : 0 になります
177 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 13:31:46.39 ID:59KH06XU0.net] タイホするっ!! ダーン ダーン int flagB = ここまでと 3 == 3 == 3 が別のパーツになっていて == は左から結合するので (3 == 3) == 3 となり真は1になるので 1 == 3 で偽すなわち0だ
178 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 13:41:18.14 ID:y7YH8RaeF.net] 解決しました ありがとうございました
179 名前:デフォルトの名無しさん [2021/08/02(月) 16:38:34.45 ID:qdvnGLBb0.net] 俺が怒っている
180 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 19:33:02.95 ID:YziYRSV70.net] 演算子の優先順位って覚えるのヤダー。自分書くと括弧だらけだわ。 どの辺が塩梅なんかねー?明示的でないと駄目よってコーディングとかもあるし。
181 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 19:49:19.60 ID:5dFVW6Kq0.net] それでいいよ
182 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 20:03:46.84 ID:Uu01rKAP0.net] & ^ | なんかのビット演算が比較よか低いのが微妙に嫌
183 名前:デフォルトの名無しさん mailto:sage [2021/08/03(火) 09:51:48.02 ID:wbx4PwZT0.net] 憶える気のない者は成長しない
184 名前:デフォルトの名無しさん [2021/08/03(火) 10:01:19.19 ID:Z1msEN+ba.net] 結合の優先度は、自分が分かっていても 記憶があやふやな人が不安になるといけないから 結局カッコを明示的に描くかな…
185 名前:デフォルトの名無しさん mailto:sage [2021/08/03(火) 10:17:52.20 ID:wbx4PwZT0.net] 中学のマイコン部かよ
186 名前:デフォルトの名無しさん mailto:sage [2021/08/03(火) 13:41:40.87 ID:34OfFMxOr.net] >>181 覚える気があっても、覚えさせられる気がしねー。
187 名前:デフォルトの名無しさん mailto:sage [2021/08/03(火) 13:45:58.11 ID:wbx4PwZT0.net] 自分を磨くのは本人なので そんなお節介は考えなくていい
188 名前:デフォルトの名無しさん mailto:sage [2021/08/03(火) 14:20:08.34 ID:kdIV+1e00.net] CでC++の純粋仮想関数のような事をやりたいのですができますか? 疑似インターフェースです。
189 名前:デフォルトの名無しさん mailto:sage [2021/08/03(火) 14:30:35.30 ID:wbx4PwZT0.net] 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; }; みたいなことか?
190 名前:デフォルトの名無しさん mailto:sage [2021/08/03(火) 14:31:17.98 ID:wbx4PwZT0.net] あ、いかんvtableのtypedef忘れたけどまあ許せやw
191 名前:デフォルトの名無しさん mailto:sage [2021/08/03(火) 14:32:38.22 ID:lGpJxUYy0.net] のような事の解釈余地に幅がありすぎ
192 名前:デフォルトの名無しさん mailto:sage [2021/08/03(火) 19:27:01.81 ID:I3gKaej4M.net] 幅があると言うなら狭めるようなヒント書けばいいだけ たたき台として>>187 はそれほど悪くないと思う
193 名前:デフォルトの名無しさん mailto:sage [2021/08/03(火) 20:41:05.50 ID:kdIV+1e00.net] >>187 スゴーイ 感謝感激 ありがとうございます。 typedef struct { void (*interface_a)(); void (*interface_b(); , . } TINTERFACEXXX; typedef struct { TINTERFACE ia; } TOBJA; なんてリレーションスタイルも考えたんですが、 いずれにしろ、クリーンアーキテクチャーのCでのSOLID原則ができるというところまでこぎつけました。 ありがとうございます。
194 名前:デフォルトの名無しさん mailto:sage [2021/08/03(火) 23:48:19.32 ID:Ucc8C21f0.net] COM最強
195 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 14:10:06.71 ID:9IiPo8vtH.net] 奥村晴彦 『改訂新版 C言語による標準アルゴリズム事典』の 「改訂新版 序」に、 > 現代の慣習に従って、[…] EXIT_SUCCESSを0にしたりした とあるのですが、EXIT_SUCCESSマクロ変数を使った方が 定数即値を決め打ちするよりも可搬的であり、 それこそ「現代の慣習」であるように思うのですが、 実際はEXIT_SUCCESSより0を使う方が「現代的」なんですかね。 なお、誤植も疑ったのですが、集録されている実際のコードにおいても return 0;と書かれていました。
196 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 14:30:14.22 ID:O0DzK1TA0.net] >>193 0以外 は1以上も-1以下もあるし、下手すりゃ数値以外の可能性すらあるけど 0 は絶対0なので、少なくともこれに関してだけは 私は許そう
197 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 15:00:49.33 ID:9IiPo8vtH.net] >>194 なるほど、「0 は絶対0なので」というので納得できました。 ありがとうございます。
198 名前:はちみつ餃子 mailto:sage [2021/08/05(木) 15:20:09.93 ID:igzlcjJl0.net] >>193 思想的にはともかく、その件については習慣として定着してるという事実があるんで、 事実に逆らってもしょうがない。 ちなみに main 関数だけは return 文を通過せずに } に到達した場合には return 0; と同じになるという仕様になってるんで、 return 文自体を省略するという スタイルもある。
199 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 16:18:55.16 ID:TenuDSkO0.net] >>193 mainの出口は仕方ないんだよ enumなんて考え方ができる遙か前に決まったことで今さら変えられないというのが現実だ mainの第2引数だって今ならconst付けそうなところだけど これまたconstなんかなかった頃に決まったことだ
200 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 17:17:51.97 ID:lrEA3gELa.net] >>197 歴史的にはそうなのかもしれないけど、それだと「EXIT_SUCCESSを0に」することが「現代の慣習」であることの説明になってなくないような なんでEXIT_SUCCESSと書いてたのを0と書くようにしたのかが知りたいんでは もう納得してるみたいなんでアレだけども
201 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 17:57:00.56 ID:TenuDSkO0.net] enumつったんだけど 話通じてねえな
202 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 18:23:46.65 ID:sS7OglMj0.net] マジックナンバーなんて駄目でしよってノリでEXIT_SUCCESSを使ってたけどあまり流行らなかったから0に戻したってことじゃないの?
203 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 18:25:20.09 ID:sS7OglMj0.net] >>199 マクロ (#define) の話だからenum関係ないよ
204 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 18:36:03.13 ID:C1udim1A0.net] C言語7不思議 enum { A=1 } main(void) { return A; } このコードは合法か否か?
205 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 18:54:07.04 ID:nywX30PRM.net] 法なんてない
206 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 20:40:48.16 ID:TenuDSkO0.net] >>200 だね じゃあEXIT_SUCCESSはマジックナンバーないのかって
207 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 21:00:13.63 ID:RBdzanHxM.net] オレのばっちゃが決めたんだ
208 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 21:12:45.92 ID:sS7OglMj0.net] >>204 マジックナンバーって何かわかってる? ググってからでないとenumみたいに頓珍漢なこと言って恥かくよ?
209 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 22:30:22.56 ID:TWSeb4Gn0.net] 横だけどeasing関数でマジックナンバーっての見たけど、結局何だったのかわからないままですわ
210 名前:デフォルトの名無しさん mailto:sage [2021/08/05(木) 22:33:51.51 ID:RyeVbM3/0.net] 線形合同法で作る乱数に出てくる謎定数
211 名前:はちみつ餃子 mailto:sage [2021/08/06(金) 00:25:46.52 ID:xkvwFph10.net] >>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 個別の列挙型ごとに選択してよい
212 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 07:01:45.65 ID:QgUKHcUo0.net] >>206 おまえさんこそ何かわかってなさそうだな なぜ、その値なのか由来が不明な定数は スペルが0であろうがEXIT_SUCCESSであろうが 0x00であろうが本質的に同じことだぞ UNIXを背景とせずにreturn 0;が説明できるか? おまえさんみたいにググって拾った情報を丸呑みしてると わかってないやつの間違った理解が伝搬するだけだぜ
213 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 08:15:51.79 ID:3zvDecHz0.net] >>210 EXIT_SUCCESSがどういう意味かもわからないなら英語からやり直せよw 値の話じゃないことぐらい理解しろ 非常に稀な例としてEXIT_SUCCESSが0でないシステムが存在する 例えばOpenVMSでは EXIT_SUCCESS = 1 EXIT_FAILURE = 2 だったりする 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だけ定義されててもねぇって感じもあるし
214 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 08:30:30.04 ID:QgUKHcUo0.net] >>211 おまえさんは>>193 が英語の話だと思っていたのかw 0がどういう意味かもわからないならCをやり直せよ
215 名前:はちみつ餃子 mailto:sage [2021/08/06(金) 09:12:19.75 ID:xkvwFph10.net] >>211 関係ない。 言語仕様としては 0 が成功を表すというのは保証された動作で、 もしもホスト環境の都合と食い違うならランタイムサポート (スタートアップルーチン) で補正すべきこと。 EXIT_SUCCESS 「も」成功を意味する値として使えるというのとは独立した話。
216 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 09:17:08.98 ID:3zvDecHz0.net] >>212 まじでマジックナンバー知らんのか? 0じゃ何を意味するかわからんから名前をつけるって話だぞ EXIT_SUCCESSが英語だから英語の勉強しろって言ってるだけ 日本語使える環境なら 正常終了 = 0 でもいい で、>>193 の件はそうは言っても正常終了で0以外なんてまずないし、たいていの人はmain()が0を返したら正常終了ってわかるからreturn 0;でいいやってなってるだけ
217 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 09:19:10.68 ID:3zvDecHz0.net] >>213 > 関係ない。 言語仕様としては 0 が成功を表すというのは保証された動作 どこで規定されてるのか示してみ そもそもOpenVMSの処理系は規格違反とでも言うのかよw
218 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 09:19:24.86 ID:9vf9CEgT0.net] >>214 ほかはともかく、 0 だけはマジックではなく明確に意味を共通で持たせている という話なのでは?
219 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 09:26:12.98 ID:9vf9CEgT0.net] >>215 mainの戻り値がデフォルトで正常なときは 0 なのは言語仕様に規定されてるね 0又はEXIT_SUCCESSの場合,成功終了 この「又は」はほんとにORなので、EXIT_SUCCESS=1 のときは 0でも1でも正常よ
220 名前:はちみつ餃子 mailto:sage [2021/08/06(金) 09:44:11.58 ID:xkvwFph10.net] >>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)状態を処理系定義の形式で返す。 それ以外の場合,返される状態は処理系定義とする。
221 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 10:06:15.17 ID:QgUKHcUo0.net] >>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(); } こういうのと違うからな
222 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 10:38:06.15 ID:3zvDecHz0.net] >>216 ほとんどの環境で 0 を正常と解釈できるからマジックナンバー扱いでなくてもいいだろって言う判断を奥村晴彦氏がしたってだけの話だと思う >>217 途中でreturnせずにmain()の最後まで到達したら0を返す(これは言語仕様)という話と返された0が正常終了とみなすかどうかは別の話 > 0又はEXIT_SUCCESSの場合,成功終了 と主張するなら規格のどこで規定されてるのか書いてくれ
223 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 10:53:05.07 ID:QgUKHcUo0.net] 5.1.2.2.3 プログラム終了処理 main 関数の返却値の型がint と適合する場合,main 関数の最初の呼出しからの復帰は,main 関数が返す値を実引数としてもつexit 関数の呼出しと等価とする。main 関数を終了する}に到達した場合,main 関数は,値0 を返す。 7.20 一般ユーティリティ<stdlib.h> EXIT_FAILURE 及び EXIT_SUCCESS は,整数定数式に展開され,それぞれホスト環境に失敗終了状態又は成功終了状態を返すために,exit関数の実引数として使用することができる。
224 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 11:01:20.62 ID:3zvDecHz0.net] >>217-218 すまん今規格見たら確かに書いてあったわ OpenVMSとかは処理系で変換してるんだろうな >>219 それは単にアホが意味不明な名前付けしてるだけ そんなレベル低い話はチラ裏にでも書いとけ
225 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 11:25:57.87 ID:QgUKHcUo0.net] >>222 スペルを変えるだけでは無駄ってことだよ どこから出てきたのか、何から導いたのかが示されていなければ同じことだ
226 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 11:59:37.28 ID:GGzcYLSBM.net] >>223 何わけわからんこと言ってるんだよ EXIT_SUCCESS がわからないならプログラマ辞めちまえよw
227 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 12:04:06.56 ID:QgUKHcUo0.net] は? EXIT_SUCCESSの意味を英語で理解しろとか言ってきたのおまえさんだぜ NO_PROBLEMなんてオレオレマクロでもおまえさんは満足なんだろ どうりで規格票もロクに読まねえわけだ プログラマ辞めちまえをそのまま返すぜドスカタン
228 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 13:43:09.92 ID:3zvDecHz0.net] > は? EXIT_SUCCESSの意味を英語で理解しろとか言ってきたのおまえさんだぜ EXITもSUCCESSも英語だから英語「を」理解しろって言ってるんだが? 英語の前にお前は日本語を理解できるようになならないと駄目だなw
229 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 14:26:52.67 ID:QgUKHcUo0.net] 知らねえやつがまずいない英単語でドヤってて恥ずかしくねえの? ちょっと神経わからんなw Cを使う以上はISO/IEC 9899に書かれていることが前提だからこそEXIT_SUCCESSというスペルの意味を知っているべきだが おまえさんが露呈したアレこそがプログラマにあるまじき姿だろうがよ
230 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 14:34:50.29 ID:KBiduyaj0.net] シェルスクリプトスレの名物キチガイコンビみたいだなお前ら
231 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 15:10:51.95 ID:3zvDecHz0.net] >>227 > 知らねえやつがまずいない英単語でドヤってて恥ずかしくねえの? どこを見たらドヤッてるように見えるんだよ… > ちょっと神経わからんなw そもそもドヤるという神経がわからんわw
232 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 15:15:17.60 ID:QgUKHcUo0.net] >>229 どこを見るってPCのモニタだがw 1たす1は2なんだぞ〜ぼくすごいだろ〜みたいなお気の毒な姿
233 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 15:23:31.43 ID:QgUKHcUo0.net] 規格票は英語で書かれているわけだが 読んでないのは誰かさんだったね(プークスクス
234 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 15:34:06.02 ID:3zvDecHz0.net] >>230 > どこを見るってPCのモニタだがw わー、おもしろい これで満足かな?w
235 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 15:37:08.92 ID:QgUKHcUo0.net] スルーすれば逃げられると思っているようなのでもう一度言ってやる Cを使う以上はISO/IEC 9899に書かれていることが前提だからこそEXIT_SUCCESSというスペルの意味を知っているべきだが おまえさんが露呈したアレこそがプログラマにあるまじき姿だろうがよ
236 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 17:07:54.01 ID:3zvDecHz0.net] 露呈したのはEXITやSUCCESSでドヤられたとか思うお前のレベルだろw
237 名前:ハノン mailto:sage [2021/08/06(金) 19:16:51.91 .net] なんだか香ばしいですね‥‥ >>218 完璧な回答ですね‥‥
238 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 20:02:31.35 ID:CzNdrnJF0.net] main以外の関数だと、成功失敗の値は特に決められてはいないんですよね?
239 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 20:47:42.91 ID:y8oe7xdW0.net] >>236 うん、決められてないよ まあユーザ的には0を成功としておけばいい雰囲気だけど システムコールに近づくとだいたい0が失敗になってくよね 0っつーかぬるぽっつーか
240 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 20:49:05.43 ID:+/iE6x4C0.net] (s)scanf() の戻りは渡った非引数への変換に成功した数ですし ケースバイケースですわね
241 名前:デフォルトの名無しさん mailto:sage [2021/08/06(金) 20:49:34.62 ID:+/iE6x4C0.net] s/非/被/
242 名前:はちみつ餃子 mailto:sage [2021/08/07(土) 00:16:24.99 ID:YBZ7G4A60.net] >>236 規定はないけどある程度の習慣はあって、おおざっぱにまとめると ・関数が受け持つ機能が副作用であり、 返却値は成功or失敗のみを通知すればよいときは 0 を成功値とする ・関数が意味のある値を返すときはありうる値の範囲ではない値を失敗値とする (0、ヌルポインタ、負数、無限、NaNなど) ・入力値 (関数の引数) が正しい限り失敗がないことを見込めるときは 不正な入力があった場合を未定義とする (呼出し前にチェックされているか、ロジック上正しいことをプログラマが保証することを期待する) という感じだと思う。 あくまでも標準ライブラリやそれを踏襲した習慣をまとめるとこんな感じだろうという私なりのまとめなので 常に正しい選択というわけではないということはことわっておくが、 標準ライブラリを全く使わないようなプログラムもないだろうし 標準ライブラリを真似ておけば全体として一貫性が出て綺麗なんじゃないかな。
243 名前:デフォルトの名無しさん [2021/08/07(土) 00:29:33.44 ID:rXkekRAR0.net] strcmp
244 名前:はちみつ餃子 mailto:sage [2021/08/07(土) 00:54:21.18 ID:YBZ7G4A60.net] strcmp は失敗しない。
245 名前:デフォルトの名無しさん mailto:sage [2021/08/07(土) 06:09:45.55 ID:ZNSsPCBy0.net] >>234 それでexitやsuccessの意味を知らないと証明したつもりになっているアホを じゃあドヤる以外のどんな表現をすればいいんだ?
246 名前:ハノン mailto:sage [2021/08/07(土) 08:46:51.55 .net] >>240 cctypes
247 名前:デフォルトの名無しさん mailto:sage [2021/08/07(土) 09:05:40.63 ID:AEz+LKNR0.net] >>243 > それでexitやsuccessの意味を知らないと証明した どこからそんなアホなことを言い出したんだ? またPC画面からかな?w
248 名前:デフォルトの名無しさん mailto:sage [2021/08/07(土) 09:15:42.75 ID:xdlB1E9b0.net] exitなんかで終わらしちゃダメでしょ returnで終わらせないと
249 名前:はちみつ餃子 mailto:sage [2021/08/07(土) 09:50:33.76 ID:YBZ7G4A60.net] >>244 文字判定系の関数に失敗はない。
250 名前:デフォルトの名無しさん mailto:sage [2021/08/07(土) 11:27:30.28 ID:sspluaGX0.net] exit は どこでもドアで便利
251 名前:デフォルトの名無しさん [2021/08/07(土) 17:43:31.00 ID:efxonHum0.net] どこから終わっても良いのか?それとも出口は一つにすべきか?
252 名前:ハノン mailto:sage [2021/08/07(土) 18:13:40.12 .net] >>249 どこからでも return してよいのか?それとも return 文の記述は一箇所に限定するべきか?
253 名前:デフォルトの名無しさん mailto:sage [2021/08/07(土) 18:18:29.86 ID:sspluaGX0.net] 一つの関数内でreturnは一つにするというコーディング規約があったときは gotoの使用が増えてましたっけ
254 名前:デフォルトの名無しさん [2021/08/07(土) 18:31:09.62 ID:efxonHum0.net] Cなので仕方がないな。他の言語のように例外処理が try ... catch とかで使えれば gogo なくしても見易く書けるだろうけど。
255 名前:デフォルトの名無しさん mailto:sage [2021/08/07(土) 18:35:47.91 ID:HEQEjPMP0.net] 出口を1つにしたほうが達成感がある だがreturnお前はだめだ
256 名前:デフォルトの名無しさん [2021/08/07(土) 18:36:21.14 ID:efxonHum0.net] goto なしでやる方法は色々あるが、30年ぐらい前に何も参考にせずに俺が考えついたのは for (;;) のブロックに入れて途中で条件により break する方式。
257 名前:デフォルトの名無しさん mailto:sage [2021/08/07(土) 18:44:02.64 ID:608OSAzY0.net] 無限ループって怖くね?
258 名前:デフォルトの名無しさん mailto:sage [2021/08/07(土) 18:54:15.41 ID:vvCAvRb50.net] 実利の無いこだわりはやめていただきたく……
259 名前:デフォルトの名無しさん [2021/08/07(土) 18:54:27.54 ID:efxonHum0.net] >>255 最後のbreakを忘れたらそうなるのでそれだけは注意が必要
260 名前:デフォルトの名無しさん [2021/08/07(土) 18:58:54.78 ID:efxonHum0.net] ま、しかし、今はそういう例外処理的なやつは躊躇せずにgoto使うけどね。そうしないと見づらいし分かり難くなるから。
261 名前:デフォルトの名無しさん mailto:sage [2021/08/07(土) 19:27:07.82 ID:HEQEjPMP0.net] gotoを上手く使えないのは自制心がないやつだけだ 俺みたいに自制心のある人間はgotoとはマブダチになれる
262 名前:デフォルトの名無しさん mailto:sage [2021/08/07(土) 20:03:57.86 ID:AEz+LKNR0.net] >>258 に一票
263 名前:デフォルトの名無しさん mailto:sage [2021/08/07(土) 20:13:31.71 ID:sspluaGX0.net] フルメタルジャケット思い出したw
264 名前:デフォルトの名無しさん mailto:sage [2021/08/07(土) 21:20:33.45 ID:ZNSsPCBy0.net] >>245 あ、じゃあ違うんだな? > EXIT_SUCCESSがどういう意味かもわからないなら英語からやり直せよw 規格票もロクに読まないからEXIT_SUCCESSがどういう意味かわからんやつが 英語がどうたら言うのは確たる根拠もなく言ってた戯れ言てことだな PC画面に映ってるアフォはオモロイなwww
265 名前:デフォルトの名無しさん mailto:sage [2021/08/07(土) 21:41:58.88 ID:AEz+LKNR0.net] まずマジックナンバーの話なのか規格の話なのかはっきりさせようか… あと「〇〇がわからないなら□□しろ」と言うのは「〇〇がわからない」と言ってる訳じゃないぞw
266 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 05:41:26.37 ID:X9nZYb130.net] つまり出鱈目な前提で寝言ぬかしてるってことか
267 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 06:43:20.13 ID:3G5PI5Y70.net] 仮定法も知らないアホかよw
268 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 07:32:57.11 ID:X9nZYb130.net] 根拠なし、前提は出鱈目 恥を知れよまずは
269 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 09:53:42.66 ID:766a9h8SM.net] 仮定法を理解できなかったのか… 可哀想にw
270 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 10:19:43.20 ID:X9nZYb130.net] 証明も承認もされていない前提で何かぬかして それを肯定して欲しがるのは二重質問だろアフォ
271 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 10:55:03.30 ID:3G5PI5Y70.net] 証明とか承認とか、仮定法に全く関係なくて笑える 肯定とかに至っては全く意味不明w
272 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 10:56:31.55 ID:X9nZYb130.net] 前提を間違ってるのをどんなに言い訳しても無駄だよ ,,-―--、 |:::::::::::::;;;ノ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |::::::::::( 」 <仮定法仮定法仮定法仮定法・・・・ ノノノ ヽ_l \______________ ,,-┴―┴- 、 ∩_ /,|┌-[]─┐| \ ( ノ / ヽ| | バ | '、/\ / / / `./| | カ | |\ / \ ヽ| lゝ | | \__/ \ |  ̄ ̄ ̄ | ⊂|______| |l_l i l_l | | ┬ |
273 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 10:58:09.47 ID:o6Sz00kX0.net] いい加減にしろキチガイコンビ もう3日目だぞ
274 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 11:40:04.29 ID:3G5PI5Y70.net] なんの前提も置いてないのに前提が間違ってると言い続けるしかないポンコツBOT並みの知能だからねぇw
275 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 11:45:29.53 ID:X9nZYb130.net] > EXIT_SUCCESSがどういう意味かもわからないなら英語からやり直せよw 前提: EXIT_SUCCESSがどういう意味かわからない 主張: 英語からやり直せ 該当者がいないんだが あ、1人いたな規格票読まねえやつがw
276 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 12:51:11.36 ID:aqugezwJ0.net] >>257 for (;;) するくらいなら do {} while (0); 選ぶかな
277 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 12:53:24.15 ID:3G5PI5Y70.net] こんなのもわかんねーなら会社辞めちまえまえ! って言われて会社辞めるアホやな まあ辞めた方が会社にも本人にも良さそうだけどw
278 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 12:56:23.19 ID:3G5PI5Y70.net] >>274 同意 無限ループは for(;;) 途中脱出は do {} while(0) を使うな
279 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 13:34:46.83 ID:yE7YGXiy0.net] なるほどね do{}while(0)ね
280 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 13:38:12.62 ID:EooHPpNB0.net] while (1) は、たまに使います
281 名前:ハノン mailto:sage [2021/08/08(日) 14:30:57.58 .net] >>278 for(;;) ウォーニングが出ないからこちらを好みます
282 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 14:44:42.99 ID:Cdmlpdjr0.net] while(1)だとどのツールでどういう警告が出る?
283 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 14:55:49.48 ID:3G5PI5Y70.net] >>280 https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4127?view=msvc-160 最近(でもないか)の奴はwhile(1)だと警告を出さないようにしてるみたいだけど
284 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 15:21:56.83 ID:ubSlJzPI0.net] Warningって読み方ウォーニング? ワーニングじゃないの?
285 名前:ハノン mailto:sage [2021/08/08(日) 15:24:23.58 .net] >>282 Star Wars ×スターワーズ ◎スターウォーズ って覚えてね
286 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 15:41:10.34 ID:EooHPpNB0.net] >>280 cl -W4 while.c Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86 while.c while.c(5) : warning C4127: 条件式が定数です。
287 名前:ハノン mailto:sage [2021/08/08(日) 15:56:39.95 .net] >>280 ,281 うーん、手元の cygwin gcc 10.2.0 では while (1) も while (42) もウォーニングは出ませんね、コメントありがとうございます‥‥昭和は遠くなりにけり
288 名前:デフォルトの名無しさん mailto:sage [2021/08/08(日) 22:32:52.55 ID:19kZVfwv0.net] >>282 アメリカ人だと ゥワーニン って言ってた インド人(会話は英語)は ウォニング ってグまではっきり言ってた こっちから言うときは片仮名で「ワーニング」って言っても余裕で通じた まあエンジニアどうしで通じりゃ適当でいいんだよ
289 名前:はちみつ餃子 mailto:sage [2021/08/09(月) 00:46:08.57 ID:OWI9S7jW0.net] >>282 グーグル翻訳に発音させてみたらどちらともつかぬ半端な発音に聞こえる。
290 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 07:13:46.14 ID:eF2Q2UUf0.net] >>279 つーかマジックナンバーがないのが魅力 # 組み込みでは無限ループがないほうが珍しい
291 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 11:00:51.25 ID:5Oj13b1Xd.net] for(;;) はforeverと読む(俺定義)
292 名前:デフォルトの名無しさん [2021/08/09(月) 11:51:07.90 ID:Lb8CQXvk0.net] >282 「ア」と「オ」の発音の違いは曖昧。 …というのをトリビアの泉でやってた。
293 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 12:03:01.28 ID:eF2Q2UUf0.net] アに近い←米語 オに近い←英語
294 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 12:40:56.75 ID:GX8oEfXz0.net] ウォーニング と発音した方が通じやすいけどな
295 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 12:42:49.10 ID:78aLRiJY0.net] while( 条件式 ) そもそも条件式には、実質的なブール値・真偽値しか使えない。 MI
296 名前:SRA-C 違反 [] [ここ壊れてます]
297 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 13:25:39.38 ID:c/YgMY770.net] これ最初に間違えた奴誰?
298 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 13:41:09.70 ID:eF2Q2UUf0.net] whileの括弧の中は制御式な == と != は等価式 不等号は関係式 条件式はいわゆる三項演算子だぞ
299 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 13:54:46.12 ID:Hd/9N5qL0.net] 参考までに
300 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 14:03:11.33 ID:c/YgMY770.net] >>295 等価式と関係式の意味的違いがよく分からん
301 名前:はちみつ餃子 mailto:sage [2021/08/09(月) 14:30:20.02 ID:OWI9S7jW0.net] >>297 ・ 優先順位が違う ・ 関係演算子は複素数型をオペランドにとれない
302 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 15:32:43.41 ID:WWM043YB0.net] 結局は成り立つか成り立たないかってことでしょ その2つを厳密に分ける意味はなに?
303 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 15:43:28.94 ID:qYrd5+ip0.net] 算術式 関係式 論理式 という分類は聞いたことがあるが>>295 みたいなのは初耳だなぁ。
304 名前:はちみつ餃子 mailto:sage [2021/08/09(月) 16:04:49.05 ID:OWI9S7jW0.net] >>300 条件式 (conditional expression) については C99 なら 6.5.15 に記述がある。 制御式 (controlling expression) という言葉は当たり前のように出現して 明確に定義を与えているらしい箇所がみつからないんだけど 仕様では >>295 の意味で使われていることは自明。
305 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 16:10:06.60 ID:hymvfobjM.net] 等価式 ⊂ 関係式 でしょ
306 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 16:23:09.32 ID:JaaB5Egp0.net] 文法定義上の用語だよ 区別する最大の意義は演算子優先順位の定義 >>293 が不用意に「条件式」と書いてしまったばっかりに本質的でないツッコミが発生しただけ
307 名前:はちみつ餃子 mailto:sage [2021/08/09(月) 16:36:37.59 ID:OWI9S7jW0.net] >>302 構文規則としては 等価式: 関係式 等価式 == 関係式 等価式 != 関係式 と書いてあるからその考え方でも間違いとは言い切れないけど それを言うなら シフト式: 加減式 シフト式 << 加減式 シフト式 >> 加減式 だからといって 加減式 ⊂ シフト式 と言ってしまうと (日常的な感覚としては) ちょっと違和感があるし、 このへんの言葉はシンタクスを定義する上での便宜的な概念 (BNF で書くとそうなるってだけ) だから、演算子の機能上の意味付けとは分けて考える必要がある。
308 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 16:38:11.39 ID:S8n0VVLE0.net] >>301 >>295 の意味というのがよくわからんけどcontrolling expressionって例えばswitch( )のカッコ内もそうだから等価式と関係式だけじゃないよ
309 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 16:39:33.74 ID:qYrd5+ip0.net] >>303 >区別する最大の意義は演算子優先順位の定義 まさにそこが疑問なんだけど、優先順位ごとに全部「△△式」って名前を付けて区別するのは見たことない。
310 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 16:41:53.02 ID:S8n0VVLE0.net] >>304 日常的な話をしてるのか規格の話をしてるのかはっきりさせてからレスしてくれ 規格の話をしてるのはあんたともう一人だけだとも思うぞ ※ >>305 のツッコミは別にして…
311 名前:はちみつ餃子 mailto:sage [2021/08/09(月) 16:51:05.91 ID:OWI9S7jW0.net] >>307 違う話が混ざってるのは意図的。 レイヤが違うものを混ぜて考えるとおかしいよねという話なんで。
312 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 17:02:47.61 ID:eF2Q2UUf0.net] 6.8.5.1 while 文 制御式の評価は,ループ本体の各実行の前に行う。 6.8.5.2 do 文 制御式の評価は,ループ本体の各実行の後に行う。 6.8.5.3 for 文 文 for ( 節1 ; 式2 ; 式3 ) 文 の動作は次のとおりとする。式2 は制御式とし,ループ本体の各実行の前に評価する。
313 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 17:06:46.07 ID:eF2Q2UUf0.net] 条件式なんてオレ用語はwhileの括弧の中で比較だけが許されると思いたがるバイアスの顕れだろ いいか、もっぺん言うぞ バイアス
314 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 17:12:09.00 ID:S8n0VVLE0.net] >>308 要するに荒らしたいと言うことか ウザいけどこう言う奴は言って聞くわけ無いしな
315 名前:はちみつ餃子 mailto:sage [2021/08/09(月) 17:18:59.09 ID:OWI9S7jW0.net] >>311 どこを要したの?
316 名前:293 mailto:sage [2021/08/09(月) 18:00:51.96 ID:78aLRiJY0.net] if ( 条件式 ) Ruby では、条件式にオブジェクトを書いても、 偽になるのは、nil, false の2つだけだが、 他の動的言語では、各型に偽がある。 空文字列・空配列・空辞書、0, 0.0 など あまりに、バグの組み合わせが多いために、 実質的なブール値・真偽値しか使えないのが普通 それで、TypeScript みたいに型チェックが流行るようになった。 C も同じで、型チェック必須言語 これらが無いと、バグが多すぎて、製品レベルの品質基準にならない
317 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 18:05:14.63 ID:WWM043YB0.net] ループを制御するための式だから制御式というんだろうけど、 制御式のなかで 例えば while(i++==10) なんて出来たとしてもそんな書き方しないだろうし
318 名前:ハノン mailto:sage [2021/08/09(月) 18:20:08.88 .net] >>314 while 文なら時々します https://ideone.com/9Tkokb
319 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 18:26:16.77 ID:S8n0VVLE0.net] >>314 昔は while((*dst++ = *s++) != '¥0'); とか定番だったけどね
320 名前:ハノン mailto:sage [2021/08/09(月) 18:40:40.16 .net] >>316 ノンノン! while (*des++=*src++) ;
321 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 20:27:51.00 ID:eF2Q2UUf0.net] >>313 勝手にレビュー落ちてろ 俺らには関係ない
322 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 20:56:50.79 ID:CmP62z0OM.net] while(i++!=10) なら、あるかも
323 名前:はちみつ餃子 mailto:sage [2021/08/10(火) 01:18:25.50 ID:7+xjomdk0.net] プログラミング言語C 第2版 (いわゆる K&R) に載っているくらいなので C では珍しくないのは確か。 日本語版の 129 ページあたりに「こうした慣用法はマスターすべきである」と書いてある。
324 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 01:22:24.66 ID:wjw1gmPx0.net] K&Rは古典なので現代において参考にするようなものではない
325 名前:はちみつ餃子 mailto:sage [2021/08/10(火) 02:16:48.33 ID:7+xjomdk0.net] あらたに書くときに使うべきではないと思うけど古いコードがあるのも現実なんやで。
326 名前:293 mailto:sage [2021/08/10(火) 11:49:11.43 ID:9wi/dlAk0.net] ++, -- は、バグが多いから、Ruby から排除された Go でも、単独文でしか書けない。 組み合わせることができない これらを組み合わせると、MISRA-C 違反。 MISRA-C に則っていないものは、製品レベルとして使えない Andrew Koenig のC Traps and Pitfalls「Cプログラミングの落とし穴」、 組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、2006、MISRA‐C研究会 こういう本を読んでいないだろ
327 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 12:28:40.74 ID:MOslRoWuM.net] 書いてはいけないが、読める必要はある。 目を背けるな
328 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 12:38:24.67 ID:PfQcBK0N0.net] 「おやつは300円以内」のようなくだらねえことが延々書き連ねてある ツッコミどころ満載なやつ馬鹿馬鹿しくて相手してらんね
329 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 15:45:47.63 ID:21u4vH9ca.net] >>324 いろんなスレでNG推奨と言われてることから目を背けている奴に何を言っても無駄だろう
330 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 15:51:29.27 ID:Ix5h21qC0.net] マ板でぼろぼろに言われてますが、 このコードは何が悪いのでしょう https://wandbox.org/permlink/JQc6ZwNrcNThSfkY
331 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 15:52:38.52 ID:PfQcBK0N0.net] プログラミング以外のところでも「俺様が知らない言葉を使うな」という痛いやつがいるのと同じ
332 名前:デフォルトの名無しさん mailto:sage [2021/08/10(火) 15:54:17.27 ID:PfQcBK0N0.net] >>327 IOCCCのルールを守っていないからだろ
333 名前:ハノン mailto:sage [2021/08/10(火) 18:42:13.96 .net] テステス
334 名前:ハノン mailto:sage [2021/08/10(火) 18:45:30.07 .net] >>327 何をやっているのか努力しないと読めないのが辛いです、そういう曲芸を仕事でやられたらボロクソなのも仕方がないとおもいますね
335 名前:蟻人間 mailto:sage [2021/08/10(火) 18:58:54.35 ID:98gOzHW9d.net] >>327 型キャスト使わなくても型を合わせばいいのに。 ループ変数がcharってありえないでしょう。
336 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 08:41:39.44 ID:19rzwYjH0.net] doubleでfor回したりはするね
337 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 10:26:21.33 ID:fvD2fRTR0.net] >327 単純にソースの目的がわからない。 バイトオーダ(エンディアン)の確認? {{ ... }/*コメ*/}というコーディングもなんかキモイ。
338 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 13:02:40.93 ID:c2ypq8+M0.net] レスありがとうございました。 >>327 は、 https://medaka.5ch.net/test/read.cgi/prog/1625843192/ というスレで、初心者の1が質問を投げるとこから始まります。 入力された文字を逆順で表示したいという内容です。 それで1が貼ったコードを巡り、いつしか省力化の流れになって、 そして投下されたのが>>327 です。
339 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 13:57:42.27 ID:EWMgwFeS0.net] なるほどなあ とりあえず文字列としてしか使われない領域に意味ありげにint配列使ってるのと、バイトオーダーに依存している、の2点が最大のクソポイントか
340 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 16:04:17.52 ID:fvD2fRTR0.net] >334 >{{ ... }/*コメ*/}というコーディングもなんかキモイ。 Chromeのせいか? なんか変な文字化け(変換?)起こしてるっぽい。 >char len,i; が char len、i; ってなるとか。 FireFoxで開いたら正常表示された。 >335 >入力された文字を逆順で表示したいという内容です。 把握 >327 >Stdin >abcdefg 7文字ってことは >printf("%c%c%c%c",... の最初のループの1文字目は "\0"が出力されてるのかな?それでいいのか? int t[25];が0クリア
341 名前:されてるならいいけど、 ゴミが残ってると正しく表示されないんじゃないか? [] [ここ壊れてます]
342 名前:デフォルトの名無しさん mailto:sage [2021/08/11(水) 16:25:45.76 ID:91mms/zJ0.net] バイトオーダー決め打ちなのと sizeof(int) == sizeof(char) * 4 前提にしつつ 4文字づつパックで処理してる工夫なんだろうけど わざわざ難しくしてってのおふざけ暴走が生んだ結果だな
343 名前:デフォルトの名無しさん [2021/08/12(木) 04:13:22.60 ID:zN4hKecF0.net] >>327 それって入力した文字をただ出力したいだけ? なんでそんなに複雑に書いたの?
344 名前:デフォルトの名無しさん [2021/08/12(木) 04:15:08.28 ID:zN4hKecF0.net] あ、逆順に出すの?それにしても複雑怪奇だなあ。どうしてそうなった?
345 名前:デフォルトの名無しさん [2021/08/12(木) 06:20:29.21 ID:zN4hKecF0.net] >>335 そっちのスレにまともなやつのURLを貼っといた。
346 名前:デフォルトの名無しさん mailto:sage [2021/08/12(木) 07:41:49.84 ID:+O9ZyhRw0.net] わざと複雑怪奇に書く遊びはC使いの古来の文化だよ 有名サイトだけど https://www.ioccc.org/
347 名前:デフォルトの名無しさん mailto:sage [2021/08/12(木) 15:37:03.65 ID:s+UN3BdM0.net] i>-1 は、i >= 0 の方が、分かりやすい
348 名前:デフォルトの名無しさん mailto:sage [2021/08/12(木) 16:26:35.93 ID:qgQ8hJHG0.net] char型のiをわざわざintにキャストしてるのは何か理由があるのか 最初からintでiを定義しておけばいいのに
349 名前:デフォルトの名無しさん mailto:sage [2021/08/12(木) 17:14:43.67 ID:s+UN3BdM0.net] 8ビットを、32ビットに変換するのは汎整数拡張 実際のCPU でも、8ビットでは処理できないので、 32ビットに変換してから処理して、8ビットに戻す つまり汎整数拡張は、ほぼ無害
350 名前:デフォルトの名無しさん mailto:sage [2021/08/12(木) 17:48:37.78 ID:iQcpjp5R0.net] INT07-C. 数値には符号の有無を明示した char 型のみを使用する https://www.jpcert.or.jp/sc-rules/c-int07-c.html
351 名前:デフォルトの名無しさん [2021/08/12(木) 19:28:25.65 ID:PwkehoUJ0.net] 処理系によってcharがunsignedだったりするから ライブラリのポーティングでえらい目にあったりするのよね
352 名前:デフォルトの名無しさん mailto:sage [2021/08/12(木) 20:05:44.88 ID:s+UN3BdM0.net] MISRA-C でも、単なるchar 型は使用禁止。 -128〜127 か、0〜255 か、どちらか分からないから signed char か、unsigned char を、明示して使わなければならない。 または、int8 か、uint8
353 名前:デフォルトの名無しさん mailto:sage [2021/08/12(木) 20:13:25.34 ID:+O9ZyhRw0.net] 信者以外には全く何の関係もないことだな
354 名前:デフォルトの名無しさん mailto:sage [2021/08/12(木) 23:08:22.05 ID:hI2dv5iP0.net] 信仰しなさい。
355 名前:デフォルトの名無しさん mailto:sage [2021/08/12(木) 23:18:10.25 ID:qgQ8hJHG0.net] char「我をたたえよ」 「チャー!」「チャー!」
356 名前:デフォルトの名無しさん mailto:sage [2021/08/12(木) 23:20:40.68 ID:iqzxJUR40.net] やっぱりプログラム板は勉強になります
357 名前:デフォルトの名無しさん mailto:sage [2021/08/12(木) 23:22:37.60 ID:ZBXe4sG30.net] あれは「チャー」って叫ぶのか?「キャー」じゃだめなの?
358 名前:ハノン mailto:sage [2021/08/13(金) 01:00:42.90 .net] 「シャー」が正解です…
359 名前:デフォルトの名無しさん [2021/08/14(土) 01:39:23.05 ID:Znm3fqvr0.net] きゃら
360 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 16:41:42.16 ID:r/g27g8Q0.net] ヒャル
361 名前:はちみつ餃子 mailto:sage [2021/08/14(土) 16:51:07.63 ID:xM4RG8+90.net] 語源というか原形は character でその綴りを縮めたのだと考えれば、 (そしてあえて発音をカタカナに当てはめようとするのであれば) キャー、もしくはキャラが順当なんじゃないかな。
362 名前:ハノン [2021/08/14(土) 19:03:43.32 .net] 欧米人なら letter を使いそうなものを、それを character(=象形文字系統)としたその心が知りたい‥‥どうでもいい話ですみません
363 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 20:55:06.51 ID:kmQRiZG00.net] characterはcharと略せるけどletterは略せないとか? 一文字でも縮めることにやっきになってたみたいだし charは「きゃら」だけど、enumを「いなむ」って言っちゃう
364 名前:enumerateは「あにゅむれい」なのに [] [ここ壊れてます]
365 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 21:43:24.21 ID:g6ShE1m2M.net] アニメで良いよ
366 名前:デフォルトの名無しさん [2021/08/14(土) 22:34:56.70 ID:Znm3fqvr0.net] 性格,性質,気質,特質,特性,特色,人格,品性,高潔さ,正直さ
367 名前:デフォルトの名無しさん mailto:sage [2021/08/14(土) 22:38:05.04 ID:io8zq2Gb0.net] むこうの語感的にletterだとアルファベットだけで数字とか記号を含めないかもしれない
368 名前:デフォルトの名無しさん [2021/08/14(土) 23:51:39.71 ID:lbIZmRLc0.net] >>358 letterだとletになりそうだから嫌ったんだろ
369 名前:はちみつ餃子 mailto:sage [2021/08/15(日) 00:01:55.60 ID:oR5NZ4bd0.net] いっそのこと単に byte とでもしておけばよかったのかもしれない。
370 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 00:05:31.44 ID:U+FsjVqC0.net] >>362 が正解 >>363 は単なるバカ
371 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 00:25:17.76 ID:ftNChFXo0.net] >>364 char8_t ですね bool が int も無駄が多い
372 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 01:04:08.98 ID:lrNh9u+Sa.net] 歴史的に char と byte はどっちが先なのかな
373 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 04:44:19.93 ID:Jy6PA5Os0.net] 英語圏でもチャーだけどな ググればすぐわかる
374 名前:デフォルトの名無しさん [2021/08/15(日) 06:15:17.61 ID:FL52AdfHa.net] https://eow.alc.co.jp/search?q=char 焦がす。
375 名前:デフォルトの名無しさん [2021/08/15(日) 06:18:12.36 ID:0d93Uofwa.net] char siu チャーシュー
376 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 16:55:39.88 ID:76TevYyAa.net] >>368 もうずいぶん昔だけど「キャラクター」とか「インテジャー」とか省略しないで呼んでたぞ 今は「チャー」なんか
377 名前:はちみつ餃子 mailto:sage [2021/08/15(日) 17:59:18.88 ID:oR5NZ4bd0.net] >>359 enumerate の頭の音はグーグル翻訳だとエに近い発音に聞こえるけど weblio だと明瞭にイに聞こえる。
378 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 19:39:25.14 ID:Jy6PA5Os0.net] >>371 英語設定でググってみるといいよ チャー派とカー派がいてチャー派が優勢のように見える。 reddit見るとお前ガンダム見たことないんか?シャーーー!とかlisperが混乱するだろがってコメントがあってワロ
379 名前:デフォルトの名無しさん mailto:sage [2021/08/15(日) 19:58:39.32 ID:l+/QmNzh0.net] care派も結構いるっぽいが
380 名前:デフォルトの名無しさん [2021/08/15(日) 21:05:49.36 ID:g44nIVaSM.net] プログラムを書くのに読み方なんて意味が通じればどっちでもいいやん
381 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 00:02:13.11 ID:r0BCUeQy0.net] 初心者です、stdio.hの保存場所が知りたいです Visual Studio Communuty 2018を使っており、標準ライブラリはインクルードディレクトリに指定された場所にあるということでした プロパティでインクルードディレクトリを確認したところ、以下のようになっていましたが意味が分かりません $(VC_IncludePath);$(WindowsSDK_IncludePath); 変数になっているようですが、どこかで確認できるのでしょうか?
382 名前:デフォルトの名無しさん [2021/08/16(月) 00:13:21.48 ID:x3HJsFala.net] 間違っていたらごめんなさい その $() で囲まれた文字列をコマンドプロンプトから echo %文字列% として表示される文字列はどうでしょう
383 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 00:14:50.67 ID:wg/zbZxl0.net] その値のところをクリックして<編集...>を選べば評価された値が見えると思う その画面の右下の「マクロ>>」ってボタンを押せば使われてる変数の値も見える 上の構成がDebugかReleaseかで値が違う変数もあるけどIncludePathはたぶん同じ 2019で確認したから微妙に違うかもしれない
384 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 00:19:13.32 ID:x3HJsFala.net] echo で確認す
385 名前:る方法は、その環境下でなければ なので、別にコマンドプロンプトを起動してではダメですね [] [ここ壊れてます]
386 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 00:21:12.34 ID:r0BCUeQy0.net] >>378 >>379 ありがとうございます、確認できました! Visual Studio実行環境でこれらの環境変数が追加されているイメージなのですね
387 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 00:23:50.80 ID:x3HJsFala.net] そ
388 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 00:29:55.90 ID:sQwoI9K70.net] VSインストールすると環境変数セットするバッチファイルが入って来たと思うが、今は違うのか? 古い知識で済まん
389 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 04:32:44.78 ID:pMWrjH7B0.net] てすてす
390 名前:デフォルトの名無しさん [2021/08/16(月) 10:19:54.49 ID:sZNsU9Vp0.net] すてすて
391 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 14:57:58.88 ID:Gh+OcB3lF.net] 実は VisualStudio は初心者向けじゃない
392 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 20:10:17.02 ID:BeGCPKkC0.net] visual studioが覇権取ってからプログラミングが嫌になりました・・・ プログラミングが嫌というかvisual studioの設定とか使い方とかそういうのを覚えるのが・・・ LSI C+メモ帳で良かったのに・・・
393 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 20:17:22.96 ID:sQwoI9K70.net] LSI C(試食版)は16ビットコンパイラでしかもSmodelしか作れないから 64ビットWindows環境で動かすのは無理じゃない?
394 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 20:37:48.81 ID:4H+7uDzk0.net] ……Visual Studio Community 2018なんてあったっけ?
395 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 20:41:26.98 ID:1MUZwyiI0.net] vs2019 と cuda の相性が悪かったが治ったのなら起こしてくだしあ
396 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 22:55:54.30 ID:r0BCUeQy0.net] 素朴な疑問でprintfでdouble型を表示させようとしたとき%lfでなく%fにする理由なんですが、 floatを引数とするとdouble型にキャストされるので、printfではfloat型もdouble型も同じ%fと記述すればいいことになっている と言う理解で合ってますか?
397 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 23:08:54.14 ID:GAZDNQn70.net] 相性悪いって何かあったっけ?
398 名前:はちみつ餃子 mailto:sage [2021/08/17(火) 03:49:27.19 ID:yPn/BtRt0.net] >>390 あってる。 printf ではというか可変長引数では既定の実引数拡張のルールで float は double に拡張されるから区別しようがない。 よくわかってないやつが %lf って書いちゃうから C99 から仕様に入れることになったみたいな話だったはず。 (逆に言えばそれまでは無かった。) でも引数に double を与えるつもりなら意味的にそれがわかるにこしたことはないので、 人間が読み書きする都合を考えるなら積極的に区別したほうがいいと思う。
399 名前:デフォルトの名無しさん mailto:sage [2021/08/17(火) 05:49:50.95 ID:bbuY4XG00.net] >>387 64で16bitモード使えないのは単なる嫌がらせ 技術的に本当はできるのに拒否してる 必要ならVM使うといい 過去バージョンは↓で入手できる https://winworldpc.com/library/operating-systems
400 名前:ハノン mailto:sage [2021/08/17(火) 10:00:30.15 .net] >>393 私は長年武田さんの MS-DOS Player takeda-toshiya.my.coocan.jp を使っています‥‥
401 名前:デフォルトの名無しさん mailto:sage [2021/08/17(火) 10:22:58.26 ID:bbuY4XG00.net] >>394 なかなかオモロイサイトだね спасибо!
402 名前:デフォルトの名無しさん mailto:sage [2021/08/17(火) 11:04:10.80 ID:1ngtDSTVK.net] >>390 >>392 整数の基本型がintであるように、小数の基本型がdoubleだから。 そもそもdoubleっつー名前が良くないと思う。いまのdoubleをfloatにして、いまのfloatをsingle floatとかshort floatにすれば良かったのに…
403 名前:デフォルトの名無しさん mailto:sage [2021/08/17(火) 11:14:12.12 ID:bbuY4XG00.net] 年代的に元々floatが標準のつもりだったんだろうな
404 名前:デフォルトの名無しさん mailto:sage [2021/08/17(火) 11:56:57.33 ID:4Ah+oX6mM.net] 当たり前は時代と共に変わる
405 名前:デフォルトの名無しさん [2021/08/17(火) 16:52:28.09 ID:5M+zf85m0.net] >>396 倍精度ってのを表したかったんだろうな。
406 名前:デフォルトの名無しさん mailto:sage [2021/08/17(火) 21:48:20.20 ID:G/OIjFk20.net] >>396 >小数の基本型がdoubleだから。 その理由は%fがdoubleだからというトートロジーでない?
407 名前:デフォルトの名無しさん mailto:sage [2021/08/17(火) 22:05:20.16 ID:SEkFORwja.net] 計算自体は倍精度でやっていて、floatの場合結果を丸めてるの?
408 名前:デフォルトの名無しさん mailto:sage [2021/08/17(火) 22:24:11.58 ID:oC68rP2o0.net] そもそも > 可変長引数では既定の実引数拡張のルールで float は double に拡張される って言うのがよくわからん 普通にfloatはfloatのまま渡しゃいいじゃんと思うんだけどなんか理由あったのかな?
409 名前:はちみつ餃子 mailto:sage [2021/08/17(火) 22:44:19.25 ID:yPn/BtRt0.net] 引数の受け渡しにスタックを使う場合でもレジスタを使う場合でも ワードサイズより小さい型はどうせそのワードサイズに調整して積むことになるので切り詰める意味がない。 (ワードにたくさん情報を詰め込むことも出来るといえば出来るけどかえって非効率になる。) だから int より小さい型を int に調整するというのはハードウェア的 な都合が反映されていると思う。 昔は浮動書数点演算ユニット (FPU) は CPU の外に持っているのが普通だったんだが その時代でも FPU のレジスタは大きめなサイズを持っていた。 double が収まるレジスタがあるなら double で受け渡すほうが都合が良かったんだろう。 ※ この場合の「ワード」は2バイトという意味ではなく各アーキテクチャにおける基本サイズという意味なので注意
410 名前:デフォルトの名無しさん mailto:sage [2021/08/18(水) 09:07:55.01 ID:a3KKdrJy0.net] ん、8087由来のサイズになってるのはlong doubleだろ
411 名前:デフォルトの名無しさん mailto:sega [2021/08/18(水) 09:53:36.78 ID:AHN/ch/v0.net] long double って表現がもう頭悪いよね・・・
412 名前:デフォルトの名無しさん mailto:sage [2021/08/18(水) 14:10:11.42 ID:a3KKdrJy0.net] %lfはどう見てもlong floatだね %dはint用にしちゃってるから仕方なかったのかな
413 名前:デフォルトの名無しさん mailto:sage [2021/08/18(水) 19:02:54.03 ID:9oCYCOnk0.net] >>405 ダブロン って表現だとゲンが悪すぎるだろ・・
414 名前:ハノン mailto:sage [2021/08/18(水) 19:55:50.38 .net] >>403 >その時代でも FPU のレジスタは大きめなサイズを持っていた。 80bit でしたっけ、そのうち仮数部が何ビットだったかは思い出せません
415 名前:デフォルトの名無しさん mailto:sage [2021/08/18(水) 20:09:35.86 ID:Wv6HiLZZ0.net] 符号部1ビット+指数部15ビット+仮数部64ビット
416 名前:デフォルトの名無しさん [2021/08/22(日) 01:54:25.30 ID:0Cz6ueFz0.net] Rustのメモリ安全性はボローチェッカーによって担保されているが、 Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、 GC無しのView typesで参照の有効性を検証することによってメモリ安全性を保証しつつ 限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか? Nimの実験的特徴 著者: アンドレアス・ルンプ バージョン: 1.5.1 nim-lang.github.io/Nim/manual_experimental.html Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し ているにもかかわらず、高速なCのソースコードを吐き出せるのでC言語でリモートワーク されている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる 「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
417 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 11:26:19.76 ID:D+A51yiS0.net] pythonを可読性高いという時点で眉唾だな・・・
418 名前:デフォルトの名無しさん mailto:sega [2021/08/23(月) 11:13:34.28 ID:4N/X7GO90.net] char *b = "0123456"; printf("%x\n", 3[b]); // 33 これって、どうしてこういう書き方 3[b] ができるんだっけか シンタックスシュガーとかじゃなく、明確な理屈があって出来ちゃうんだよね?
419 名前:デフォルトの名無しさん [2021/08/23(月) 11:39:17.23 ID:JYwdk8yBF.net] *(3 + b)
420 名前:デフォルトの名無しさん [2021/08/23(月) 11:42:03.51 ID:UaBHP8Yo0.net] >>412 いやあ、それ、シンタックスシュガーでしかないと思うが。 [の左側+[]の内側で計算した結果をポインタ扱いにするってだけなので。
421 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 11:52:16.18 ID:4N/X7GO90.net] >>413-414 ありがとうなるほどそーいう理屈なのか 素晴らしいです。 全てを理解していきます
422 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 22:51:00.15 ID:qUWlnfUi0.net] 標準でもそのまんまだなぁ > A postfix expression followed by an expression in square brackets [] is a subscripted designation of an element of an array object. > The definition of the subscript operator [] is that E1[E2] is identical to (*((E1)+(E2))). > Because of the conversion rules that apply to the binary + operator, if E1 is an array object (equivalently, a pointer to the initial element of an array object) and E2 is an integer, E1[E2] designates the E2-th element of E1 (counting from zero).
423 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 22:55:19.33 ID:OjohHfKH0.net] 余計なお世話になるが printf("%x\n", 3["0123456"]); これでもいいんだよな
424 名前:はちみつ餃子 mailto:sage [2021/08/24(火) 00:04:42.72 ID:MkJE9y3A0.net] >>417 良いよ。
425 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 10:01:54.33 ID:tBKv4I6S0.net] 脱線するけど、そもそもCでこの書き方できたのか printf("%x\n", "0123456"[3]); なんかできないと思い込んでた。 Cはなんでもできるんだな
426 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 17:49:40.18 ID:DexxKsi10.net] IOCCCの黎明期ならマウントとれたネタだね 今ドヤるやつはプークスクスされるだけ
427 名前:デフォルトの名無しさん [2021/08/24(火) 19:44:16.50 ID:KCG/N/Sb0.net] stack領域で確保したポインタをfreeしたらどうなるんですか?
428 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 20:03:31.48 ID:Y1wLIEKvM.net] >>419 > printf("%x\n", 3["0123456"]); はともかく > printf("%x\n", "0123456"[3]); は実用でもそこそこ使うだろ 4bitの数値を16進数に変換する時に "0123456789abcdef"[i] ってやるとかは定番
429 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 20:04:24.13 ID:Y1wLIEKvM.net] >>421 鼻から悪魔が出てくる
430 名前:デフォルトの名無しさん [2021/08/25(水) 01:30:07.26 ID:6n+Di1sM0.net] >>423 どういうことですか?
431 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 01:52:34.44 ID:7J8MKXIfa.net] >>421 酔ってるからかもしれないけど、質問の意味からして分からない 実装によるだろうけど、動的に確保されるオブジェクトはヒープに確保されるだろうし 黙ってれば確保したメモリへのアドレスを保持するポインタはスタックに置かれるし 実装によるけど
432 名前:デフォルトの名無しさん [2021/08/25(水) 02:58:06.66 ID:kk6d2P3X0.net] >>422 定番って言えそうなほど使われているソースを見たことないなあ。
433 名前:デフォルトの名無しさん [2021/08/25(水) 03:01:55.29 ID:kk6d2P3X0.net] >>421 alloca()でメモり確保した場合のことを言ってるの?だとすればfree()しちゃ
434 名前:ダメだよ。やってしまった場合にどうなるかは使っているライブラリによるんじゃないかな。そういう呼び出しを想定していないライブラリだと落ちるかも知れない。 [] [ここ壊れてます]
435 名前:はちみつ餃子 mailto:sage [2021/08/25(水) 03:30:51.31 ID:BzERENYF0.net] >>424 未定義のこと。 C における未定義は何が起きても構わないことを意味する。 あるときネットニュース上でそれを説明するやりとりがあって、 あらゆることが起こりうるという例として鼻から悪魔が出てくる ことも含まれるというような言い回しが使われた。 https://groups.google.com/g/comp.std.c/c/ycpVKxTZkgw/m/S2hHdTbv4d8J それが定着して未定義のことを鼻から悪魔というのが通例になっている。
436 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 05:56:16.97 ID:oIlmdH3GM.net] >>426 ちょっとググればすぐに出てくるぐらいには使われてる char hex_from_nibble(unsigned char n){ return "0123456789ABCDEF"[n & 0xf]; } https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13162097918
437 名前:デフォルトの名無しさん [2021/08/25(水) 09:19:52.23 ID:U8ZXR+0VF.net] >>421 やってみろ ほとんどの場合は何も起こらない
438 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 09:57:31.74 ID:U3t+QZRrK.net] >>421 スタック…と言うかmalloc(calloc/realloc)で確保したポインタ以外をfreeすると何がおこるか判らない(鼻から悪魔)。 実際の話だと、大抵の実装ではmallocは確保した領域に管理情報を埋めて返し、freeはその管理情報を見て解放処理をする。この場合、管理情報がデタラメになるのでメモリアクセス違反でプログラムが落ちる事が多い。
439 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 10:00:41.38 ID:VHSVWUHA0.net] freeは何もしないことも許される、なんて言って呼び出しそのものを否定するやついたな昔
440 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 11:31:20.70 ID:hlr8Pa7o0.net] ほとんどの場合は、無人の荒野を爆撃するだけだろうが いつかは住民が住んでいるところを攻撃するぞ
441 名前:デフォルトの名無しさん [2021/08/25(水) 12:30:15.33 ID:6n+Di1sM0.net] 僕はc言語自体初心者だったのですが、stack領域で確保したポインタをfreeするというのは以下のコードを指すつもりで言ってました。 int a; free(&a); 鼻から悪魔が出るというのは未定義動作になると言うのを言うんですね。また一つ勉強になりました。
442 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 12:58:42.10 ID:hlr8Pa7o0.net] ポインタでもないし、何をしたいかが分からん この時空を破壊したいなら、もっと考えてからにして
443 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 13:00:03.19 ID:wz3i5qam0.net] >>422 俺は愛を信じないので、そのコードはちょっと怖いかな 範囲内という前提があるだろうけど、なんかはみでそう
444 名前:デフォルトの名無しさん [2021/08/25(水) 13:41:27.53 ID:6n+Di1sM0.net] >>435 ポインタとアドレス同じ意味で使ってます
445 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 13:46:43.33 ID:f+OmsRJCr.net] >>434 ちなC++触りだすとスコープ{}内で宣言したものはスコープ出たところで 勝手に始末されるちゅー理屈で実装することも増えると思う。 でかい一時配列とかスタックに置きたくもないしいちいちfreeとかdeleteのこと考えたくないから。 変な所でreturnとかしたらfree忘れちゃう。C言語だとその辺は厳格にしないといけない。 あと、ローカル変数のアドレスをあまり気安く使ってると、そのうち関数抜けて廃棄された アドレスを参照してしまうバグをだしちゃうかも。一度位は通る道かもね。
446 名前:デフォルトの名無しさん [2021/08/25(水) 19:45:37.21 ID:s4bO6YKI0.net] >>433 中國のロケットの落下騒ぎを思い出したわ
447 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 22:01:22.70 ID:ENQvEefU0.net] >>435 >>434 の&aはポインタだが
448 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 22:22:45.99 ID:hlr8Pa7o0.net] >>440 では、何をfreeしたのか、説明して
449 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 22:46:23.25 ID:SkXNk2uR0.net] ポインタはアドレスを格納する変数 &aはアドレスだが変数ではないのでポインタではない
450 名前:はちみつ餃子 mailto:sage [2021/08/25(水) 23:25:02.44 ID:/Q8zinJC0.net] >>442 いいえ。 ポインタ型の値がポインタです。 (See C99 6.2.5) C の用語ではメモリ (ストレージ) を占めるものがはオブジェクトで、それを型で意味付けしたものを値 (value) と言います。 実体としては同じですがレイヤによって呼び方が変わる場合があり、アドレスとポインタの違いも同様のものと考えられます。
451 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 23:28:23.41 ID:F2PvOiSs0.net] >>442 何年か前にも見た覚えのある言説だな。元は何だろう?
452 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 01:58:36.79 ID:aNUIA15f0.net] int *p; // ポインタ変数またはポインタ int a; &a; // アドレスまたはポインタ int b = &a; // bはアドレス値の入った整数 int *c = &a; // cはポインタ こういうこと? アドレスとポインタは明確に区別されてるの?
453 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 02:10:26.24 ID:/WHSCxQr0.net] int a; int *b; b = &a; &a = b;
454 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 02:21:59.91 ID:aNUIA15f0.net] >>446 なるほど?
455 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 02:37:50.30 ID:aNUIA15f0.net] >6.5.3.2 アドレス及び間接演算子 >単項&演算子は,そのオペランドのアドレスを返す。オペランドが型“?型”をもっている場合,結果は,型“?型へのポインタ”をもつ。 だからアドレスとポインタどっちでも良いんじゃないの
456 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 07:03:21.90 ID:H9rsGF960.net] &aはint*型のアドレス値(右辺値)で、変数ではないから代入は出来ない。 言葉の厳密な定義は知らんが、自分はポインタは型に紐付いたアドレスと理解してる。 組み込みなんかで uint32_t a = 0x4020000; ... *(int*)a = 1; とか書くけどa自体はただの整数値だしね。
457 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 09:15:02.06 ID:GExK9GsR0.net] >>448 int a=51; // 中山美穂の年齢 &a; // アドレス (int*)&a; // ポインタ *(int*)&a; // 中山美穂の年齢
458 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 09:25:24.33 ID:IpfDe45b0.net] アドレスも年齢も表現の対象 ポインタとintが型の名前
459 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 09:26:46.39 ID:IpfDe45b0.net] ageMipoとioDirectionがアプリケーションハンガリアン iMipoとpDirectionがシステムハンガリアン
460 名前:デフォルトの名無しさん [2021/08/26(木) 14:51:44.03 ID:BSY6c8/C0.net] >>441 みればわかりますよね?
461 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 16:05:40.12 ID:oVdr9HnU0.net] 言語仕様の文面の上ではアドレスとポインタの区別ははっきりしないので同一視してもかまわないとは思う。 少なくともポインタという用語がポインタ型の変数を指すという主張には賛成できないというだけ。 ただ、言語仕様の範囲内ではそれでいいんだけども言語仕様の範囲外というか実装上の理屈では区別している場合がある。 言語仕様上はポインタの比較は同一の配列 (または集成体オブジェクト) 内の要素を比較した場合や ヌルポインタとの比較についてしか定義されておらず、それ以外は未定義であると明記 (C99 6.5.8 参照) されていて 関連のない場所のポインタの比較であることが静的に把握できるときは定数に置き換える最適化が適用されることもあるんで アドレスを比較した通りの結果になるとは限らない。 https://wandbox.org/permlink/SqW5wzZM3fD912Nh そんなわけでポインタが素朴なアドレス (実体が整数値) だと思っていると思わぬ結果を生むことも有る。
462 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 16:26:17.74 ID:IpfDe45b0.net] 気持ちだけは、俺も昔そう思いたかったことがあるけど JIS X3010ではそうなっていないので、その気持ちはきっぱり捨てた
463 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 16:56:32.08 ID:GExK9GsR0.net] int a; のときに &a+1 とかやると sizeof(int) 進むのね! マジかよ知らなかった! じゃあこの &a はほぼポインタだと思っていいのかな? いいの?
464 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 17:01:04.55 ID:IpfDe45b0.net] 「ほぼ」じゃなく明白にポインタ
465 名前:はちみつ餃子 mailto:sage [2021/08/26(木) 17:09:18.58 ID:oVdr9HnU0.net] >>456 int a; と宣言されているとき &a の型は int* で、これを「int へのポインタ」という。 定義上ポインタとされているものに合致する。
466 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 18:57:41.72 ID:B7a9vIltM.net] aはint型の変数 &aは変数aをアドレス演算子&で評価した値 得られた値の型はintへのポインタ型int*
467 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 19:23:18.52 ID:2RMrl6dxr.net] >>456 例から少し外れるけど*(&a[0])に対して*(&a[0]+1)がおかしな場所指すと嫌だしな。
468 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 19:47:54.06 ID:aNUIA15f0.net] ポインタ型の変数→ポインタ、ポインタ変数 ポインタ型の値→ポインタ、アドレス アドレス演算子の結果→ポインタ、アドレス こういうことか
469 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 22:07:08.65 ID:cHqKnQ440.net] そして配列 int a[5] から a は何者? 引数に渡すとどーなる? という深淵な所へ
470 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 07:17:43.92 ID:5AM8fV7q0.net] >>459 &aはアドレス演算子と左辺値からなる式 式が生じる結果には値と型がある
471 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 08:24:46.38 ID:TRiQmtYg0.net] > int b = &a; ポインタ型の値を整数型の値に暗黙に変換して代入
472 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 09:31:13.97 ID:sfbhubJqr.net] >>464 gccでやったら注意された。g++でやったらガチギレされた。
473 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 09:39:50.45 ID:02SXv6gRK.net] >>465 g++なら int &b = a; でヨシ(良くない
474 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 09:43:34.61 ID:TRiQmtYg0.net] ポインタを整数値として変換した際、その値が int の範囲内に収まるかどうかは環境でまちまちやでねぇ
475 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 09:54:11.87 ID:5AM8fV7q0.net] ここはCスレ C++の参照はスレ違い
476 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 10:16:24.88 ID:02SXv6gRK.net] >>467 厳密にはintptr_tだけど、大抵intで足りるでそ? コンパクトモデル?知りませんなぁ >>468 すまん、茶々でした
477 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 10:21:47.24 ID:TRiQmtYg0.net] わかってないのに短絡で int は危ないけど LP64 やら LLP64 やら ILP64 やら 自分のがどうなってるかわかっててやるか、ポータビリティを鑑みて気を使った書き方するか
478 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 10:44:46.26 ID:5AM8fV7q0.net] ポインタのビット列を格納しきれる整数型が必ず存在する保証って箇条どこだっけ
479 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 11:00:51.55 ID:nK81wxcE0.net] >>469 いまや大抵の環境でintじゃ足りないだろ。大丈夫か?
480 名前:はちみつ餃子 mailto:sage [2021/08/27(金) 11:13:41.38 ID:i+fGpSJz0.net] >>471 6.3.2.3 では「結果は何らかの整数型の値の範囲に含まれているとは限らない」とあるし、 7.18.1.4 では intptr_t は省略可能であるともあるので保証はないと解釈すべきだと思う。
481 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 11:49:10.69 ID:5AM8fV7q0.net] >>473 なるほど これで (int)&a はダメなんてドヤってるやつは根拠を失ったなw
482 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 12:26:48.67 ID:nK81wxcE0.net] >>474 馬鹿なの?主要pfのintサイズも知らないのかよ
483 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 12:55:50.72 ID:5AM8fV7q0.net] 日本語でおk
484 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 14:37:29.53 ID:nK81wxcE0.net] うわ基地外に触っちまった
485 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 15:11:03.04 ID:28SvbL190.net] 友達いて良かったじゃないか
486 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 18:08:24.28 ID:5AM8fV7q0.net] よしてくれ 直接的な罵倒語で話す次元のやつと一緒にすんな
487 名前:デフォルトの名無しさん [2021/08/27(金) 19:45:46.03 ID:dNdDj0y10.net] >>479 ○すぞ
488 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 22:47:56.20 ID:3kbeL8sr0.net] 愛すぞ
489 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 23:16:53.36 ID:fvnuyojga.net] 推すぞ
490 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 23:51:09.87 ID:5LgeY8Yf0.net] スッゾオラー!
491 名前:デフォルトの名無しさん [2021/08/28(土) 00:56:23.65 ID:TAUITiELM.net] >>479 諭すぞ
492 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 01:07:55.46 ID:ArBPUbYg0.net] 宿題のことも思い出してやって
493 名前:デフォルトの名無しさん [2021/08/28(土) 02:24:48.25 ID:Kasf1Z4n0.net] >>358 レターは文字の集合。キャラクターとしたのは文字として認識していない記号等を含めたため。
494 名前:デフォルトの名無しさん [2021/08/28(土) 14:36:23.66 ID:0ROz2KLh0.net] >>486 なるほど
495 名前:デフォルトの名無しさん [2021/08/28(土) 19:25:44.91 ID:Kasf1Z4n0.net] >>487 制御文字を含めたのも理由かな
496 名前:デフォルトの名無しさん [2021/08/28(土) 19:26:13.75 ID:0ROz2KLh0.net] >>488 なるほど
497 名前:デフォルトの名無しさん [2021/08/28(土) 19:38:40.56 ID:Kasf1Z4n0.net] 文字のことをキャラクターと呼び始めたのはC言語じゃねえよ。 13年前にできたCOBOLですらキャラクターと呼んでんだぜ?
498 名前:デフォルトの名無しさん [2021/08/28(土) 19:51:11.77 ID:foB6MXRR0.net] 俺に聞けって言われてもな なに聞いたらいいかわからん 変に言語のマニアックな知識つけるより、アルゴリズム沢山知ってた方がいいと思うから言語や開発環境についてはvalgrindとかcmakeとか基本的なことを身に付いてればそれで十分だと思ってるわ だからすまんけど聞きたいことはない
499 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 19:58:54.24 ID:J7/U097I0.net] >>490 > 13年前にできたCOBOL ?
500 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 20:03:04.96 ID:ArBPUbYg0.net] C言語が1972年、COBOLが1959年 こういうことを言いたいのでは無いか?
501 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 20:08:53.74 ID:GTTRCLIA0.net] 子供の英会話聞いてるとletter aとか頻出するが、まだキャラクターは出てこないな。
502 名前:デフォルトの名無しさん [2021/08/28(土) 21:27:40.38 ID:Kasf1Z4n0.net] キャラクターの本来の意味は文字じゃないんだぜ? あたりまえなんだぜえ?
503 名前:デフォルトの名無しさん [2021/08/29(日) 01:18:09.40 ID:TPHdi4yb0.net] >言いたいのでは無いか? ここの「無い」に漢字を使うことに違和感感じるのは漏れだけ?
504 名前:デフォルトの名無しさん [2021/08/29(日) 01:49:09.89 ID:HDdtcjYC0.net] 「〇〇ではないのか。」の「ない」は形容詞。 ただし、これは形容詞を代用した言い回しなので、「無い」とはっきり形容とわかる使い方以外の場合は、日本語のおかしさが出てしまうので違和感がある。 そもそもわざわざ「ない」を「無い」と書く必要がない。戦後教育では漢字で書かなくてもわかることは仮名で書くと決めて、学校では漢字で書かないよう指導しているのに、漢字で書くやつはそれをすっかり忘れているだけだ。
505 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 01:52:08.61 ID:5p1Kcso30.net] 割とどうでもいい話だな 国語教育スレにでもうつってそこで続けてくれ
506 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 02:38:33.54 ID:7/doTy/i0.net] > 違和感感じる に違和感覚えるのは漏れだけ?
507 名前:デフォルトの名無しさん [2021/08/29(日) 02:48:49.23 ID:HDdtcjYC0.net] >>499 それもネチネチ30年以上も言われたが、単に字面が醜いという話で終わった。 覚えるも感じるも同じ意味で使っている。日本語は同じ漢字が続くときれいに見えないので変えたくなる。
508 名前:デフォルトの名無しさん [2021/08/29(日) 04:28:31.20 ID:Lt7wAmk40.net] 無いと言えばこの前ドイツ語の映画で Nein って言ってる時に日本語字幕に「無い」と出ていて一致していて笑った。
509 名前:デフォルトの名無しさん [2021/08/29(日) 05:28:11.66 ID:HDdtcjYC0.net] >>501 否定の言葉の発音がNで始まるのは人類共通
510 名前:デフォルトの名無しさん [2021/08/29(日) 05:30:35.87 ID:HDdtcjYC0.net] 人類が言葉を話す前の拒否を表す叫びが言葉になったのだろう。
511 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 08:16:38.59 ID:0FIWs/PL0.net] いやだ! やめろ! はNじゃないけど
512 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 08:19:11.41 ID:z+CvjRY2a.net] スモモモモモモモモ
513 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 08:43:55.40 ID:kXE2QuW0K.net] >>501 「無いん」ならもっと良かったw >>502 韓国語だと、YESがネーでNOがアーニョ
514 名前:デフォルトの名無しさん [2021/08/29(日) 08:46:40.86 ID:XBz6dM210.net] 離散データを連続データのように見せかけるフィルターを作りたい。 アルゴリズム名を教えてください。
515 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 08:51:04.40 ID:s3BI9dN30.net] 不是 ↑ Nで始まるどころか含まれてもいない
516 名前:デフォルトの名無しさん [2021/08/29(日) 09:56:38.96 ID:Qq6uUubw0.net] _countof を使うべきですか? https://docs.microsoft.com/ja-jp/cpp/c-runtime-library/reference/countof-macro?view=msvc-160 もっと良い計数方法ありますか?
517 名前:デフォルトの名無しさん [2021/08/29(日) 10:01:34.24 ID:Qq6uUubw0.net] >>502 フランス語には何故 pas があるの?
518 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 10:14:57.45 ID:LcGcn6bDF.net] >>509 https://marycore.jp/prog/c-lang/countof-array-and-sentinel-value/
519 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 16:11:09.82 ID:bszwbM+aH.net] >>510 https://dictionary.sanseido-publ.co.jp/column/ghf23
520 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 16:24:27.16 ID:Gww7yuPw0.net] >>510 neの発音が小さくて聞き取れないから付けることになった
521 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 17:57:42.29 ID:Lt7wAmk40.net] nulぽ
522 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 18:16:18.76 ID:jyQ+I+xW0.net] ( ・∀・) | | ガッ と ) | | Y /ノ 人 / ) < >__Λ∩ _/し' //. V`Д´)/ ←>>514 (_フ彡 /
523 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 18:44:57.73 ID:5p1Kcso30.net] 日本語だとにゃー、英語だとmew
524 名前:507 mailto:sage [2021/08/29(日) 19:19:21.76 ID:XBz6dM210.net] 投稿するスレッドを間違えてしまったかもしれません。>>507 それ以後、いろいろ調べつづけましたが、 どうやら内挿法とか補間法とか呼ばれていることが分かりました。 そのためのアルゴリズムを探してみます。 ありがとうございました。
525 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 19:26:53.70 ID:5p1Kcso30.net] 宿題スレやお題スレなら、反応があるかも知れん
526 名前:507 mailto:sage [2021/08/29(日) 19:40:59.03 ID:XBz6dM210.net] 離散的なデータのプロットから滑らかな曲線を得たいのですが、 ベジェ曲線を使う必要があるため、それも計算する必要があります。 ではこの辺でさようなら。
527 名前:デフォルトの名無しさん [2021/08/30(月) 14:56:32.12 ID:a7szkEqkF.net] FFT
528 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 17:40:48.45 ID:7tjRHlOya.net] Final Fantasy XII
529 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 22:24:16.28 ID:u8tdK0uP0.net] 与えられた離散的な点を必ず通る曲線なのか適度に近いとろこを通す曲線なのか
530 名前:デフォルトの名無しさん mailto:sage [2021/08/31(火) 20:16:31.77 ID:5EZjygd6a.net] Fire Fox TV
531 名前:507 mailto:sage [2021/09/01(水) 07:07:18.21 ID:idZ7WXfL0.net] >>522 必ず通るようにしたいです。最小二乗法のようなものじゃないです。
532 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 09:37:56.74 ID:BXH5CjID0.net] スプライン補間 https://github.com/okumuralab/algo-c/blob/master/src/spline.c
533 名前:507 mailto:sage [2021/09/02(木) 18:15:48.70 ID:E4GAaWam0.net] >>525 サンキュー、サー!
534 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 14:53:10.23 ID:H4dj0oy10.net] 代入時など左辺に&をつけない理由って、元々左辺の変数はその変数のアドレスを示しているんですか?
535 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 17:29:15.71 ID:fnRem4gD0.net] 左辺にアドレス値を書いても、そのアドレスに格納してくれるわけではない
536 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 19:49:04.18 ID:UoYK8G+w0.net] 変数は(多くの場合)メモリ上に置かれる a=bの式をコンパイラは「bのアドレスのメモリにある値をaのアドレスのメモリにコピーする」と解釈する でもそれをソースコード上で&a=&bと書かせてもお得なことはないよね 言語上では「a, bは(抽象化された)変数」で、その変数への代入は「a=b」でいいよね
537 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 20:30:31.76 ID:IpYcp5mx0.net] >>527 C++だと参照型が近いけど、あれはあれで窮屈ながらも、便利っちゃ便利かもな。 でもポインタ幅きかせてるCであえて拡張したい記法かといえば微妙よね。 void func(char &c) { c *= 2; } みたいなのね。
538 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 22:33:45.82 ID:H4dj0oy10.net] 皆さんありがとう scanfで変数に&を付ける理由はいろんなとこに書いてあるんだけど、 それならなんで普通の代入の時に&を付けないんだ? って疑問に思ってました
539 名前:デフォルトの名無しさん mailto:sage [2021/09/11(土) 23:06:30.86 ID:LC2TQyRsa.net] void f(int *p) { *p = 1; } …. int i; i = 0; printf("%d\n"); // 0 f(&i); printf("%d\n"); // 1
540 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 00:21:46.80 ID:F+ZN0nvA0.net] scanfに限らず、関数に変数を渡すと、その関数は、 渡された変数の値を受け取れるだけで、 変数の値の書き換えは出来ません 書き換えて欲しいときは、書き換える場所を関数に教えます 普通の代入の時は、その変数を直接操作できるので あえてアドレス表記する必要が無いです
541 名前:デフォルトの名無しさん [2021/09/12(日) 02:58:55.75 ID:zHKafq1A0.net] memcpy(&a, &b, sizeof(a)); なんてことを、昔々構造体の変数の代入が出来ないCのサブセットのコンパイラでやったことがあったような気がするが、もはや記憶も曖昧になるぐらいの大昔。時の経つのは早いものぢゃ。
542 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 10:12:20.10 ID:BvG4P5vd0.net] サブセットつーか、そもそもK&R Cは構造体代入できないね
543 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 14:36:50.48 ID:Yq9DVfRn0.net] >>531 int c;に対して&c = 100という記述はだめなのって疑問かな? 代入演算子は左辺に変数を置いて値を書き込む特別な演算子だけど、 それをその変数の型を含むアドレス値を左辺に置いてそのアドレスに 書き込むという定義とするわけだ。 定義自体がややこしいし、 アドレス全面押しにする理由がない(むしろ遮蔽したい)、 頻繁に用いる演算子ゆえタイプ数が増えたりするのは好まない、 などメリットがないのだろうね。 =と==を=にまとめてしまって、代入時は&付けるという方向は あるかも知れませんが、コード中代入のが多いでしょうから、 代入をシンプルにしたのではと。
544 名前:デフォルトの名無しさん mailto:sage [2021/09/12(日) 14:42:45.51 ID:BvG4P5vd0.net] FORTRANの代入を真似ただけだろ
545 名前:デフォルトの名無しさん [2021/09/13(月) 01:06:14.49 ID:MTzB4xqO0.net] >>535 あ。そうだったっけ。忘れてた。
546 名前:デフォルトの名無しさん [2021/09/13(月) 01:13:16.73 ID:MTzB4xqO0.net] int c; *(&c) = 1; ていうのなら出来る。 コンパイラは何の警告も出さずにコンパイルするかも知れないが、結局 c = 1; をやっているのと同じコードが出力されると思う。
547 名前:はちみつ餃子 mailto:sage [2021/09/13(月) 01:28:42.84 ID:b2LY5t5P0.net] 代入演算子の左辺に現れることが出来るのは変更可能な左辺値 (modifiable lvalue) で、 >>539 の例はその条件を満たす。 >>527 たとえば int c = 1; a = 2; というのは C では有効なコードだけれど、変数を評価すると格納されている値になるというルールを そのまま適用すると 1 = 2; になってしまっておかしい、左辺は「場所」でないといけないという感覚はとても良い感性なのだけれど、 左辺がアドレスということにしたとしてもアドレスはポインタ型の「値」でしかないのでそれはそれで なんだか変なことになる。 結局は特別な規則を導入必要はあって、 C においてはそれが lvalue という概念というわけ。
548 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 07:34:08.89 ID:wBWjVwq/M.net] わざとやってるのか知らんけどコードくらいまともに書けよ
549 名前:デフォルトの名無しさん [2021/09/13(月) 09:12:44.29 ID:BLplThEad.net] >>531 C++は面倒なことになったな #include <iostream> using namespace std; int main(int ac, char **av) { int a = 3; int &b = a; cout << a << b << endl; return 0; }
550 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 09:47:47.66 ID:B8QV0Pmm0.net] ここはCスレ
551 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 13:35:49.31 ID:lh01OzgJa.net] >>532 誤>printf("%d\n"); // 0 正>printf("%d\n", i); // 0 いまさらですが、第2引数が欠落していました 失礼しました
552 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 16:53:30.27 ID:XjglcLZY0.net] 副作用をポインタを経由して呼び出し元に伝播する ポインタ渡し 引数変数への代入がそのまま呼び出し元の変数に反映される 参照渡し(C言語には無い)
553 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 16:57:08.25 ID:XjglcLZY0.net] 関数の壁(呼び出し元と 呼び出された関数内の記述)を超えるときに & を使って壁を越える工夫をする 同じコード内の変数への代入ならば不要
554 名前:デフォルトの名無しさん mailto:sage [2021/09/13(月) 17:04:06.19 ID:JA2CmiO7M.net] &使わないと釣り銭をもらえない
555 名前:はちみつ餃子 mailto:sage [2021/09/13(月) 17:52:01.78 ID:b2LY5t5P0.net] C の仕様では引数は一貫して値渡しで、その値の型がポインタ型のこともあるという理屈になってる。 (仕様の理屈はともかくポインタの活用の仕方としてポインタ渡しと呼ぶことを否定するわけではない。)
556 名前:デフォルトの名無しさん [2021/09/13(月) 17:58:15.13 ID:+BvkCNRX0.net] C言語は昔からアドレス渡しと言っているけどな。
557 名前:デフォルトの名無しさん [2021/09/13(月) 18:00:26.00 ID:+BvkCNRX0.net] ポインタ渡しだとポインタ変数限定みたいに捉えてしまいそうだなw
558 名前:デフォルトの名無しさん [2021/09/13(月) 20:02:35.33 ID:LTFifztG0.net] 「アドレス渡し」の方がアセンブラに近い ただしポインタ型のサイズで加減するアドレッシング機能付き 「ポインタ渡し」はPASCAL由来やろ あと配列のサイズも一緒に渡す機能は付いてたらよかったのになーともたまに思う
559 名前:デフォルトの名無しさん [2021/09/13(月) 21:18:13.15 ID:+BvkCNRX0.net] OSを作るために作られたのに
560 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 01:01:51.69 ID:cEQHQvCwa.net] ポインタには型があるから、オブジェクトの大きさも、structへのポインタなら、各メンバへのオフセットや大きさやら…
561 名前:デフォルトの名無しさん [2021/09/14(火) 06:05:05.77 ID:48wIBTET0.net] >>553 型はあってないようなもの
562 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 07:07:50.62 ID:TY9EyEr50.net] カーニハンは辛辣なPascal批判の論文書いてるね
563 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 07:08:21.19 ID:TY9EyEr50.net] これ www.lysator.liu.se/c/bwk-on-pascal.html
564 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 07:16:50.67 ID:0vgLnSzd0.net] >>556 論文って開いてみたら、タイトルクソワロタ。
565 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 07:26:42.56 ID:TY9EyEr50.net] よかったね
566 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 09:36:35.35 ID:Hja/bGISM.net] 卒論のテーマはこれで決まりだな
567 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 10:50:21.10 ID:5Y/jembp0.net] アドレス私って、 b = a; c = a; とかやってて、a=0にすると、bもcも0になるってこと?
568 名前:デフォルトの名無しさん mailto:sage [2021/09/14(火) 11:31:36.84 ID:TY9EyEr50.net] それは参照だ C++のな Cでやるなら #define b a #define c a
569 名前:デフォルトの名無しさん [2021/09/14(火) 13:58:37.43 ID:eQ96wDaCF.net] >>557 Matz の論文は I hate C++ だぞω
570 名前:デフォルトの名無しさん [2021/09/14(火) 15:48:56.00 ID:48wIBTET0.net] >>556 性能重視の部分は考え方の違いだな。UNIXを作るにあたって不要な部分を取り除いた結果がC。
571 名前:デフォルトの名無しさん [2021/09/14(火) 15:51:55.83 ID:48wIBTET0.net] >>560 メモリのアドレスを直接、渡すから、呼び出し元の領域をそういうふうに直接、触ることになる。
572 名前:ハノン mailto:sage [2021/09/14(火) 17:38:29.69 .net] 私は pascal は好きなんですけど‥‥
573 名前:デフォルトの名無しさん [2021/09/14(火) 23:42:22.10 ID:/drSXHoF0.net] Delphiは昔使ってたな。拡張しまくったPascalというかなんというか。
574 名前:デフォルトの名無しさん [2021/09/15(水) 00:41:20.00 ID:h1CB84tY0.net] アセンブラのようなことができた方がいいというのが出発点だからなあ
575 名前:はちみつ餃子 mailto:sage [2021/09/15(水) 01:36:14.40 ID:/JHaU2Oz0.net] 今でこそ C は低レイヤ寄りと見做されるけど「高級言語で OS を書きたい」というモチベーションから作られている。 おそらく当時の感覚からすればむしろアセンブラ的な世界からの脱却だったんじゃないかな。 歴史的経緯はある程度は記録を辿れるけど時代を背景にした「感覚」というのは現代人からはなかなか掴みづらくてあくまでも想像だけど。
576 名前:デフォルトの名無しさん [2021/09/15(水) 05:11:14.87 ID:h1CB84tY0.net] おおざっぱに言うとアセンブラの見た目を変更したのがC
577 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 07:08:27.66 ID:+suq2kti0.net] アセンブラの無駄のなさと、高級言語の移植性の、両取りを狙う試みだね
578 名前:ハノン mailto:sage [2021/09/15(水) 14:05:30.69 .net] それはどうでしょうか‥ turbo c の asm 文抜きのいきなりインラインはよく使っていましたが、そんな turbo c でもキャリーフラグを直接使えなかった気がします、そんな記憶がふつふつと
579 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 14:16:20.72 ID:+suq2kti0.net] ローテート命令はキャリーありの9bit循環とキャリーなしの8bit循環があるから そこまで言語では面倒見きれなかったってだけ ステータスレジスタを陽に記述すると移植性なくなるが そんなことしなくても当時のUNIXの95%を記述できたしな
580 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 15:25:36.81 ID:23VOu0KJM.net] #ifdef flagresister取得可能(ならば) 専用式 #elseif ~
581 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 15:31:31.69 ID:23VOu0KJM.net] みたいな専用式を言語仕様に含めたやり方も出来たかもしれん 当時の演算能力内でwrite once,RA かつアカデミック感目指してomit しちゃったんかな
582 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 16:26:01.26 ID:1Mo2XUv5M.net] Keep the language small and simple.
583 名前:デフォルトの名無しさん mailto:sage [2021/09/15(水) 17:05:05.53 ID:dV7Qc7xZM.net] >>571 そもそも世の中にはキャリーフラグなんてないプロセッサもあるから 俺の知る限りキャリーフラグを扱える高級言語はTL/1しかない
584 名前:ハノン mailto:sage [2021/09/15(水) 17:16:31.92 .net] >>576 そうなんですね、なんちゃって多倍長をやっていて、ここでローテート&キャリーが使えればなぁぁぁ、とつくづく
585 名前:はちみつ餃子 mailto:sage [2021/09/15(水) 17:52:22.20 ID:/JHaU2Oz0.net] >>576-577 TL/1 はあくまでも演算子がキャリー/ボロー付き演算の命令にそのままコンパイルされるってだけなんで、 配列アクセスなどのときに勝手にアドレス計算でフラグが設定されてしまうといった意図しない影響があって あまり使い勝手は良くない。 あまり詳しくないけど LLVM はキャリーフラグを扱う方法があって かつレキシカルな伝播として記述できたはずなんで、 たぶん LLVM IR でならなんとか記述できるんじゃないかな。 LLVM IR を高級といえるかどうかはたいへん微妙な話だが……。
586 名前:デフォルトの名無しさん [2021/09/17(金) 10:00:39.91 ID:oDWWsmOUa.net] >576 https://www.zukeran.org/shin/d/2015/04/10/kumajiri-compiler/
587 名前:デフォルトの名無しさん mailto:sage [2021/09/17(金) 10:32:07.44 ID:+c0nDJY5M.net] >>578 例えばこんなを高級言語って言う? define i32 @main(i32 %argc, i8** %argv) #0 { %1 = alloca i32, align 4 %2 = alloca i32, align 4 %3 = alloca i8**, align 8 store i32 0, i32* %1 store i32 %argc, i32* %2, align 4 store i8** %argv, i8*** %3, align 8 %4 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([15 x i8]* @.str, i32 0, i32 0)) ret i32 2 } >>579 ごめん、意味分からん 単なるVTL (Very Tiny Language) の話にしか見えない
588 名前:デフォルトの名無しさん mailto:sage [2021/09/17(金) 14:21:22.00 ID:g2c8KLlcM.net] >>580 rustよりは高級に見えるな
589 名前:はちみつ餃子 mailto:sage [2021/09/17(金) 14:42:13.05 ID:hv2MZm4l0.net] >>580 そこから様々なターゲットの機械語を生成しうるという意味では ハードウェアにベッタリと紐付いているわけではなくて LLVM IR を低水準言語と呼ぶのはなんか違うなって思うけど、 だからといって日常的に人間が直接書くことを前提においてるわけでもない という点では高級とも言いにくいかな……という意味で「微妙」と評した。
590 名前:デフォルトの名無しさん [2021/09/17(金) 16:26:05.73 ID:J/w/zJeW0.net] シリコンバレーで働いて気付いた「技術力向上」だけに固執するエンジニアのダメさ【Sansan CTO 藤倉成太】 https://type.jp/et/feature/9402/ DeNA×メルカリ×サイバーエージェント人事担当が面接で必ずする質問とは?「技術力だけアピールしても内定は出ない」 https://type.jp/et/feature/10236/ DeNA・メルカリ・CA人事が証言! スキルはあるのに“面接で落ちる”エンジニアに足りないもの https://type.jp/et/feature/10402/
591 名前:デフォルトの名無しさん mailto:sage [2021/09/17(金) 20:48:41.30 ID:M17TGSOPM.net] >>582 > そこから様々なターゲットの機械語を生成しうるという意味では > ハードウェアにベッタリと紐付いているわけではなくて Javaのバイトコードを高級言語って言うの?
592 名前:はちみつ餃子 mailto:sage [2021/09/17(金) 20:59:27.14 ID:hv2MZm4l0.net] >>584 JVM のバイトコードは言語ではないと思うから高級言語とは言わないけど、低水準でもないでしょ。
593 名前:デフォルトの名無しさん mailto:sage [2021/09/17(金) 21:50:22.49 ID:/PAMmlQoM.net] 低水準の話はしてないから > 高級言語とは言わない でFAやね
594 名前:はちみつ餃子 mailto:sage [2021/09/17(金) 22:00:48.37 ID:hv2MZm4l0.net] そうか。
595 名前:デフォルトの名無しさん mailto:sage [2021/09/17(金) 22:31:46.08 ID:C7S/bCm80.net] C言語だってコンパイルすればバイナリ
596 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 04:33:04.80 ID:iNoegsL20.net] 倍也
597 名前:デフォルトの名無しさん [2021/09/18(土) 08:52:55.38 ID:bA/qQPAiF.net] バイトコードをいい加減に扱い過ぎ
598 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 09:19:07.92 ID:1ehO0L4U0.net] >>580 特定CPUのアーキテクチャに言及してないな
599 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 18:56:12.62 ID:RjbxwxKL0.net] 宣言と定義についてなんですが int a; // 宣言 int b = 1; // 定義 宣言と定義ではどちらもメモリ(スタック)は確保されているという理解であってますか?
600 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 19:10:22.14 ID:bsPUoCV00.net] はい
601 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 19:28:32.87 ID:I+biH5jK0.net] はいじゃないが
602 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 19:42:16.97 ID:jTQBMDyZ0.net] >>592 変数宣言のうちメモリを確保するのもが定義。 その2つは両方とも宣言であり定義でもある。
603 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 19:43:03.59 ID:XFa1Ksn/0.net] コンパイラと最適化オプション次第
604 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 19:48:26.79 ID:RjbxwxKL0.net] >>595 定義は宣言の下位概念ってことですか?
605 名前:ハノン mailto:sage [2021/09/18(土) 19:55:00.96 ID:/DXMasS60.net] >>592 いいえ 定義では格納場所を確保しますが、宣言では存在のみ指示しても格納場所は確保されません、私は気が向けば宣言には extern をつけるようにしないわけではない、という感じかな なおその例は少し変で、代入を伴えば定義というわけでも、代入がなければ宣言というわけでもない、というのが個人的感覚です、詳しい人の解説を希望します 例外は、リンカが頑張って格納場所を作ってくれる例の何とかとかいうキーワードがあったのですがおもいだせません、今日モデルナを射った後転んで頭を打ってしまった、結果、いっそう馬鹿になってしまいました‥‥
606 名前:ハノン mailto:sage [2021/09/18(土) 20:04:32.98 ID:/DXMasS60.net] >>592 宣言か定義か、という問題は、単一モジュールでプログラムを構成している段階ではあまり気にしなくてもいいと思います 複数の c ソースを分割コンパイルし、最後に得られたオブジェクトをライブラリともあわせて結合する、という作法に進めば自然に理解できるようになりますのでご心配なさらなくともいいでしょう 私も昔は「extern は要らない子!」とか馬鹿をいっていましたが、これは撤回します、extern がどうしても必要な場面に遭遇したのです まあそういうわけで一度にいっぺんに賢くなるのは私には難しいことのようです
607 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 20:41:39.21 ID:RjbxwxKL0.net] >>598 たとえば int a; printf("%d\n", a); なんですが、この場合のaは定義されているということですか? 代入式があるのが定義だと思ってました 宣言と定義の文脈はコードによって変わるということなんですかね
608 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 21:25:06.90 ID:JTl7f6jwM.net] 簡単に言えば宣言はその名前をコンパイラに伝えるもの 定義はその実体を確保するためのもの >>592 の例は両方共に宣言であり定義でもある C言語では定義のみすると言うのはできないと思う 宣言のみはexternとか前方参照のためのstruct xxx;とかで使われる
609 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 21:44:48.00 ID:YluaRA/40.net] >>596 屁理屈こねんなやボケが
610 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 22:06:39.93 ID:jTQBMDyZ0.net] ..>>597 「下位概念」という言葉をあてるのは不自然な気がするけど、C言語において定義は宣言のサブセットだよ。 >>600 その2行がコンパイルできる文脈に置かれているなら、 a は定義されている。 (初期化されていない自動変数になるので後続の printf での読み取りは未定義動作になるけど。) 「宣言と定義の文脈はコードによって変わる」は意味が分からないので否定も肯定もできない。 同じ int a; といった記述が宣言か定義か文脈によって変わる、ということならありえる。(構造体メンバの宣言とか。)
611 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 22:22:54.90 ID:RjbxwxKL0.net] >>601 >>603 メモリが確保されているかどうか?という点で定義か宣言か判断すればいいということですね printf()で参照している場合はaはメモリが確保されているのでaは定義されている状態 printf()で参照しない場合はaはただの宣言になると
612 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 22:32:01.92 ID:vqHZXwmna.net] >>604 レスの後半はいらないよ 参照されるか否かは関係ないよ int a; で定義は完結してるから
613 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 22:36:06.58 ID:/Dm63BCIM.net] >>604 > printf()で参照しない場合はaはただの宣言になると 違う、参照の有無に関わらず領域は確保される 最適化とか鼻から悪魔のコードだから確保を端折るとかはあるけどそれはまた別な話
614 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 22:53:55.61 ID:RjbxwxKL0.net] >>605 >>606 理解しました! int main(void) { int a; return 0; } ↑のaは定義されていてメモリが確保されている状態ってことですね また定義は宣言のサブセットだから、この状態を宣言と呼んでもいいということですね
615 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 23:32:59.41 ID:vqHZXwmna.net] aは定義されている、でよいと思います ちなみに、自分は宣言とか定義とか「言葉」は意識しないです ただ、ここにオブジェクトが実在するのか、他のどこかにあるオブジェクトを使うのかは明確に意識しなければなりません int main(void) { int a; extern int x: return 0; } ここで xは、関数外のどこかで定義された int型のオブジェクを参照します、という宣言
616 名前:ハノン mailto:sage [2021/09/18(土) 23:37:35.98 ID:/DXMasS60.net] >>607 そうですね それに、そのコードは関数 int main(void) も宣言かつ定義していますね 関数の場合は、関数の中身が書いておれば宣言かつ定義、関数の呼び出され方だけしか書いていなければ宣言、とすぐにわかるので、キーワード extern は省かれる傾向にありますね 詳しい人に解説いただき私も感謝します
617 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 23:38:56.69 ID:bsPUoCV00.net] 質問 externを関数内で宣言したとき、有効範囲は次のどれになりますか? 1.宣言した関数のスコープ内で有効 2.宣言したソースの後続行で有効 3.宣言を書いたソースの全体で有効
618 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 23:43:44.98 ID:vqHZXwmna.net] A.1
619 名前:デフォルトの名無しさん mailto:sage [2021/09/18(土) 23:45:59.85 ID:vqHZXwmna.net] 通常の変数と同様に、ブロック {} で括られるかと
620 名前:はちみつ餃子 mailto:sage [2021/09/19(日) 00:58:34.79 ID:aMl1OG4b0.net] JISX3010:2003 の 6.7 から抜粋 > 宣言は、幾つかの識別子の解釈及び属性を指定する。 > 識別子の定義 (definition) とは、宣言のうち次のものをいう。 > ・オブジェクトに対しては、そのオブジェクトの記憶域を確保する宣言 > ・関数に対しては、関数本体を含む宣言 > ・列挙定数又は型定義名に対しては、その識別子の(唯一の)宣言
621 名前:デフォルトの名無しさん [2021/09/19(日) 12:56:33.95 ID:/yxUr6Cya.net] 関数の中とか{}ブロックの中とかで #include とか #define 出来れば良いのにと思うことはある (いや出来ることは出来るけど)
622 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 14:00:14.49 ID:k97hf5Wx0.net] >614 その辺は古い仕様の限界だから……
623 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 14:08:34.86 ID:dcXPbcRy0.net] >>614 便利だよね CSV埋め込みとか
624 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 15:49:36.39 ID:1EdICjsOK.net] >>610 >>611 2だったような 1の方が合理的だが
625 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 16:19:30.05 ID:gqeRua+ma.net] // foo.c #include <stdio.h> int f(void) { extern int glob: return glob + 1; } int main() { printf("%d\n", f()); // 124(次行がないとき) printf("%d\n", glob); // エラー return 0: } // bar.c int glob = 123; でした 勘違いだったらごめんなさい
626 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 16:24:53.88 ID:gqeRua+ma.net] int f(void) { __{ ____extern int glob: __} __return glob + 1; // glob undeclared }
627 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 18:52:30.28 ID:AMdE/BCe0.net] extern の変数をスコープ内に書きたい場面ってあまり思いつかない。 ヘッダファイルに書くのサボりたい時くらいしかそんな書き方しないな〜
628 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 19:48:44.86 ID:gqeRua+ma.net] >>620 >>608 だけど、(関数スコープ内の)宣言のうまい例を思いつきませんでした 自分でもこのような記述はしたことがないです >>614 ブロック内でも、#includeや#defineは使えるには使えるのでは 使ったことはないけど ただし、#defineは同じスコープ内で #undefで閉じておかべきだけど リーダブルコードという本で、define〜undefの例を見たような
629 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 19:52:36.17 ID:tWZRSjBtM.net] >>620 俺はそのスコープでしか使わないなら普通にスコープ内に書くけど?
630 名前:621 mailto:sage [2021/09/19(日) 20:02:10.63 ID:gqeRua+ma.net] >>614 「できるにはできるけど」と、ちゃんと書いてありますね 大変失礼しました、ごめんなさい!!
631 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 20:34:55.88 ID:qdWHvjUr0.net] ひょっとして、#define も関数内で記述すると そのスコープ内で有効になるのかな?
632 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 20:40:54.81 ID:AMdE/BCe0.net] >>624 流石にそれはない。
633 名前:621 mailto:sage [2021/09/19(日) 20:42:46.70 ID:gqeRua+ma.net] #includeとか #defineとか、プリプロセッサが処理する時点では、スコープとか、C言語の文法すら関知しないかも トークンの 識別くらいで
634 名前:デフォルトの名無しさん mailto:sage [2021/09/19(日) 21:23:46.86 ID:AMdE/BCe0.net] こんな #define 見たくないけど・・・ --------------------------------------- void func() { #define A 100 } int main() { int i = A; } --------------------------------------- gcc -E prepro.c --------------------------------------- # 1 "prepro.c" # 1 "<built-in>" 1 # 1 "<built-in>" 3 # 384 "<built-in>" 3 # 1 "<command line>" 1 # 1 "<built-in>" 2 # 1 "prepro.c" 2 void func() { } int main() { int i = 100; } ---------------------------------------
635 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 10:14:32.45 ID:rmuhdvcF0.net] Cにnamespaceが無いのが逝けない娘
636 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 15:37:40.46 ID:ql5RJosy0.net] いらねぇだろネームスペースなんか
637 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 16:28:35.49 ID:WSYscKBB0.net] namespaceが欲しいのにC++を使わないのが逝けない娘 太古の昔、Cにクラスが無いのが逝けない娘だと思った人とは行動力が違いすぎるな
638 名前:デフォルトの名無しさん [2021/09/20(月) 17:39:30.67 ID:WNFThOB/0.net] CはCのままで良い。他の言語で実現出来ているんだし。その機能を使いたいならそちらの言語を使えば良い。 それでは何かが足りないというのなら新言語作れば良い。 自分では作る技術力がなくても仕様を考えてネットで公開しておけばやがて暇と技術力のある誰かが作ってくれるだろう。
639 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 18:06:11.00 ID:xT0MCUkn0.net] >622 型を間違えてもエラーにならないから全くお勧めしない
640 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 19:39:36.63 ID:QS4OJe2QM.net] >>632 はあ? 何言ってんの? 頭大丈夫?
641 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 19:50:34.34 ID:vvw4JppL0.net] ミスする可能性が上がるから各コードでexternせずに必要ならヘッダに書いてもらえってことじゃね? そもそもexternなんてextern "C"以外滅多に使わないけどな
642 名前:デフォルトの名無しさん mailto:sage [2021/09/20(月) 19:57:31.48 ID:LO5PkHvF0.net] >>633 前スレより 975 デフォルトの名無しさん (ワッチョイ b363-19dE) sage 2021/06/21(月) 23:06:35.04 ID:jHz8GYW10 // b.c int b[] = {123, 456}; // a.c #include <stdio.h> int a[] = {123, 456}; int main() { extern int *b; printf("val b\n"); printf("%d\n", *(b + 1)); // printf("val a\n"); // printf("%d\n", *(a + 1)); return 0; } こういう分割ソースをコンパイル、リンクして実行すると、何も表示無しで終了する デバッガー使って実行してみると、SEGVになってる
643 名前:ハノン mailto:sage [2021/09/20(月) 20:10:17.55 ID:+hQanlE40.net] >>634 >ミスする可能性が上がるから各コードでexternせずに必要ならヘッダに書いてもらえってことじゃね? そうそう、extern による宣言と定義とが食い違うとエラーがでますから、そのためのヘッダの分離ということですね >そもそもexternなんてextern "C"以外滅多に使わないけどな 関数の宣言は extern 省略可能ですし、ライブラリ側で共用のメモリを確保することは滅多にないです私は
644 名前:621 mailto:sage [2021/09/20(月) 23:40:17.11 ID:y5y6BCAna.net] >>635 これは関数のスコープに書かなくても(ファイルスコープでも)同じじゃない?
645 名前:621 mailto:sage [2021/09/21(火) 00:23:33.65 ID:7n0ZYlgRa.net] >>635 これってリンク時にエラーにする方法はないのかね…. あればとっくにやってるんだろうけど…
646 名前:デフォルトの名無しさん mailto:sage [2021/09/21(火) 00:26:56.39 ID:aEoN/PBD0.net] >>637 同じですね そもそもexternを明示的に書く必要がある状況って、 あるソースで定義されているグローバル変数を他のソースに公開して使えるようにするために、 ヘッダにextern int a;のように書いておいて、他のソースにはそれを#includeさせる (すると他のソースでは余計な領域が確保されない) のパターンが基本だと思っています だからそもそもブロックスコープでexternするのってなんで? 覗き魔? って思ってしまう
647 名前:デフォルトの名無しさん mailto:sage [2021/09/21(火) 03:22:03.74 ID:rkkhSUpi0.net] ブロックスコープ内でexternはK&R C時代の名残で今は完全に無意味
648 名前:デフォルトの名無しさん mailto:sage [2021/09/21(火) 03:23:48.34 ID:rkkhSUpi0.net] 関数原型でのexternは単項プラスみたいなもん staticじゃないよと強調する反対語
649 名前:ハノン mailto:sage [2021/09/21(火) 03:36:19.96 ID:9i80hc760.net] >>639 >ヘッダにextern int a;のように書いておいて、他のソースにはそれを#includeさせる 「他のソース」でないソースも、そのヘッダを #include しておけばダチェックにもなるし
650 名前:デフォルトの名無しさん mailto:sage [2021/09/21(火) 19:14:32.01 ID:8eqDWQ5I0.net] >>639 ヘッダに実体がある糞コードで でも直すなって言われて仕方なくexternすることはあった
651 名前:621 mailto:sage [2021/09/21(火) 22:41:16.78 ID:rS8f3YVDa.net] // b.c char a[] = { 0, 1 }; // a.c int main() { __extern int *a; __printf("%d\n", a[1]): __return 0; } 不勉強でした 上のコードは警告もなしにコンパイルが通りますね 実行すると segmentation fault ですが リンク時はデータ型はチェックされず、名前だけで参照を解決してるのですかね…… 古い仕様で、今さら変更はできないんでしょうね、チェックができたとしても
652 名前:デフォルトの名無しさん mailto:sage [2021/09/21(火) 22:46:25.12 ID:rkkhSUpi0.net] 型システムを持たずラベルの綴りのみを手がかりに参照解決するリンカを操るツールの1つだからねCは リンカにあれもこれもと機能を持たせるのはメインフレームのファイルシステムにあれもこれも持たせようとしたVSAMの再来だ インフラ的なものにアプリの都合を無闇に押しつけるべきではないことを歴史から学ぶべきだぞ
653 名前:はちみつ餃子 mailto:sage [2021/09/21(火) 23:19:06.05 ID:tYtQqya30.net] C には「プロトタイプ (関数原型) を持たない関数宣言」があって、 関数の型が曖昧なまま関数が存在することだけを宣言できる。 プロトタイプ (プロトタイプ宣言) がある場合にはその関数を呼出すにあたって実引数と仮引数の間では代入と同じ規則 で (可能な場合には) 暗黙の型変換が適用されるが、プロトタイプがない場合には 既定の実引数拡張 (可変長引数に実引数を渡すときと同じ規則) が適用されて実引数と仮引数の辻褄が あってないときは未定義という扱いになる。 更には C89 は暗黙の関数宣言という規則があって (C99 では廃止されている) 関数を呼出そうとした時点で関数が宣言されていない場合には実引数の型から一定の規則に基づいて 関数の型を推測し、関数が宣言されたかのように振る舞うことになっている。 なので関数宣言が存在しなくても二度以上の関数呼出しの型に矛盾があれば検出はされる。 もちろん関数定義の実体と辻褄があってなかったらそれは未定義だけど。 このあたりのクソみたいな規則は「C++ では採用しなかった仕様」として D&E でちょっと触れられてる。
654 名前:デフォルトの名無しさん mailto:sage [2021/09/21(火) 23:25:07.21 ID:rkkhSUpi0.net] > 実引数の型から一定の規則に基づいて
655 名前:関数の型を推測し func(1); ↓ int func(); func("string"); ↓ int func(); こうなるだけで推測なんて気の利いたことはしないよ [] [ここ壊れてます]
656 名前:621 mailto:sage [2021/09/21(火) 23:27:49.11 ID:rS8f3YVDa.net] プロトタイプ宣言は C++からの逆輸入だからな…. その昔の Cったら
657 名前:はちみつ餃子 mailto:sage [2021/09/21(火) 23:34:12.47 ID:tYtQqya30.net] >>647 あ、ほんまやな。 仕様上のルールは「extern int func(); が書かれていたものとみなす」というだけで、 具体的なチェックをどこまでするかは処理系次第 (たぶんあまり真面目にやってなかったと思うけど) だな。
658 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 05:28:22.60 ID:iWoXuoBc0.net] >>648 > プロトタイプ宣言は C++からの逆輸入 そうなの?
659 名前:デフォルトの名無しさん [2021/09/22(水) 14:25:23.40 ID:Te29kBsr0.net] どうだったっけなあ?
660 名前:はちみつ餃子 mailto:sage [2021/09/22(水) 14:32:16.52 ID:1hd+XsHu0.net] The C programming language (いわゆる K&R 第一版) の APPENDIX A 8.3 Declarators を見る限りでは 引数リストが空の形式しかないように見える。 関数であるということは宣言できるが型チェックはガバガバっぽい。 D&E の 2.6 静的タイプチェック の項では > C with Classes のシンタクスとルールはその後 ANSI C の規格にも採用されたが > C with Classes の最初の実装の時点ですでに完全な形をしていた。 という一文があるので C の型チェックは C++ (の前身である C with Classes) からの影響ということで間違いないと思う。
661 名前:デフォルトの名無しさん [2021/09/22(水) 14:42:52.46 ID:KzVGjGnLF.net] 初耳だわ はちみつは何歳?
662 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 15:34:35.81 ID:p7uTNZa70.net] 47歳くらいだと思う
663 名前:ハノン mailto:sage [2021/09/22(水) 17:51:09.10 ID:z5uxQYPx0.net] >>644 そのコード、仮に a.c で extern int *a; ではなくて extern char *a; であってもセグフォが出ると思います、試してませんけど‥‥ なにか二重に勘違いしてませんか?それとも私が二重に勘違いしているのか?
664 名前:はちみつ餃子 mailto:sage [2021/09/22(水) 18:02:31.76 ID:1hd+XsHu0.net] >>655 配列として定義したものをポインタとして宣言するのは間違いだな。
665 名前:はちみつ餃子 mailto:sage [2021/09/22(水) 18:04:06.47 ID:1hd+XsHu0.net] FAQ に書いてあったわ。 www.c-faq.com/aryptr/aryptr1.html
666 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 18:35:41.60 ID:Il91zgnyM.net] 47歳 研究部門に所属 趣味は手芸
667 名前:621 mailto:sage [2021/09/22(水) 19:31:52.27 ID:u8cZI69ma.net] >>655 ありがとうございます はい、char と char でもダメですね データ型がことなれば、リンケージできないのではと思い実験してみました 定義側でメモリに配置されているのは値で、extern宣言で参照する側が期待するのはポインタが配置されていることなのでうまくいきませんね(違うかな)
668 名前:621 mailto:sage [2021/09/22(水) 19:34:04.23 ID:u8cZI69ma.net] >>656 こちらで先に指摘がありましたね
669 名前:デフォルトの名無しさん mailto:sage [2021/09/23(木) 08:15:49.41 ID:0q4HMCJB0.net] >>638 変数に対しても型情報付加したマングリングするぐらいかねぇ?
670 名前:ハノン mailto:sage [2021/09/23(木) 10:00:32.79 ID:HaJtCNmP0.net] >>661 アセンブラがリンクできなくなるからヤダ
671 名前:ハノン mailto:sage [2021/09/23(木) 10:02:57.46 ID:HaJtCNmP0.net] >>657 thx a lot ! 日本語訳は太古の昔から有名どころ、ただし C89 の話だったかも www.kouno.jp/home/c_faq/c6.html#0
672 名前:ハノン mailto:sage [2021/09/23(木) 13:38:03.01 ID:HaJtCNmP0.net] >>658 ほとんどプロの人‥‥完璧なアマは私くらいですか
673 名前:はちみつ餃子 mailto:sage [2021/09/23(木) 16:56:05.29 ID:pKS1sRJG0.net] COFF フォーマットを見てるんだが、 関数が返す値の型を格納するところは有っても引数の型
674 名前:ノついては無いみたいだ。 http://delorie.com/djgpp/doc/coff/symtab.html ヘッダファイルで型情報をやりとりする前提なんだな。 ELF だとたぶん詳細な型も入れられそうな雰囲気があるんだけど複雑でようわからん……。 [] [ここ壊れてます]
675 名前:デフォルトの名無しさん [2021/09/24(金) 19:26:12.39 ID:bEXGgTP60.net] もしかしてc言語って新たにブロック文つくったら構造体の二重定義って可能になるんですか? 試しに { struct a{}; { struct a{}; } } ってcompiler explorerで打ち込んだらcompile通りました。 こんなの初耳です。 ちなみに同じブロック文で二重定義したらcompile errorが起こりました。
676 名前:ハノン mailto:sage [2021/09/24(金) 20:31:56.55 ID:B0dAhYuN0.net] >>659 今回の例でもわかるように、無節操にバンバン extern 宣言を複数の C ソースファイルのあちこちに混入させるのは非常にマズイので、 普通はサブモジュールの extern 宣言だけを別のファイルにまとめておいて、そのサブモジュールを使用するソースで #include するのが標準的です この extern 宣言だけをまとめたファイルを特にヘッダファイルと呼びます https://ideone.com/rdbae2 実体を定義したサブモジュールもヘッダを #include するようにしておけば、ヘッダの誤りも検出することができます なにかこういう基本文法を終えた後に位置するべき基本的な作法集をまとめたアドバンス教科書、みたいなものはないものでしょうか?
677 名前:621 mailto:sage [2021/09/24(金) 20:48:31.47 ID:PKobCCv1a.net] >>667 ありがとうございます >>659 == >>621 です 621にもあるとおり、僕もこのような extern宣言を使用したことがありません 他に変数の宣言の例が思いつきませんでした…
678 名前:ハノン mailto:sage [2021/09/24(金) 20:54:31.27 ID:B0dAhYuN0.net] >>666 使い道はわからないけれどもできるようですね‥‥無名構造体・異ネスト同一識別子で試してみました https://ideone.com/eXiadC
679 名前:デフォルトの名無しさん [2021/09/24(金) 22:23:44.15 ID:bEXGgTP60.net] >>669 レスありがとうございます 確認してみましたが この例でなされてるのはdeclarator中の構文要素であるidentifierの例であって、>>666 でなされているようなstructトークンとleft-braceトークンの間にあるidentifierを同じのを二度使っている例にはなっていないとおもいます。 僕は後者の仕様は、同じ変数名が複数ソース上にあるとき現在の位置から見て最も内側のブロックで宣言されたものの方で解決するという当たり前の規則だと認識してます 僕にとって謎だと感じるのは前者の仕様です。cの規格のどこからきているのか気になります
680 名前:デフォルトの名無しさん [2021/09/24(金) 22:25:13.81 ID:bEXGgTP60.net] >>670 すみません。 このレスの前者は後者に、後者は前者に読み替えてください 間違えました
681 名前:ハノン mailto:sage [2021/09/25(土) 06:49:29.05 ID:YrZFQiAF0.net] >>670 https://ideone.com/ORzF28 もう、結論はお出しになっているかと‥‥考えます 規格の話は苦手なのでごめんなさい
682 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 11:02:06.77 ID:dAtBdpVF0.net] >>670 > 同じ変数名が複数ソース上にあるとき現在の位置から見て最も内側のブロックで宣言されたものの方で解決するという当たり前の規則だと認識してます その「当たり前」の規則は変数名に限ったものじゃくて構造体タグ名についても同じ規則が適用される。 www.open-std.org/jtc1/sc22/wg14/www/docs/n2596.pdf 6.2.1 Scopes of identifiers > A label name is the only kind of identifier that has function scope. ... > > Every other identifier has scope determined by the placement of its declaration (in a declarator or > type specifier). ... > ... > ... the scope of one entity (the inner scope) will end strictly before the scope of the other > entity (the outer scope). Within the inner scope, the identifier designates the entity declared in the > inner scope; the entity declared in the outer scope is hidden (and not visible) within the inner scope. ただし変数名とタグ名とでは名前空間 (name space) が異なる。
683 名前:デフォルトの名無しさん [2021/09/25(土) 11:05:50.70 ID:lBxoEpbFF.net] { int a; { int a; } } とやってることは同じ
684 名前:デフォルトの名無しさん mailto:sage [2021/09/25(土) 16:07:19.71 ID:Uwq7lnPV0.net] >>666 二重定義じゃなくて、入れ子構造の中での定義にすぎないからでは? イメージとしては、コンパイラとしては、外側の構造体は struct XX_a {} 内側の構造体は struct X_a_a{} みたいな感じで管理してコード展開してるだけ。
685 名前:デフォルトの名無しさん [2021/09/25(土) 16:37:10.46 ID:g8iabg1P0.net] >>673 出典出してくださってありがとうございます declarator内かtype specifier内かどっちかで現れたかにも関わらず識別子には同じような規則が適用されるのですね この知見を趣味のコンパイラづくりに役立てたいと思います ありがとうございました
686 名前:デフォルトの名無しさん [2021/10/04(月) 14:36:02.21 ID:ly3pkK+7F.net] int a = -4 % 3; // -1 int b = -3 % 3; // 0 int c = -2 % 3; // -2 int d = -1 % 3; // -1 int e = (-4) % 3; // -1 int f = (-3) % 3; // 0 int g = (-2) % 3; // -2 int h = (-1) % 3; // -1 これは仕様ですか?環境依存ですか?
687 名前:デフォルトの名無しさん mailto:sage [2021/10/04(月) 14:53:49.95 ID:DbNnxaRn0.net] C90は実装による C99は被除数と同じ符号 ((ISO/IEC 9899:1999) の 6.5.5 見ろ)ってwiki に書いてあったけど 6節の (a/b) * b + a % b === a と 整数化に際しての丸めの方向から結果的にそう解釈すればいいってことなのかな
688 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 19:35:08.68 ID:7g8s0ol20.net] まあ環境依存だと割と困ってたので C99でIntelの実装にあわせただけなんですけどね
689 名前:はちみつ餃子 mailto:sage [2021/10/07(木) 15:44:53.27 ID:UkaMQ5gY0.net] >>677-678 C89 で符号が確定して欲しいときには div 関数があるよ。 これの符号は C89 のときから C99 以降の / や % の挙動と同じ。
690 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 19:07:27.42 ID:4loHRlApd.net] 配列から数個おきに取得するとき、なにかアルゴリズムとかライブラリ関数みたいなものってありませんか? ↓みたいなコードです。nが大きく、物凄い時間掛かっていて... for(i=0; i<n; i++) a[i] = b[i*3];
691 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 19:16:28.78 ID:bbG44xQB0.net] boostとvalarrayによる方法がみつかった https://stackoverflow.com/questions/8404822/create-a-subvector-from-regularly-spaced-elements-of-another-vector https://en.cppreference.com/w/cpp/numeric/valarray/slice
692 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 19:22:19.41 ID:xFkpIt2+0.net] >nが大きく、物凄い時間掛かっていて.. オンメモリーで扱えていなさそう
693 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 20:33:05.08 ID:1lOq7tfe0.net] a書とb読で互いにページ追い出されてスラッシングみたいになってんのかねえ
694 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 20:59:19.20 ID:UHyGo8Qe0.net] それ、3個おきという意味?
695 名前:デフォルトの名無しさん mailto:sage [2021/10/12(火) 21:57:57.62 ID:TH86hbHp0.net] 皆様ありがとうございます、Cだとなかなか難しそうですね... データは数百MBくらいの画像で、mallocで確保した領域にあります。 RGBRGBRGB・・・からRだけを取り出す、みたいな処理で、 頻出しそうだし何かうまい方法あるんじゃないかと思ったんですが。
696 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 00:46:23.98 ID:5Y743A290.net] >>686 ちょっと試してみた a[] 100MB, b[] 300MB の配列確保して、 配列bを適当に初期化したあと a[i] = b[i*3]; を実行してみた それしかしていないが処理は1秒程度だった 64bit環境でメモリ16GB、i7 6700k skylake 4GHz 手持ちのコンパイラは Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86 参考になるかな
697 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 00:54:53.24 ID:MLaNN2iaa.net] 8ビット無駄になるけど、RGBを 32ビットの整数として、>> と & では?
698 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 00:55:52.69 ID:MLaNN2iaa.net] バイト境界より速いかも
699 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 01:22:15.55 ID:l1MPihFP0.net] 単純な方法でもいうほど遅くなるわけない 最速を目指すならSIMDでやれ
700 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 02:10:45.46 ID:5Y743A290.net] >>686 の説明文で触れてない重たい処理があるのかもしれん
701 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 12:24:48.28 ID:89OLuObV0.net] ループ内で他の事をすると格段に遅くなったので(コンパイラの最適化の関係でしょうか?) 他の処理はすべて外に出して、書いた処理だけにしてる状況です。 ちょっとした実験に使いたいコードで、装置からの出力がだいたいGByte/sくらいなので、それに追い付く処理速度が理想なんですが... 並列化勉強しないと無理ですかね... >>687 テストまでありがとうございます、こちらでもそれくらいのオーダーでした。 環境のせいではなさそうで安心しました。
702 名前:デフォルトの名無しさん mailto:sage [2021/10/13(水) 20:54:31.47 ID:B1aurOR80.net] 他の事したらキャッシュの効率落ちるわな GByte/sってSATA3の速度超えてる リアルタイムに加工するのはまだまだ無理なんじゃ
703 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 07:22:07.33 ID:IjEclFwpd.net] FPGAの出番だな
704 名前:デフォルトの名無しさん [2021/10/14(木) 08:48:28.90 ID:RLbfxynZM.net] サイズが全然違って参考にならないかもしれないけど、以前テスト用の音声データのサンプリングレート落とす時に似たような事やった時は、a[i] b[j]でi++,j+=3みたいにやった方が早かった記憶。
705 名前:デフォルトの名無しさん [2021/10/14(木) 16:42:28.33 ID:1iGiane/0.net] >>692 コード見てないからなんとも言えないけど、本当にそのループだけで1秒ってのは時間かかりすぎじゃないかな。 このコードでgcc 最適化オプションなしでも0.3秒、-O2なら0.000002秒。 5年くらい前のCore i7 3.3GHz メモリ16GB 勘違いしてないか心配だけどコード。 #include <stdio.h> #include <stdlib.h> #include <time.h> int main(){ int count = 100*1024*1024; unsigned char *a = (unsigned char*)malloc(count * sizeof(unsigned char)); unsigned char *b = (unsigned char*)malloc(3 * count * sizeof(unsigned char)); clock_t t = clock(); for(int i = 0;i<count;i++){ a[i] = b[i*3]; } t = clock() - t; printf("%f\n",(double)t/CLOCKS_PER_SEC); return 0; }
706 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 17:04:51.16 ID:LTwSvEh70.net] >>687 だが、正確に測定したわけではない >物凄い時間掛かっていて... こういう質問だったので、そんなにかからないよという程度の返事 ものすごい時間が掛かると言う処理の内容が分からないとこれ以上は・・・
707 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 18:27:12.03 ID:ciTZIm8Y6.net] それは最適化で消えただけだ
708 名前:デフォルトの名無しさん [2021/10/14(木) 18:45:28.00 ID:1iGiane/0.net] >>698 ですよねw -O2
709 名前:ナ0.18秒。 [] [ここ壊れてます]
710 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 19:22:12.25 ID:B0s+ugv/0.net] もしやコードとかアルゴリズムの話じゃなくて、ミリ秒単位を長いと感じるかどうかってことなのか
711 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 20:39:33.49 ID:60mfbtKJM.net] Gbps出したいんだから当然そうでしょ
712 名前:デフォルトの名無しさん mailto:sage [2021/10/14(木) 22:30:42.31 ID:oXMWcY6Na.net] >>698 すでに書かれてたか
713 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 00:03:27.81 ID:XHojpqKh0.net] >>699 volatileつけてM1macで-O0で0.25秒、-O2で0.05秒位だな。普通に間に合いそう。
714 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 01:46:57.39 ID:vumwfiEZa.net] まったく自信がないのにチャチャ入れるようで申し訳ないのだけど、volatile を書く位置によっても結果がことなるかなと おそらく a の * の左側に記述したのだと思うけど、動的に確保したメモリに対して有効なのかな… 誰か詳しい人いませんか?
715 名前:はちみつ餃子 mailto:sage [2021/10/15(金) 02:01:35.27 ID:2ebxtk1m0.net] ・ volatile で修飾された変数 (メモリ領域) は初期系にとって未知の方法で更新されうるというプログラマから処理系に対するヒント ・ (未知の方法で更新されていても) 言語仕様で定めるところの抽象計算機の動作に厳密に従わなければならない という規則なので volatile の修飾先が変数 a であってもポインタ a が指す先であってもこの場合は結果的に最適化は抑制されると思う。
716 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 02:05:14.85 ID:vumwfiEZa.net] ありがとうございます おっしゃる通りのような気がします
717 名前:デフォルトの名無しさん [2021/10/15(金) 07:55:14.31 ID:Svg6ZUXsM.net] >>686 画像だけならopenCVにsplitというのがあってrgb に分割された配列を返してくれるんだけど、後のレスから察するにどんどん流し込まれて来るみたいだからそのまま使えるかわからないです。 そのsplitではインデックスの計算にOpenCLを使っていますが、もちろん他の処理にも使えるから、ソース読んでみて損は無いと思います。
718 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 08:19:09.19 ID:WeKxZ2Hf0.net] 工夫するにしてもマルチスレッドで分割するぐらいしか思い浮かばん 領域を n分割し nスレッドパラに走らせて複製
719 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 09:12:03.80 ID:+uEUiKf90.net] >>705-706 volatile の修飾先によってどこの最適化が抑制されるかが異なるので結果も異なるだろう。
720 名前:デフォルトの名無しさん [2021/10/15(金) 09:44:49.60 ID:FX8yed990.net] すみません、マジの初心者で申し訳ないんですけど、 今サンプルコードを写したりしながら勉強しているんですが、 毎回#includeとかint main(void)とかって書かなくて済む方法 ってありますか? visual studio 2019を使ってます。 良ければ誰か教えてください。
721 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 09:58:43.65 ID:5/Pqp5xeM.net] 今後数千行、数万行のプログラムを書いていくことになるんで、int mainを自動入力させたいなんて気持ちはそのうち自動的に消えるので安心してください
722 名前:デフォルトの名無しさん [2021/10/15(金) 10:13:57.88 ID:Sjupi756F.net] >>710 https://ideone.com https://codepad.org
723 名前:デフォルトの名無しさん [2021/10/15(金) 10:23:34.05 ID:FX8yed990.net] >>712 ありがとうございます! 元々それらを使っていたのですが、今使っているサンプルコードが書かれている本が コマンドプロンプトで実行することを想定して作られているのか、 よく途中でscanfを使って入力の読み取りをするのですが、オンライン上だとそれができないのです。 visual studio 2019で、テンプレを自分で作っておいてそれを 読み込むような技があれば教えてほしいです。
724 名前:デフォルトの名無しさん [2021/10/15(金) 10:53:31.08 ID:FX8yed990.net] 自力で調べて解決できました。 ありがとうございました。
725 名前:デフォルトの名無しさん mailto:sage [2021/10/15(金) 12:55:13.67 ID:/xIATXuH0.net] どういたしまして。 お役に立ててなによりです。
726 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 13:51:30.67 ID:0CjYy/Ai0.net] C言語初学者です for文を使って1からnまでの総和を求め、 さらに答えを例えばn==3なら 1+2+3=6と表示したいのですが、この表示の仕方がわかりません ご教授お願い致します
727 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 14:26:17.75 ID:W6fuAKpz0.net] int i.n,x; n=3; x=0; for(i=1;i<=n;i++){ x+=i; printf("%d",i); if(i!=n)printf("+"); } printf("=%d¥r¥n",x);
728 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 14:38:37.10 ID:0CjYy/Ai0.net] >>717 できました ありがとうございます!
729 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 16:54:36.35 ID:r+1DV466M.net] >>717 最終行の ¥r って要るの?
730 名前:はちみつ餃子 mailto:sage [2021/10/16(土) 17:51:52.16 ID:E+4r+lYs0.net] >>719 基本的には不要。 ・ 改行を表すものは (C の規格の範囲内では) 文字であるかのように扱う ・ テキストモードでの入出力ではホスト環境の都合に合わせて変換してよい ということになっていて、改行を2バイトの符号で扱うホスト環境では \n という一文字を その2バイトに変換するのは入出力関数の仕事。 ただし、標準出力をバイナリモードで開き直している場合だとか、 改行を1バイトの符号で表すホスト環境で2バイトの符号で表す環境のために出力したい といった事情で改行を \r\n と書くことが無いとは言い切れない。
731 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 22:25:40.97 ID:0CjYy/Ai0.net] 質問です 入力された文字列と文字数を表示するプログラムで Enterキーのみが入力されるまでループして入力要求をするようにしたいのですが 1〜4文字の入力はループするのですが5文字入力するとループが終わってしまいます どうなおせばいいでしょうか? よろしくお願いします /*************************************/ #include <stdio.h> #include <string.h> int main(void){ char str[] = "Hello"; fgets(str,sizeof(str),stdin); while (str[0] !='\n'){ if (str[0] != '\n'){ printf("文字列%s\n",str); printf("文字数%d\n",strlen(str)); fgets(str,sizeof(str),stdin); }else{ break; } } } /*************************************/
732 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 22:28:04.06 ID:j08Y/8ma0.net] よく出来たクイズですね
733 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 22:33:18.38 ID:N8k1BZc20.net] AOJかなんかですか
734 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 22:39:04.82 ID:j08Y/8ma0.net] >>721 >1〜4文字の入力はループするのですが5文字入力するとループが終わってしまいます 設問として、何文字までの入力を受け付けるようにし、 それを越える文字数入力された場合はどうすると指示されてます?
735 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 22:43:54.01 ID:0CjYy/Ai0.net] >>724 言葉足らずですいません 5文字までの入力で6文字以上の入力は考慮しないとなっています >>723 大学の課題です
736 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 22:50:23.50 ID:j08Y/8ma0.net] >>725 5文字までの入力を保証するには、配列サイズがたりません 入力最後のエンターキーまで含めるなら、7文字は必要じゃ無いかな?
737 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 22:59:47.56 ID:g8LyFw1O0.net] ・str配列を大きくする ・fgetsした結果のstrに改行文字が含まれてない場合は次の改行文字までstdinを読み飛ばす 等
738 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:00:22.34 ID:0CjYy/Ai0.net] >>726 配列の箱増やしたらループするようになりました ありがとうございます あと1つ問題が残っていて文字列表示のあとに改行が無駄に1つ入ってしまいます どうにかできないでしょうか? 現状 abcde です したい表示 abcdeです
739 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:00:54.46 ID:iHqDmbcU0.net] >char str[] = "Hello"; とにかくここが気持ち悪い・・・
740 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:02:15.17 ID:j08Y/8ma0.net] >>728 入力の最後に改行がある前提で表示を行うか、 文字列最後に改行がある場合は切り詰めるか、 どちらかで処理すると良いです
741 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:02:51.64 ID:hXa8blxW0.net] >>729 それは別に普通では?
742 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:08:52.93 ID:j08Y/8ma0.net] >>728 切り詰め方はこんな感じで if (str[strlen(str) - 1] == '\n') str[strlen(str) - 1] = 0; ↑全角空白は適当に置き換えて
743 名前:デフォルトの名無しさん [2021/10/16(土) 23:13:30.42 ID:D7GMWgGE0.net] Hello!って!付ければいいよ。元気が足りない。 さらにこれfgetsの動作の理解を問う良問なんだから、無駄な改行なんぞ気にする余裕があるならfretsのドキュメント読んだ方がいいぞ。
744 名前:デフォルトの名無しさん [2021/10/16(土) 23:14:42.85 ID:D7GMWgGE0.net] >>733 偉そうに言ってスペルミスですね。fgets です
745 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:26:16.40 ID:0CjYy/Ai0.net] >>732 ご親切にありがとうございます! >>730 頂いてから調べててまたわからないことが増えたーって思っていたところでした笑 上の問題は無事解決しました ありがとうございます >>729 スマートな初期化方法があれば教えて欲しいです
746 名前:デフォルトの名無しさん mailto:sage [2021/10/16(土) 23:27:52.08 ID:0CjYy/Ai0.net] >>733 正しく書き直せた場合の実行結果に改行が入ってなかったので気になりました汗
747 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 00:24:13.17 ID:IGrhvydt0.net] >スマートな初期化方法があれば教えて欲しいです バッファサイズをちゃんと決めておくぐらいか? ギリギリのサイズじゃなく余裕をもって(最大文字数+1(終端NULL)かつ32bitOSなら4バイト、64bitOSなら8バイト単位とか)。 定義後すぐにfgetsに渡すなら初期化も要らないと思うけど、念のためにやるなら char str[8]=""; か char str[8]={0}; かな。
748 名前:デフォルトの名無しさん [2021/10/17(日) 06:25:57.65 ID:atjZW8su0.net] >>731 そうやって初期化した str[] の内容を後で書き換えるのは普通ではないと思う。 可能だが気を付けてないとバグの元になりそうだしね。 似たようなのに char *p = "hoge"; があるが、これはコンパイラによっては文字列をリードオンリーになるようにコード作って *p = 'A'; なんて後でやるとOSがプログラム停止させたりする。 しかしCの文法としては間違いではないのでコンパイルエラーにならない。
749 名前:ハノン mailto:sage [2021/10/17(日) 07:57:57.94 ID:iZHfLY3SH.net] >>721 >char str[] = "Hello"; >>738 > str[] の内容を後で書き換えるのは普通ではないと思う。 私は「配列であるかぎり」それを後から書き換えるのは、初期化方法に関係なく文脈・表現として違和感なしと感じます
750 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 08:24:02.20 ID:steRrM330.net] 大文字→小文字への変換等の文字列長変わらない題材は str[] で初期化しそうだわ
751 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 21:22:20.52 ID:YXxqNhTYM.net] 初期化のときだけ [] をキッチリポインタと区別するc の仕様がちょっと気持ち悪い って感じかな
752 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 21:57:04.28 ID:8CkFjl5X0.net] [] は記憶域の確保 ポインタは記憶域の操作
753 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 07:29:22.77 ID:SjUVJOBmd.net] externや二次元配列でも区別しとるじゃろうが 元々違うものを区別されたからちゅうてガタガタぬかすなや 同じと思いたがるのが間違っとるんじや
754 名前:デフォルトの名無しさん [2021/10/18(月) 16:00:11.31 ID:r9t2S6+pF.net] char **hoge; char *hage[]; 好き嫌いが判れるな
755 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 16:05:46.60 ID:3P96aY7G0.net] ウンコとカレーは別のものです
756 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 19:51:04.60 ID:g0y5TC1t0.net] そもそも初期化の*と演算子の*だって違うものだからな……
757 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 20:04:38.45 ID:o7eKMY2r0.net] 関数の引数のary[]はポインタだって言ったじゃないですか
758 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 20:18:11.14 ID:SjUVJOBmd.net] ついでに頓珍漢
759 名前:デフォルトの名無しさん [2021/10/19(火) 07:28:30.98 ID:KQylMF0MM.net] >>738 終端文字忘れてるからじゃないの?
760 名前:デフォルトの名無しさん [2021/10/19(火) 08:18:32.37 ID:KQylMF0MM.net] >>749 char *pか、勘違いすみません。
761 名前:デフォルトの名無しさん [2021/10/20(水) 09:23:25.20 ID:OEiI06HQa.net] すごい勘違いレス
762 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 18:53:19.81 ID:X+tmlWS+d.net] if ((ss == 0) || (ss == 5) || (ss == 10) || (ss == 15) || (ss ==20) || (ss == 25) || (ss == 30) || (ss == 35) || (ss == 40) || (ss == 45) || (ss == 50) || (ss == 55)) { hogehoge(); } だいぶん無駄な書き方だと思いました 一桁の値が0が5の時に実行したいです アドバイスお願いします
763 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 18:59:09.50 ID:2b7An4Iy0.net] ss%5==0
764 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 19:00:41.26 ID:X+tmlWS+d.net] >>752 int ss; int sss = ss / 10; if ((sss == 0) || (sss == 5)) { hogehoge(); } 自己レス こうですかね
765 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 19:01:44.45 ID:X+tmlWS+d.net] >>753 どうもありがとうございました
766 名前:デフォルトの名無しさん [2021/10/20(水) 19:41:14.72 ID:+2OzLQ7p0.net] >>754 節子それ余りやない。ssss=ss-sss*10とかやらんと。 組み込みマイコンだと/,%なしで頑張る縛りプレーもあるで。自分がよくやるのは対応する値域を限定して、 掛け算と >> による割り算で計算する。それより難しいの頭がついてこん。
767 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 20:06:00.50 ID:X+tmlWS+d.net] >>756 どうもありがとうございます >>754 って書いたけど >>753 が端的だったのでこれが楽ちんだと思って754は見直してませんでした Arduinoで時計作りたくて触ってるところです
768 名前:デフォルトの名無しさん [2021/10/20(水) 20:19:57.63 ID:+2OzLQ7p0.net] >>757 ArduinoってUnoあたりは弱いマイコンなのにadafruitのサンプルとか浮動小数点演算してたり感覚おかしくなる。 1秒ごとの処理なら、1秒ごとにカウンタ増やして5になったら何かするって処理でもいいと思う。 使ってるマイコンが除算回路持ってるかは調べといたほうがいい。32bitマイコンでも割り算は省略されたり。 まぁ動きゃいいので効率や速度も捨てるのも、それが能動的な選択なら構わないとは思う。 ちなArduinoのスケッチは、古めのC++だったりするので、たまCで見慣れん文法が出て来る。
769 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 11:57:16.85 ID:F1Ma0oSBM.net] if(++ss &5 && ss+=11) {....} minutes=(ss &5)+ss/16*5;
770 名前:デフォルトの名無しさん mailto:sage [2021/10/21(木) 11:59:08.14 ID:F1Ma0oSBM.net] minutes=(ss & 7)+ss/16*5;
771 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 14:51:19.29 ID:xwM6FSoTd.net] >>759 難しそうで理解できないです>< >>758 mmが2, 7, 12, 17, 22, 27, 32, 37, 42, 47, 52, 57の時に実行したい int mm; if (mm = 2) || (mm = 7) || (mm = 12) 略 { hoge(); } こう言った場合はカウンター使うんでしょうか?
772 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 14:54:54.89 ID:xwM6FSoTd.net] >>761 mmが上の条件でなおかつmmがpmmとは異なりssが0のときに動かしたいです
773 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 14:57:33.61 ID:xwM6FSoTd.net] >>753 これを応用して、mmから2を引いて5で割り切れたときですかね
774 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 15:05:16.53 ID:1X6Ns9Hp0.net] witch (mm) { case 2: case 7: case 12: case 17: case 22: case 27: case 32: case 37: case 42: case 47: case 52: case 57: hoge(); break; default: break; }
775 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 15:12:34.58 ID:1X6Ns9Hp0.net] 頭のsが落ちてた><
776 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 15:57:50.32 ID:xwM6FSoTd.net] >>764 switchの存在忘れてました ありがとうございます やってみます
777 名前:デフォルトの名無しさん [2021/10/22(金) 17:17:41.96 ID:ZQZyZs9H0.net] if( (mm>1) && (mm<58 ) && !( (mm-2)%5) ) {.....} かな?
778 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 17:38:23.94 ID:gkJZOHn00.net] ((mm-2) % 5) == 0 !((mm-2) % 5) (mm % 5) == 2 ふむ。 なやましい
779 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 18:24:39.18 ID:xwM6FSoTd.net] >>768 ありがとうございます 3つ目ですかねー
780 名前:デフォルトの名無しさん [2021/10/24(日) 23:50:25.11 ID:P21IrDZK0.net] 今から数年前はc言語マスターっていうコテハンがいたような覚えがあるんだけど今は見る影もなくなっちゃったな 今でも覗いているのかな いなくなったらいなくなったで寂しいもんだ
781 名前:デフォルトの名無しさん [2021/10/24(日) 23:54:50.86 ID:P21IrDZK0.net] あと片山博文って奴もいたがあいつはtwitterで元気にやってるね すっかりtwitterのit畑に馴染んでいる
782 名前:デフォルトの名無しさん [2021/10/25(月) 10:50:24.50 ID:vmRZrQEpF.net] ここは人減り杉たな
783 名前:無し mailto:無し [2021/10/25(月) 22:34:33.20 ID:tqAHcDS70.net] #include<stdio.h> void main(void){ puts("Hello world."); } Cの基礎。
784 名前:はちみつ餃子 mailto:sage [2021/10/25(月) 22:51:17.12 ID:dRHq7DJG0.net] >>773 mian の返却値を void にすんなよ。
785 名前:デフォルトの名無しさん mailto:sage [2021/10/25(月) 23:12:03.34 ID:0vce0GaV0.net] どこでも出口 exit(EXIT_SUCCESS);
786 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 01:39:39.55 ID:M1juxUvT0.net] 人が減ってる? それじゃ俺も参加するか よっこらC(セックス)
787 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 01:46:13.55 ID:l3iKjiOk0.net] 「初めてのC」ってタイトル見たとき、ちょっとドキドキしたw
788 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 02:22:35.07 ID:LRGmoAXR0.net] みぁ〜ん
789 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 05:48:52.32 ID:M1juxUvT0.net] みぁ〜ん
790 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 06:52:29.03 ID:ch+2e+/f0.net] >>774 異常な執念で噛みつくやついるよな void mainに親でも殺されたのかって感じ
791 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 11:35:56.09 ID:l3iKjiOk0.net] トイレ使ったら水を流すだろ
792 名前:デフォルトの名無しさん [2021/10/26(火) 11:41:12.20 ID:4NkYNYny0.net] ふんばっても何も出なかったからそのまま出てきたわ。
793 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 17:15:10.74 ID:rbEPHvg70.net] なぜC言語は「言語」までつけて呼ぶのでしょうか PASCAL言語とかFORTRAN言語とかPython言語とかいう言い方は聞いたことがないので気になりました 一文字で語呂が良くないから?
794 名前:デフォルトの名無しさん [2021/10/26(火) 17:16:53.12 ID:iznG3/8mr.net] 音節が一つだけだからでしょ goと一緒
795 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 17:19:02.10 ID:rbEPHvg70.net] >>784 仮に「F」なんていう言語があったとしたら、それには「言語」は付けないのが自然なんですかね
796 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 17:24:23.61 ID:FOkaXEb/d.net] 俺は日常Cと言ってる
797 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 17:30:07.02 ID:TdYowdfsM.net] OとP以外存在しとるが https://sites.google.com/site/sappariwiki/a2z-languages
798 名前:デフォルトの名無しさん [2021/10/26(火) 17:43:08.10 ID:iznG3/8mr.net] >>785 fって一音節でしょ? 馬鹿なの?
799 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 17:50:47.85 ID:JgL6RS+zM.net] またまたご冗談を
800 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 18:07:04.47 ID:rbEPHvg70.net] >>788 馬鹿なんでしょうね
801 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 18:10:28.34 ID:LRGmoAXR0.net] アルファベット一文字なら言語ってつける Goだけなんか例外的なだけで
802 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 18:13:16.33 ID:rbEPHvg70.net] >>791 これって日本特有なんですかね
803 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 18:19:10.90 ID:l/KP9TR6M.net] 普通に短すぎる識別子の弊害だろ 言語付けとけば>>777 のレスは無かった
804 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 19:33:22.81 ID:M1juxUvT0.net] 日本語ではC言語で検索しやすくなるが外国はどうしてんだ? C lang とかで検索してるのかな?
805 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 19:47:06.75 ID:FOkaXEb/d.net] 英語圏でもC languageとは言うね
806 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 21:52:27.56 ID:ucHGO5Lk0.net] アセンブリ言語って自分的には違和感ないけど業界的にはどうなの?
807 名前:デフォルトの名無しさん mailto:sage [2021/10/26(火) 21:56:53.26 ID:ch+2e+/f0.net] 普通だね アセンブラ言語でもどっちでも しょせんカタカナだし ドヤるとバカっぽいから放置
808 名前:デフォルトの名無しさん [2021/10/30(土) 00:17:48.25 ID:0q4JizrL0.net] もう英字一文字の言語は飽和状態だからこれからは平仮名一文字とか漢字一文字の言語名にした方が良いな。
809 名前:デフォルトの名無しさん [2021/10/30(土) 00:23:08.83 ID:0q4JizrL0.net] ʗ言語
810 名前:デフォルトの名無しさん mailto:sage [2021/10/30(土) 08:25:14.25 ID:HlbDM8n/0.net] ツー言語 (゚∀゚)
811 名前:デフォルトの名無しさん mailto:sage [2021/10/30(土) 11:53:47.66 ID:A30JUN42d.net] >>784 日本語(外来語含む)の音韻は音節ではなくモーラ(=拍。俳句の数え方)で数えるべきで、 C(しい)もGo(ごお)も2モーラ >>785 >>788 F(えふ)も同じく2モーラ まあ、別に2モーラ以下なら「言語」を付けるという規則性もなさそうだけどね Java(じゃば)やLua(るあ)も2モーラだし
812 名前:デフォルトの名無しさん [2021/10/30(土) 17:29:52.20 ID:0q4JizrL0.net] 私意言語
813 名前:デフォルトの名無しさん [2021/10/30(土) 18:01:56.38 ID:zJlZfWf60.net] >>801 普通英語で検索するよね? c languageとかgolangとか
814 名前:デフォルトの名無しさん [2021/10/30(土) 18:03:58.48 ID:zJlZfWf60.net] luaって調べたら月の画像が出てきてめちゃくちゃ怖いぞ
815 名前:デフォルトの名無しさん mailto:sage [2021/10/30(土) 19:36:45.48 ID:d9y/i02Wr.net] 月が怖いってサテライトキャノンでも撃たれたのか?
816 名前:デフォルトの名無しさん [2021/10/30(土) 19:51:07.93 ID:lpthGY+1a.net] 月を怖がる人ってたまにいるけど 前世とか今世で悪いことでもしたんかね
817 名前:デフォルトの名無しさん [2021/10/30(土) 20:22:41.40 ID:zJlZfWf60.net] 天体の画像が怖い
818 名前:ハノン mailto:sage [2021/10/30(土) 20:27:03.94 ID:nIglmucmH.net] >>806 欧米では、月の光は人を基地外にする、とかいうそうですよ 確か狼男も満月だったっけ、いや、それは送り狼だったっけ?
819 名前:デフォルトの名無しさん mailto:sage [2021/10/30(土) 20:59:50.65 ID:f9Pytl6VM.net] お仕置きでもされたのかな
820 名前:デフォルトの名無しさん [2021/10/30(土) 21:01:00.69 ID:zJlZfWf60.net] 天体恐怖症なんやワイ 木星とか海王星とか怖い
821 名前:デフォルトの名無しさん mailto:sage [2021/10/30(土) 22:33:29.21 ID:d9y/i02Wr.net] 地球は恐くないん?
822 名前:デフォルトの名無しさん mailto:sage [2021/10/30(土) 23:11:54.45 ID:w/6Ssgd00.net] 裏側にいる事に気がつくと、落ちてしまうそうだ
823 名前:デフォルトの名無しさん [2021/10/30(土) 23:41:41.51 ID:zJlZfWf60.net] >>811 地球も太陽も怖いです あと小惑星も怖い あと月の裏側もマジでこわい
824 名前:デフォルトの名無しさん [2021/10/30(土) 23:42:05.22 ID:zJlZfWf60.net] 火星の衛星とかも怖いです 歪な形してるやつ
825 名前:デフォルトの名無しさん [2021/10/30(土) 23:43:09.25 ID:zJlZfWf60.net] 冥王星の最新画像見たけどめちゃくちゃ怖くて直視できなかった
826 名前:デフォルトの名無しさん mailto:sage [2021/10/31(日) 09:06:05.96 ID:eEOPPlKd0.net] アロコスなんかカワイイ形してんじゃん
827 名前:デフォルトの名無しさん [2021/10/31(日) 11:07:20.50 ID:dKAtRzTxa.net] 乙py 乙py
828 名前:デフォルトの名無しさん [2021/10/31(日) 11:30:55.69 ID:dKAtRzTxa.net] >>814 https://www.youtube.com/watch?v=bEwWCXxaVR4
829 名前:デフォルトの名無しさん [2021/10/31(日) 11:33:04.24 ID:xmsO/hLH0.net] >>818 グロ
830 名前:デフォルトの名無しさん mailto:sage [2021/10/31(日) 11:46:46.80 ID:TjuXDVeD0.net] NHK-BSプレミアム『グレートネイチャー』の宣伝臭が鼻につくくらいで 扱っている題材は台湾の自然、どこがグロなんだ?
831 名前:デフォルトの名無しさん [2021/10/31(日) 14:17:04.25 ID:xmsO/hLH0.net] >>820 地球の中心コアへの旅っていう関連動画がグロい
832 名前:デフォルトの名無しさん [2021/11/01(月) 0
] [ここ壊れてます]
833 名前:3:55:44.21 ID:6HuVbq6K0.net mailto: 饅頭怖い [] [ここ壊れてます]
834 名前:デフォルトの名無しさん [2021/11/01(月) 11:25:10.37 ID:/Zy4WfCe0.net] lu分解をc言語でやりたく、次のようなコード(1部分になります)を書いたのですが、y0の値が0.8になるはずなのに全く違うものとなってしまいます。原因が全くわからないのですが、どこを改良すればよいのでしょうか。 for(int n = 1; n <= M+1; n++){ t = n*dt; for(int i = 0; i <= N; i++){ x[i] = 0.0; } /* Ax = uを解く */ /* Ly = u */ y[0] = u[0]/l[0][0]; for (int i = 1; i <= N; i++){ y[i] = (u[i] - l[1][i]*y[i-1])/l[0][i]; } /* Ux = y */ x[N] = y[N]; for (int i = N-1; i >= 0; i--){ x[i] = y[i] - m[i]*y[i+1]; } /* 更新 */ for(int i = 0; i <= N; i++){ u[i] = x[i]; } }
835 名前:デフォルトの名無しさん [2021/11/01(月) 12:00:24.14 ID:z/x9VzKbF.net] int → double または float
836 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 13:05:24.25 ID:qmVDupeY0.net] x, y, l, m, u の宣言で添え字のとりえる範囲分はちゃんと確保してる? (lu分解として正しいかどうかはおいといて)ループのコードから x 0..N まで → 最低限 double x[N+1]; y 0..N まで → 最低限 double y[N+1]; u 0..N まで → 最低限 double m[N+1]; m 0..N-1 まで → 最低限 double m[N]; l [0][0]..[1][N] まで → 最低限 double l[2][N+1];
837 名前:デフォルトの名無しさん [2021/11/01(月) 15:07:15.16 ID:/Zy4WfCe0.net] 最初に宣言して確保してるので、大丈夫だと思うんですが、、 いちおうx,y,l,m,uをそれぞれ出力してみたのですが、yだけ間違えた値になってしまいます。 ループの順番とかがおかしいんですかね?
838 名前:デフォルトの名無しさん [2021/11/01(月) 19:03:15.19 ID:6HuVbq6K0.net] 全ての変数の宣言を書け
839 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 20:58:39.67 ID:6+jC3RjR0.net] 最小限再現できるコードを書いてもらわんと指摘することはできんねぇ (そして最小限再現にシェイプアップする過程でやらかしを見つける)
840 名前:デフォルトの名無しさん [2021/11/02(火) 07:44:51.26 ID:I7k+rE/i0.net] >lu分解 java版?なら見つかった。 ttps://qiita.com/edo_m18/items/1d67532bed4a083cddb3
841 名前:デフォルトの名無しさん [2021/11/02(火) 10:38:39.23 ID:px0qcy1yF.net] >>821 どこがプログロマー? https://www.youtube.com/watch?v=SsB8VfxgZwQ
842 名前:デフォルトの名無しさん mailto:sage [2021/11/03(水) 06:47:18.51 ID:biZn6gZT0.net] 小学生の頃から知ってたことばかりでウルトラつまんねえ番組だ
843 名前:デフォルトの名無しさん [2021/11/07(日) 10:08:30.22 ID:gNBrcBZD0.net] サイコパスゲイ病人菊永裕太郎
844 名前:デフォルトの名無しさん mailto:sage [2021/11/08(月) 14:05:50.44 ID:QzkUvy+x0.net] >>823 https://www.youtube.com/watch?v=Wdy1Y-fbAII https://www.youtube.com/watch?v=KYPiqtitEl8
845 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 19:10:26.04 ID:EXpCOp4b0.net] int main() { return 0; } いきなりこれの意味がわかりません。解説によるとゼロを返して正常終了する。 とかなんとかなんですが、どういう意味でしょうか。 オンライン上にゼロの意味の解説が見つかりません。
846 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 19:43:45.28 ID:Q3rklS0i0.net] 大抵の解説では「OSに返す値」となってる。 プログラムが正常終了したら 0。 異常終了や目的の処理が出来なかったときには0以外を返すのが慣例。 Linuxならシェルで echo $? Windowsならコマンドプロンプト/バッチファイルで echo %ERRORLEVEL% で確認できる・・・らしい。 0以外を受け取ったからとOSが何か特別な処理をするわけではない。
847 名前:デフォルトの名無しさん [2021/11/13(土) 19:53:04.62 ID:NDPTYcvp0.net] >>834 エラーで終了するときは0以外で帰しておくと 数年後の未来の自分を助けることができるぞ!
848 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 20:53:19.24 ID:pG0a2gxf0.net] この段階では 0をかえす そして 正常終了する ぐらいの認識でいいんじゃないの? 別にどんな整数を返しても正常終了するわけだし
849 名前:はちみつ餃子 mailto:sage [2021/11/13(土) 20:56:10.46 ID:FTD0k+Bx0.net] >>834-835 厳密にいえば、言語仕様上では ・ 0 又は EXIT_SUCCESS の場合は成功終了であることを処理系定義の方法で返す ・ EXIT_FAILURE の場合は失敗終了であることを処理系定義の方法で返す ・ それら意外の場合には返される状態は処理系定義とする という規則になっている。 どのように解釈されるかは言語仕様の側でははっきりとは決めずにホスト環境 (普通は OS のこと) や処理系の都合次第なので、 言語よりは OS の資料にあたるほうがわかりやすいかもしれない。 言語仕様として確実に保証してるのは少なくとも成功したのか失敗したのかだけは返せる (受け取るかどうかは知らんけど) ってだけだね。 POSIX (Unix 系 OS) では exit status と呼んでるけど、 Windows では error level とか exit code と言ってる。
850 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 22:33:17.66 ID:uR+eQ86NH.net] 単独で使う場合は関係ないけど シェルとかバッチファイルから呼び出す場合にエラーや望まない結果だったら処理を中断とかしたい場合に ちゃんと値を返しておくと便利になる
851 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 22:42:47.32 ID:J/2HuwPl0.net] パイプ使うときはどう利用すればいい?
852 名前:デフォルトの名無しさん mailto:sage [2021/11/13(土) 22:51:27.93 ID:TY5ABTi00.net] 棒を挟むんだよ
853 名前:ハノン mailto:sage [2021/11/13(土) 22:53:39.30 ID:DyUYxUU00.net] >>839 呼び出したプログラムが返してくる値を使うプログラムとしては make がありますね…
854 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 09:01:01.66 ID:TENET21t0.net] >>834 補足として、CのAPIにも失敗時に0を割り当てる場合と、成功時に0を割り当てる場合がある。 エラーの要因なんかを意識したい体系では後者も普通に使われるが、同じコード内で前者と 混在せざえるをえない事もある。マクロなんかを使った記述を意識しないとハマるぞw
855 名前:ハノン mailto:sage [2021/11/14(日) 09:49:57.54 ID:5CSGBVhH0.net] >>840 fork して dup2 を使います
856 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 13:25:42.20 ID:EUNDgDvQ0.net] >>843 ・E_OKで成功、それ以外でエラー ・0以上で成功、負でエラー ・常に成功 ・void ・なんかのポインタで成功、NULLでエラー 無理やり分類したらこんな感じ?
857 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 13:59:30.15 ID:E00roTgyF.net] >>834-835 個人的には int main() で引数無い状況ならOSのことは想定してないんだろうから void main() で良いだろって思う 組み込みとか
858 名前:ハノン mailto:sage [2021/11/14(日) 14:07:31.05 ID:5CSGBVhH0.net] >>846 リンクされるスタートアップが返り値の存在を前提にしているというのに、main() ごときが返り値の有無を指定するなんて傲慢じゃないですかぁぁぁぁ!
859 名前:はちみつ餃子 mailto:sage [2021/11/14(日) 15:32:15.51 ID:A4GQ1/1N0.net] main の型を変則的にするくらいなら main をエントリーポイントにしない (エントリーポイントの関数を別の名前にする) ほうが好ましいと個人的には思う。 言語仕様の外 (処理系定義) で定義された方法を使おうとしていることがわかりやすいので。
860 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 08:57:20.76 ID:ELwWgVHxd.net] >>846 俺もそう思う
861 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 08:59:15.64 ID:ELwWgVHxd.net] 実行開始点は◯◯関数とドキュメントのどこに書こうか悩まずに済むならそうしたい
862 名前:834 mailto:sage [2021/11/15(月) 18:18:16.98 ID:oeHKaDHh0.net] ただの慣例なんですね、ご回答ありがとうございました。
863 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 19:21:59.60 ID:BFf+frEV0.net] C言語初心者です。sleepを使って一文字ずつ 2秒ごとに表示したいのですが Windowsの端末だとうまくいくのですが、 Ubuntuだと8秒後にまとめてHelloと一度に 表示されてしまいます。ubuntuでも windowsのように一文字ずつ表示させたいのですが できないのでしょうか?コンパイラはGCCです。 #include <stdio.h> #include <unistd.h> int main (){ printf("H"); sleep(2); printf("e"); sleep(2); printf("l"); sleep(2); printf("l"); sleep(2); printf("o\n"); return 0; }
864 名前:ハノン mailto:sage [2021/11/15(月) 19:27:49.92 ID:a976/UsH0.net] >>852 printf('A'); fflush(stdout); はいかが?
865 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 19:28:12.24 ID:Xr7xQZWT0.net] printfとsleepの間に↓ fflush(stdout);
866 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 19:45:10.08 ID:BFf+frEV0.net] >>853 >>854 ありがとうございます。うまくいきました。 fflushの使い方調べてみます。
867 名前:はちみつ餃子 mailto:sage [2021/11/15(月) 23:18:43.35 ID:LEZCO+bp0.net] >>852 どちらの挙動も言語仕様的にはアリ。 ストリームが対話型装置を参照していると判定できて、かつその場合に限り完全バッファリングすることになっていて、 逆に言えば対話型装置 (この場合はコンソール) に繋がっているときはラインバッファリングかもしれないし、 バッファリング無しかもしれない。 フラッシュを明示的に指示するのでもよいが、 setvbuf 関数でバッファリングをしないように設定することもできる。
868 名前:はちみつ餃子 mailto:sage [2021/11/15(月) 23:20:10.09 ID:LEZCO+bp0.net] >>856 書き間違えた。 対話型装置を参照していると判定 ↓ 対話型装置を参照していないと判定
869 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 23:52:40.37 ID:9q/xF8xE0.net] 低レベルの出力関数使ってバッファリングを回避してみる、とか
870 名前:デフォルトの名無しさん [2021/11/16(火) 21:41:05.99 ID:vUDwceGd0.net] lintの無い事い今更気付いたのだが、代替何?
871 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 23:22:15.69 ID:hcv5mNbC0.net] >>859 clion
872 名前:デフォルトの名無しさん [2021/11/17(水) 02:29:57.06 ID:+JwFzM8Ra.net] >>851 int main(){ int a=0; return a; } と void main(){ int a=0; } をそれぞれ asm 付きでコンパイルして比較してみ 判ったら次は a=0; を inline にしてみ
873 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 16:44:53.52 ID:802yK0wSK.net] >>859 splint
874 名前:はちみつ餃子 mailto:sage [2021/11/17(水) 17:37:06.80 ID:R6z6I7690.net] >>859 コンパイラが細かくチェックするようになったから lint の出番がなくなった。 gcc や clang なら -fsyntax-only オプションを付けると文法のチェックまでで段階を止める。 必要な警告オプションを付けた上でこれを使えば古い時代の lint より厳しいくらいだと思う。 (ちなみに -Wall や -Wextra を付けても全ての警告が有効になるわけではない。)
875 名前:ハノン mailto:sage [2021/11/17(水) 19:11:13.17 ID:Kdlo9yNJ0.net] >>863 >(ちなみに -Wall や -Wextra を付けても全ての警告が有効になるわけではない。) 私は -W -Wall で妥協します
876 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 20:49:44.01 ID:U3uLHNTwd.net] 最近のコンパイラはミスタイプすると 「contが見つかりません、もしかしてcountのことですか?」みたいなことまで言ってくるもんなあ グーグルかよ
877 名前:ハノン mailto:sage [2021/11/18(木) 00:26:37.80 ID:MiW85JEr0.net] >>865 そこは読まない…
878 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 00:32:41.46 ID:HOoxCKRv0.net] 入門サイトで勉強しててこんな感じのコードがエラーになって { int a = 100; printf("数値:%d アドレス:%x", a, &a); } gccのエラーをコピペで検索すると、&aはポインタだから、アドレス:%pだと回答がヒット。 コンパイラやバージョンによって挙動が違うのでしょうか?
879 名前:はちみつ餃子 mailto:sage [2021/11/18(木) 00:55:33.69 ID:ku1GvVZm0.net] >>867 言語仕様で未規定や処理系定義としている場合があって、 そういうのは処理系や実行環境の都合に合わせて決めていいことになってる。 そして「未定義」とされている場合は何が起こってもいいことになってるので、 暴走するかもしれないし、 OS が止めてくれるかもしれないし、しれっと意味不明の結果を出力するかもしれない。 たぶんそれは未定義に該当すると思う。 C の可変長引数は型チェックをゆるゆるにすることで実現されていて、 処理系の内実をわかってる人は言語仕様上の保証がない (けど実態としては問題がない) コードを書くのは普通にある。 パソコンで一般的に使われている呼び出し規約 (関数を呼出す機械語レベルの挙動の規則) だと ポインタと (レジスタの幅以下の大きさの) 整数は同じ方法で渡すので問題にならないんだけど、 言語仕様では保証がない。 可変長引数の型チェックはゆるゆるなんだけど printf は頻出するからコンパイラが特別扱いで 少しチェックを厳しくしているのでエラーになることもあったりする。 まあ基本的には保証されてないのでやらないほうがいいよ。
880 名前:867 mailto:sage [2021/11/18(木) 01:52:34.49 ID:HOoxCKRv0.net] >>868 詳しい説明ありがとうございます。 実際にターミナルに出力されたのはerrorではなくwarningで、試したらそのままでも実行できていました。 用心しながら学習続けていこうと思います。
881 名前:はちみつ餃子 mailto:sage [2021/11/18(木) 02:23:30.05 ID:ku1GvVZm0.net] 逆に完全に言語仕様に沿っていても警告になる場合もあるし、 (基本的には警告が出ないようなコードのほうが綺麗ではあるが) 言語仕様的に OK なのか NG なのか、 とりあえず自分の実行環境で OK なのか NG なのかを正確に把握するのはかなり分かり難いと思う。
882 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 02:53:45.75 ID:SHW/gJRC0.net] >>867 まず、エラーと警告の違いを 次に、エラーとill-formedの違いを 憶えよう
883 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 10:38:56.92 ID:7kNuqccRd.net] 0から100までの整数のうち、17の倍数となる数の合計を求め、かつ途中の加算処理を出力するプログラムをつくったのですが、うまくいきません。
884 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 10:39:42.31 ID:7kNuqccRd.net] うまくいかないのは過程を出力する処理の過程なのですが、どうしたらよいですか。 コードは以下です。 #include <stdio.h> int main() { int i,sum=0; for(i=17; i<=100; i=i+17) { sum=sum+i; printf("途中計算→%d\n", sum); } printf("合計=%d\n",sum); return 0; }
885 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 10:49:25.32 ID:SHW/gJRC0.net] ダッサいループ書いてないで公式立てたら?
886 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 11:10:34.71 ID:R1PabgqQ0.net] >>873 「17の倍数」とは「17で割った余りが0」のこと Cで割った余りを計算する演算子は「%」
887 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 11:14:20.02 ID:SHW/gJRC0.net] 17から開始で17ずつ増やしてるだろ 0は17の倍数じゃないそうだが
888 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 11:32:07.83 ID:RYwZiL190.net] >>873 何がどううまく行かないの?あってそうに見えるけど
889 名前:デフォルトの名無しさん [2021/11/18(木) 14:40:44.78 ID:/He/baLSF.net] >>869 昔のソース(コンパイラ)は %x で通るのが多い 今から勉強するなら %p の方が良いし新しい教科書使った方が良い
890 名前:デフォルトの名無しさん [2021/11/18(木) 14:45:21.17 ID:/He/baLSF.net] >>873 printf("途中計算→%d, %d, %d\n", i / 17, i, sum);
891 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 14:45:34.58 ID:/He/baLSF.net] >>823 https://gitlab.com/libeigen/eigen/-/blob/master/Eigen/src/LU/PartialPivLU.h https://gitlab.com/libeigen/eigen/-/blob/master/Eigen/src/LU/FullPivLU.h
892 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 18:35:31.06 ID:CfNf7HSld.net] >>867 伝統的にポインタはintと同じメモリサイズなので昔はそう書いてた そうなんだよな最近のコンパイラはprintfのフォーマットと引数をチェックしてるんだよな もう慣れたが最初不思議な気がした 組み込みだと自分でprintf関数作ったり(標準だと使わない機能が多くて重すぎるから)するけどそんな時はどうなるのだろうとか
893 名前:デフォルトの名無しさん [2021/11/19(金) 00:07:30.77 ID:tkL53aTR0.net] >>872 ( ´_ゝ`)フーン
894 名前:デフォルトの名無しさん [2021/11/19(金) 00:11:12.00 ID:tkL53aTR0.net] >>873 それでいいのでは?
895 名前:はちみつ餃子 mailto:sage [2021/11/19(金) 00:18:54.40 ID:bln5kEpJ0.net] 64 ビット環境では LP64 や LLP64 (int とポインタの大きさが違う) が標準的になってしまったから 古いコードをそのまま持ってきたら通らないってことは割とよくあるよね。
896 名前:デフォルトの名無しさん mailto:sage [2021/11/19(金) 00:37:21.78 ID:tkL53aTR0.net] long と int (及び char *)を全て32bitとして扱っていて、辛うじてコンパイルは通るが決してまともに動かない プログラムがあったので、しょうがないから gcc の -m32 と32bit用ライブラリで何とかした。何せ量が膨大で、 人力で直してたら多分何人か死んでたと思う。
897 名前:デフォルトの名無しさん mailto:sage [2021/11/19(金) 05:44:49.46 ID:6rl9yCzd0.net] 俺が出向いた、とあるクライアントでは人海戦術してた
898 名前:デフォルトの名無しさん [2021/11/19(金) 10:15:17.36 ID:eyeX0xyMF.net] long が int に追い越されたのかと思った
899 名前:ハノン mailto:sage [2021/11/20(土) 20:09:18.64 ID:NniTuIFb0.net] >>884-886 far near 修飾があたりまえな世界から来た私にとっては、なんで今更なことしているの?と疑問におもっていました
900 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 20:11:58.21 ID:LAgO+4EW0.net] そういえばhageモデルなんてあったな
901 名前:ハノン mailto:sage [2021/11/20(土) 21:32:53.52 ID:NniTuIFb0.net] >>889 hage モデル、もとい huge モデルにはバグがある、とのもっぱらの噂でしたが実際どうだったんでしょうか…
902 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 22:42:01.83 ID:PPXRLNML0.net] ていうか、8086のHugeみたいなものはバグ作り込んでしまいそうで怖いよな。ポインタ絡みで。 違う値が同じアドレスになる事あるし。
903 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 22:45:40.83 ID:LAgO+4EW0.net] 当時300kを越える配列を処理したくて使いました 使うというか、複数のセグメントに分割して割り当て、 自前で配列インデックスを計算してアクセスしただけですが
904 名前:はちみつ餃子 mailto:sage [2021/11/21(日) 00:46:36.95 ID:mkw0m2hl0.net] 違う場所が同じ値になるような場合があっても言語仕様が保証している範囲ではちゃんと仕様通りだったりするんだよな。 というより保証が可能な範囲をうまいこと言語仕様にまとめたって感じなんだと思う。
905 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 08:41:13.51 ID:uokK0Aao0.net] >>888 Windowsが64bit主流になっていく頃にも一騒動あったよ
906 名前:ハノン mailto:sage [2021/11/21(日) 12:42:55.44 ID:ODZrEgDk0.net] >>891 さらに年寄りの繰言を続けますが、 >違う値が同じアドレスになる事あるし。 というのは far ポインタでも同じです、far と hage じゃなかった huge の違いは、オフセットの繰り上がりがセグメントに反映されるかされないか 私は余計なことはしてほしくないので、繰り上がりがない far を愛用していました、huge はいまいち信用できませんでした
907 名前:ハノン mailto:sage [2021/11/21(日) 12:44:00.07 ID:ODZrEgDk0.net] >>894 それ、今のことなのでは?>>884-886
908 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 02:11:41.33 ID:AqcF5lvQ0.net] 構造体のパディングの値って未規定ですか?
909 名前:ハノン mailto:sage [2021/12/01(水) 02:24:50.55 ID:VU8XmWVx0.net] >>897 パディングの状況に依存するコードを書くのはよろしくない、というのが一般論だったかと ファイル入出力で問題になりますが、私はもう、ちまちま fwrite() fread() で「1 byte ずつ」やるしかない、とまで諦めています 環境がバッファリングしてくれますし
910 名前:はちみつ餃子 mailto:sage [2021/12/01(水) 02:53:05.18 ID:Y6HO3vrm0.net] 未規定であるしパディングの大きさに依存するようなコードは避けるのが行儀のよいコードであるのは間違いないけど、 対象にしている処理系での挙動がはっきりしていて移植の可能性もない (または移植のコストをかける覚悟がある) のなら依存するコードを書くことはそれなりにあると思う。 マクロで切り分けて configure (とか cmake とかのメタビルドツール) で各アーキテクチャの都合に対処することは可能だし。 良くはない。 良くはないがそういう良くないことも出来るのが C ってもんなわけで。
911 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 11:58:37.67 ID:Jc7L6V7f0.net] 昔、構造体の扱いで失敗した事がある あるサイトで構造体を引数にして削除処理を行う関数を提供されたが、 実際に使おうとすると引数エラーを返されてしまい途方に暮れた 構造体メンバーには仕様書通りに必要な値をセットしている しばらくして原因が分かった 関数側は引数が正しくセットされているかを、 処理対象の領域に格納されている同一の構造体と比較しチェックしていた その比較に memcmp を使っていた 呼び出すこちら側は、構造体を自動変数として領域確保していた
912 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 19:41:43.68 ID:Dt37aX+70.net] 構造体の比較をmemcmpでやるの本当にバッドプラクティスだと思うわ 横着せずに比較関数作れと
913 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 20:37:38.80 ID:sYF3bwwtM.net] 横着したくなるというか識別子増やすの躊躇させる言語仕様が招く面倒ね メンバメソッド系はオブ臭く棲み分けに反し今更入れる必要ないと思うけど 一層にぶち撒かず妥当なルールでツール類で拾いやすいサポートネームスペース括りみたいなのがあれば void bossy(struct *a); bool bossy.supporter(struct const*a);
914 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 03:58:26.91 ID:boATToTk0.net] 素直にC++使っとけ
915 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 15:46:31.22 ID:nsbZ2n490.net] 若者のc言語離れ
916 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 15:56:03.63 ID:NxRkNBX1d.net] バブルの頃に努力?修練?ぎやはははだっせー と言ってたのが結局、日本の致命傷になっちまったな それを今まだ言ってる堀江みたいなぶっ飛んだキチガイもいるし どーすんだこれ
917 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 16:51:51.31 ID:BMPRSKoA0.net] >>905 何の話? 日本は米国植民地なので戦後から終わってますよ…
918 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 18:59:50.96 ID:boATToTk0.net] 植民地支配がどんなに恐ろしいことか知らないようだな 朝鮮半島に先進国並みのインフラを作ったり 狭い島国に世界最大のメガロポリスができるのと フィリピンのバナナ農家が受けている仕打ちの違いわかる?
919 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 19:37:18.40 ID:+Bf3UEhm0.net] 君はここに来なくて良いから、その代わりに 半島に行って自慢して感謝されてこいよ
920 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 19:51:25.65 ID:boATToTk0.net] わかるかなぁ、わかんねぇだろうなぁ
921 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 21:23:20.96 ID:bRKtguKwM.net] c++のネームスペースさんはadl とかテンプレート混じりでsfiane とか 使うつもりがなくても簡単に誤爆する罠のせいで妥当な実装ではないね
922 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 21:28:04.80 ID:BMPRSKoA0.net] >>909 アングロサクソンのやることはえぐいですね… でも半島の話はやめたほうがいいですよ、むしろ台湾の話をしたほうがいい(親中派だったら無理かもね)
923 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 21:44:47.29 ID:boATToTk0.net] >>910 うわー 整然と整列された弾薬を蹴飛ばして地雷原と言っちゃう手合いか
924 名前:mikuRTX mailto:sage [2021/12/03(金) 20:20:27.18 ID:JS/BWVJ20.net BE:871585708-2BP(0)] https://img.5ch.net/ico/2-1.gif c言語でGUIの作り方教えて
925 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 21:09:10.77 ID:qejwogbL0.net] >>913 www.kumei.ne.jp/c_lang/index_sdk.html
926 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 22:17:35.13 ID:4DnkKvZO0.net] >>914 WIndowsAPIはC言語で使うのが正解でC++では使わないっというのを別スレで見たんですが、そうなの?
927 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 22:43:36.48 ID:qIm8KpH10.net] C++でも使う事は出来るが、普通はクラスライブラリを使う 最初はMFCだったかな >>914 のサンプルを試したあと、 C++とクラスライブラリ使って同じ事をやってみると良いカモ
928 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 23:01:33.51 ID:4DnkKvZO0.net] サンクス
929 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 00:32:09.23 ID:d5QmhWSv0.net] >>915 補足すると自前でC++を使ってやる方法も win16 初期には見られたが、 https://www.aamazon.co.jp/dp/4774100544/ 結局みんな MFC ばかり使うようになりました、もうひとつのメーカー製の OWL ですら滅びたようです MFC の使い方の本は私は持っていない…
930 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 00:34:51.25 ID:d5QmhWSv0.net] >>913 wisdom.sakura.ne.jp/system/winapi/win32/index.html
931 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 00:37:46.81 ID:eEY2XAtO0.net] 使い方って言うほどの高度の内容ではないかも ドキュメント的にはMSのサイトが本家だし詳しいかも 確かサンプルも載せてたはず https://docs.microsoft.com/ja-jp/cpp/mfc/documents-views-and-the-framework?view=msvc-170 この辺から入っていくのかな?無事生還を祈る
932 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 00:39:25.21 ID:eEY2XAtO0.net] https://docs.microsoft.com/ja-jp/cpp/mfc/mfc-desktop-applications?view=msvc-170 済まん、こっちが入り口か
933 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 01:16:03.60 ID:eEY2XAtO0.net] C++の、さらなる深みに入りたいなら、こちらのスレの方が良いかも知れない Microsoft Foundation Classライブラリ専用スレ https://mevius.5ch.net/test/read.cgi/tech/1474384848/ Visual Studio 2022 https://mevius.5ch.net/test/read.cgi/tech/1634166667/ C++相談室 part158 https://mevius.5ch.net/test/read.cgi/tech/1636969758/
934 名前:デフォルトの名無しさん [2021/12/04(土) 03:50:46.66 ID:2dOPVhNC0.net] >>913 https://xjman.dsl.gr.jp/X11R6/X11/
935 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 03:52:50.38 ID:2dOPVhNC0.net] >>913 https://developer.android.com/ndk?hl=ja
936 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 03:57:24.10 ID:2dOPVhNC0.net] >>913 https://dixq.net/forum/viewtopic.php?t=10480
937 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 04:06:08.86 ID:2dOPVhNC0.net] >>913 https://teratail.com/questions/43672
938 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 05:37:11.06 ID:FSuqUkr60.net] MFCはWin32 GDIの極薄すけすけのラッパーだ 俺なんかMFCから憶えてそこから多くを知った
939 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 10:14:46.95 ID:h5ysN7XFa.net] WinUIとかもいいけど、MFCに代わるちゃんとしたCなGUIライブラリを用意して欲しかったわ
940 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 11:19:54.80 ID:7g1ihlkq0.net] winuiはイケてないの?
941 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 19:24:30.40 ID:d5QmhWSv0.net] >>927 では win16 時代の本 https://www.amazon.co.jp/gp/product/4774100501/ でも何かしら得るものがあるってことですね、最近ちょっと元気が出てきたから買おうかな、やすいし
942 名前:mikuRTX mailto:sage [2021/12/05(日) 00:01:56.83 ID:AUNWU2UB0.net BE:871585708-2BP(0)] https://img.5ch.net/ico/2-1.gif 913です。 みんなありがとう!!
943 名前:デフォルトの名無しさん [2021/12/05(日) 02:12:34.65 ID:NlN9zBro0.net] >>930 本が100円でも送料が300円以上だったりするので、古本は要注意。 メルカリで送料込みで安いやつ探した方が良いかも知れない。 (但し、300円以下はあまりない。理由は自分で出品してみると分かる)
944 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 04:30:24.51 ID:VQoGm9OLd.net] 47氏こと金子氏はMFCでWinnyを作ったんだな
945 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 15:55:33.73 ID:HAXCanWR0.net] >>933 winny2 は BCC/OWL だったと聞いた気がします
946 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 16:50:16.47 ID:VQoGm9OLd.net] RIP
947 名前:デフォルトの名無しさん mailto:sage [2021/12/05(日) 18:32:01.15 ID:HAXCanWR0.net] >>932 ありがとうございます!
948 名前:デフォルトの名無しさん mailto:sage [2021/12/07(火) 05:13:43.34 ID:WxNsBn2X0.net] >>934 金子氏の書籍より、VC++ から C++Builder に GUI の変更を目的に変えた、との記述を見つけました Borland C++ Builder 4.0, および 5.0 であれば OWL5.0 をサポートしていますが、VCL の可能性のほうが高いですね
949 名前:デフォルトの名無しさん mailto:sega [2021/12/08(水) 16:27:00.62 ID:iGfgkXA80.net] Windows上で編集してLinux上でコンパイルしたいんだけど そういうのに適したIDEでお前らが使ってるおすすめを教えて
950 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 18:39:45.04 ID:RLv6UJuP0.net] >>938 vscode
951 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 18:59:09.17 ID:GPDURn2W0.net] Ruby on Rails では、WSL2, Linux, Docker, VSCode(Remote Container, Remote WSL)など、 本物のLinux(CUI)で開発できる。 MSYS2/MinGW みたいなWindows でコンパイルした、日本語でバグるものを使う必要もない Dockerを使わずに、日本人が作った、バージョンマネージャーのanyenv で、 rbenv, nodenv, pyenv など、多言語を統一的に扱う事もできる 組み込み用mruby の本には、Virtualbox, Vagrant を使う。 WSLはサポートしないと書いてあるけど、WSLでも使えるかも? Webで使えるmrubyシステムプログラミング入門、近藤宇智朗、2020/11 宇宙開発などの組み込み用、MicroPython, Lua, Squirrel の代替になる。 Ubuntu 18.04, C99 対応 人工衛星イザナギ・イザナミで、使っている
952 名前:デフォルトの名無しさん [2021/12/08(水) 20:28:27.76 ID:pzF9gjPk0.net] >>940 キヤノンが打ち上げた光学衛星が夜間撮影に成功したそうです。 夜間撮影が出来るとなると、もはや立派なスパイ衛星。 何を撮影しましょう。
953 名前:デフォルトの名無しさん [2021/12/09(木) 11:14:02.01 ID:89810ylo0.net] 実用的なところで夜間に移動する北のミサイル発射トラック追尾。 個人的希望でgoogleカーの追尾。
954 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 13:22:59.56 ID:avfziXHId.net] 頭頂部が日に日に薄くなっていくような気がするから その辺のチェックを毎日やってほしい
955 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 13:26:11.16 ID:NPIqJHRg0.net] >Linux上でコンパイルしたい Linuxのシェル上でコンパイルしたいという意味? それともGCCを使いたいという意味?
956 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 02:07:06.32 ID:Uh57IFJZ0.net] そう言えば以前 Windows で動く IDE で Linux で動くプログラムの編集をしてそのまま リモートで Linux 側でコンパイルして更にリモートでデバッグまでできれば良いなと 思ったが、どうやらそれができるものはなさそうなので諦めて Linux 上で IDE を動かした。 まあでもクロス開発というか、リモートデバッグというか、そういうのが出来ると便利だよな。
957 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 09:42:22.14 ID:bMtT4XMq0.net] >>944 Linuxにインストールしてあるgccでコンパイルしたい ビルドボタン押したらssh経由でmakeできたら素敵だが 使ってるgccのバージョンがちょっとどころじゃなく古いので できればMinGW gccとかじゃなくて現物のgcc使いたい感じ
958 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 11:35:51.37 ID:vRQI3bYg0.net] 上でも書いたけど vs code ではダメなの? ターゲットが WSL、コンテナ、ssh 接続関係なく Win 環境から編集、コンパイル、デバッグ一通りなんでもできるよ。
959 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 14:06:37.92 ID:bMtT4XMq0.net] そこまでおっしゃるのなら、試してさしあげてもよろしくってよ?
960 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 15:29:28.42 ID:IPFkCC9z0.net] 歯ね
961 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 18:11:12.39 ID:7gXx5u630.net] 羽?
962 名前:デフォルトの名無しさん mailto:sage [2021/12/10(金) 18:59:12.87 ID:wbbsNkrV0.net] 教えて差し上げて
963 名前:デフォルトの名無しさん [2021/12/11(土) 03:38:45.47 ID:LF8J+dNV0.net] >>945 を昨日書いたが、さっきこんなの見つけた。有料だけどな。 JetBrains、リモート開発機能と軽量IDE「Fleet」を発表 https://japan.zdnet.com/article/35180131/
964 名前:940 mailto:sage [2021/12/11(土) 13:26:00.16 ID:iDGs+tOs0.net] 漏れは、Ruby on Rails, WSL2, Ubuntu 18.04 で、 Web Socket など、Railsで使う各モジュールがネイティブコンパイルされるけど、 build-essential とか入れておけば、 Rails のインストール時に、勝手にコンパイルされる build-essential には、 gcc(GNU C compiler), g++(GNU C++ compiler), libc6-dev(GNU C Library), make などが入っています パッケージ: build-essential https://packages.ubuntu.com/ja/bionic/build-essential 43.0 MB のアーカイブを取得して、165 MB のディスク容量が使われます
965 名前:デフォルトの名無しさん mailto:sage [2021/12/11(土) 22:36:35.78 ID:KvUnFidtd.net] VS2022に昔のプログラム持ってったら isspace()とかに80h以上の文字入れると例外になるけど いいのかこれ テーブルで処理してて80h以上は負だからテーブル外になるって理由はわかるんだけどさあ 昔のはなんとかうまくやってた気がするんだけど
966 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 01:29:13.77 ID:xqkchTt80.net] >>954 それ char で負の値を渡してるんじゃね?
967 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 01:30:08.80 ID:xqkchTt80.net] >>954 この話ね https://www.jpcert.or.jp/sc-rules/c-str37-c.html
968 名前:ハノン mailto:sage [2021/12/12(日) 06:11:48.38 ID:i1KpRZU20.net] >>954 int isspace(int c) ですよ、ちゃんと int の正の数で渡してます?char をまんま渡してたらまずいっすよ >>956 「unsigned char にキャストして、暗黙の型変換(プロモーション)に頼る」ってかなりアクロバットに見えますね
969 名前:はちみつ餃子 mailto:sage [2021/12/12(日) 11:16:13.91 ID:553p9mhC0.net] char が符号付か符号無しかは処理系定義で、 符号無しであるような処理系では char が int に拡張されたときに負数になることはない。 (考慮する必要はない。) C にはそういう処理系定義とか未規定とか未定義がもりだくさんなので ある処理系の定義では未定義を踏まずに済むプログラムでも 別の処理系では (処理系定義のコンボで結果的に) 未定義に引っかかることはよくある。 C のプログラムで完全に処理系定義や未規定を避けるというのは困難な話だし、 (可能なら環境依存を避けるように意識するのは良い作法ではあるけど) 違う環境に持ってきたらその程度の修正は必要なものだと思って諦めるしかしょうがない。
970 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 11:27:28.68 ID:0XY4m15b0.net] 未規定を避ける必要はない 未規定のブレ幅以内に収まるように書いてあるプログラムは適格 そうでないプログラムは不適格で未定義の動作となるだけだ
971 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 17:20:11.74 ID:lpH8MLUG0.net] 未規定と、明示的な未定義は違うのか?
972 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 17:33:46.14 ID:0XY4m15b0.net] 違う。 たとえば int f1(), f2(); int a = f1() - f2(); のようなことをしているとき、 f1とf2の評価順序は未規定 f1とf2の評価順序によりaに入る値が変動する場合は未定義の動作だ
973 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 17:44:58.99 ID:Qvw+czy00.net] 未規定って処理系毎に好きに実装して良いんでしたっけ?
974 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 17:55:44.75 ID:YDRHEr6M0.net] 処理系が好きに実装してよいし, ひとつの処理系の中で一貫している必要も, ドキュメントに明記する必要もない
975 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 17:58:06.91 ID:Qvw+czy00.net] 未定義動作だと、最悪SEGVでも良いようなオイ
976 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 17:59:00.60 ID:YDRHEr6M0.net] SEGVはマシな方なんですが
977 名前:はちみつ餃子 mailto:sage [2021/12/12(日) 18:09:59.00 ID:553p9mhC0.net] >>962 未規定な動作を含むプログラムは正しい。 あり得る動作の内のどれかにはなる。 未定義はどんな保証もない。 未定義の挙動を含むプログラムはプログラム全体がどんな動作をするかわからん。 全然関係ないと思う箇所でわけわからん動作になることもあるし、 未定義を踏んでる箇所より前に問題が表れることもないとはいえない。 >>963 処理系定義は「未規定の動作のうち,各処理系が選択した動作を文書化するもの。」ということになっている。 つまり処理系定義は未規定の一種という扱い。
978 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 18:12:53.56 ID:aAJ0FK40M.net] >>962 処理系どころか同じソースでもコンパイル毎に変えることすら許される
979 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 19:00:18.24 ID:xqkchTt80.net] >>961 > f1とf2の評価順序によりaに入る値が変動する場合は未定義の動作だ これは嘘じゃね?
980 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 23:13:30.38 ID:VXD697/Q0.net] >>968 いやあってる 演算子の結合規則・優先順位は、あくまでも複数の演算子があったときにどの演算子を先に処理するか、に過ぎない オペランドを二つ持つ演算子一つに限れば、どっちのオペランドを先に評価するかは処理系依存だったと思う これは関数の引数についても同じ
981 名前:デフォルトの名無しさん mailto:sage [2021/12/12(日) 23:20:10.63 ID:xqkchTt80.net] >>969 だれも結合優先度の話はしてないと思う。 > f1とf2の評価順序は未規定 これについては未規定で異論は無いんだよ。 > f1とf2の評価順序によりaに入る値が変動する場合は未定義の動作だ でも、こっちは嘘じゃね?という話。そんな規定文面確認できない。
982 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 00:34:13.21 ID:0Z9P9uJp0.net] C17Draftのpp.65 6.5 1では? > If a side effect on a scalar object is unsequenced relative to either a different side effect on the same scalar object or a value computation using the value of the same scalar object, the behavior is undefined. > If there are multiple allowable orderings of the subexpressions of an expression, the behavior is undefined if such an unsequenced side effect occurs in any of the orderings.
983 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 01:22:45.02 ID:aR9zk0xx0.net] >>971 複数の関数呼び出し先にある評価同士、あるいは呼び出し元と呼び出し先にある評価同士は indeterminately sequenced となり、 unsequenced にはならない。 6.5.2.2 Function calls p10 > ... Every evaluation in the calling function (including other function calls) > that is not otherwise specifically sequenced before or after the execution of the body of the called > function is indeterminately sequenced with respect to the execution of the called function. 96) ... > 96) In other words, function executions do not “interleave” with each other. >961 の f1, f2 は関数なので、 f1() - f2() の結果が未規定だからといって未定義動作にはならない。
984 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 02:53:30.01 ID:0Z9P9uJp0.net] >>972 OK, 関数呼び出しを噛ませたことで評価順序が未規定ではなく不定(一方が他方の後(先)であることは保証される)になるので, 呼出先関数で副作用があっても(結果は未規定だが)未定義動作ではない, と 確かによくある a = i++ + ++i; みたいな例が適切だったか
985 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 03:50:46.86 ID:aR9zk0xx0.net] >>973 あともう1点念のため。 その例 a = i++ + ++i は未定義動作になる例として適切なんだけど、未定義動作になる理由は >971 の規定であって、 >961 の「評価順序によりaに入る値が変動する場合」というような理由じゃない。 例えば a = (i = 0) + (i = 0) は、どっちの i = 0 を先に評価しても a に入る値は 0 で変動しないけど、未定義動作となる。
986 名前:デフォルトの名無しさん [2021/12/14(火) 17:26:28.72 ID:LP8Fmqr90.net] 自作ライブラリのヘッダと標準関数のヘッダの読み込み順って なにか決まりごとはあるの? #include "jisaku.h" #include <stdio.h> ってやってたらキモイって言われたんだけど、これなんかおかしいか? インクルードガード利いてるし順番なんてどうでもいいだろ っていうか だったら自作のヘッダが先に来るべきだろ って思うんだけど
987 名前:はちみつ餃子 mailto:sage [2021/12/14(火) 18:00:24.76 ID:+JRF3Q+g0.net] >>975 たとえば assert.h を #include する前にマクロ NDEBUG が定義されていると assert が無効になるといったように 動作の切り替えをするマクロというものが存在する。 標準ではそういうマクロは下線で始まる名前になってることが多いから自分のコードの中の名前がたまたま衝突するということは そうそうないんだけど、各処理系やライブラリに固有の切り替え用マクロが雑な短い名前だったら意図せず影響を与えるかもしれない。 単なる習慣としてもプロジェクト内のヘッダは後に書くのが定着しているね。
988 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 18:01:10.76 ID:la3dHmwP0.net] ユーザー先だと、標準的な関数やdefineが定義済みになって不具合が出るかもしれないし 一般的な方から読み込んだほうがいいのでは?
989 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 18:42:48.59 ID:nW+wkdEb0.net] なんか本の著者は自作モジュールを先にインクルードするって言ってたな 理由はそのほうがコンパイルエラーが早くなるかららしい
990 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 19:01:07.43 ID:LP8Fmqr90.net] >>976-978 なるほど 若い時分なら「そんなの間違ってる! 俺が世界を正す!」って言ってたかもなぁ とりあえず自分ヘッダは後ろで読むようにするわ
991 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 19:56:33.18 ID:J7XSbp4E0.net] コンパイルエラーが無くなってもバグは残るからなあ
992 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 21:37:05.35 ID:Il/nsfIC0.net] >>977 標準ヘッダを後に書くと 衝突したとき標準ヘッダ側がエラーとして表示されるからな
993 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 22:16:45.94 ID:yrIaaVQv0.net] >>979 決断に水を差すことになるかもしれないけど、↓のベストアンサーでは自作ヘッダが先だよ。 https://stackoverflow.com/questions/2762568/c-c-include-header-file-order
994 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 22:26:46.15 ID:Eg2Dauqu0.net] くだらねえ 単に依存関係ってだけのことだろ 一概にどっちが先であるべきだなんて押しつけは糞食らえだ
995 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 23:19:28.66 ID:J7XSbp4E0.net] 以前のサイトだと 標準ライブラリ 業務共通ライブラリ 個別ライブラリ の順にインクルードしなさいと決められてた
996 名前:デフォルトの名無しさん mailto:sage [2021/12/15(水) 00:55:34.24 ID:Nn1Wh5vx0.net] まぁ、これも他のスタイルと同じで、どっちがいいというよりは単純なルールで統一されていることが重要なものと思ってる。
997 名前:デフォルトの名無しさん mailto:sage [2021/12/15(水) 05:27:05.50 ID:XqRMbcSJ0.net] 押しつけはやる気と引き換えだ そのコストに見合う理があるべき
998 名前:はちみつ餃子 mailto:sage [2021/12/16(木) 11:05:28.00 ID:78Qrz9F+0.net] ヘッダのインクルードは全て .c の側でやる (ヘッダ内でインクルードしない) という流儀もある。 既にほとんど滅びた流儀だろうし、現代的ではないと断っておくがこの考え方を取るのであれば インクルードの順序は重要になる。 // foo.h struct foo{}; // bar.h // ここで foo.h や stdint.h をインクルードしない void bar(foo, uint32_t); // bar.c #include <stdint.h> #include "foo.h" #include "bar.h" void bar(foo x, uint32_t y) { printf("bar\n"); } // main.c #include <stdio.h> #include <stdint.h> #include "foo.h" #include "bar.h" int main(void) { struct foo x; bar(x); } メインの側で適切な順序にしないといけないから抽象不足だが、 インクルードガードしてても読み込んでプリプロセスの手順を通すという処理は発生してしまうので それすらも最低限であるのが好ましいなどの思惑があるのだと思う。 (いまどきのコンパイラではインクルードガードのパターンを検出して 二度目にはファイルを読むことすらしないものもあるらしい。) まあリソースをケチるのが正義だった昔の話やね。
999 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 21:34:42.48 ID:U4IWqRR10.net] test
1000 名前:デフォルトの名無しさん mailto:sage [2021/12/23(木) 19:14:59.61 ID:Xd/JFvMa0.net] レジスタから「値を読みだす」というのは「値をコピーする」と同義ですか?
1001 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 05:09:46.99 ID:ZnDQBfvC0.net] なんか違和感ある言い方だな 「読む」とはCPUへの入力、「書き込む」がCPUからの出力で たとえばメモリリードはメモリからの出力、メモリライトはメモリへの入力を意味する 「コピー」はそれで合ってる 「ムーブ」になる場合は必ずそう断るから
1002 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 05:42:34.84 ID:TL6ByUiE0.net] >>990 たとえば int a = 1; int b = a + 2; この「a + 2」の「a」の部分はメモリリードしてるということですよね このとき計算のためにCPUに値を入力(コピー)しているという理解で合ってますか?
1003 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 05:43:27.34 ID:+etymfSa0.net] レジスタからの読み出しは読み出しという操作自体に副作用がある(レジスタに対する読み出しを検知してデバイスが何かを行う)場合があるので, 必ずしも同義とは言えない
1004 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 05:58:42.33 ID:ZnDQBfvC0.net] >>991 合ってる
1005 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 06:05:01.87 ID:TL6ByUiE0.net] >>992 >>993 ありがとうございました
1006 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 06:43:15.91 ID:M4a7QlIa0.net] >>991 >CPUに値を入力 レジスタはCPUなのかメモリなのか int a = 1; int b = a + 2; これがアセンブラだと mov ax,1 add ax,2 mov ptr[b], ax メモリに書き込んでるのは3行目しかないが
1007 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 01:01:40.65 ID:s/Gdf1X50.net] >>995 アセンブラよくわからないんですが mov ax, 1 // axレジスタに1をコピー add ax, 2 // axレジスタの値に2を加算 mov ptr[b], ax // axレジスタの値をptr[b]にコピー でしょうか ptr[b]っていうのはなんですか?
1008 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 01:29:37.77 ID:M0D5aTvU0.net] 最適化で変数aがレジスタに充てられてるんだな 最適化を抑制すれば mov ax,1 mov ptr[a], ax mov ax, ptr[a] add ax,2 mov ptr[b], ax とかになるんじゃね
1009 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 11:51:05.24 ID:9FGZD56t0.net] #include <stdio.h>
1010 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 11:51:41.94 ID:9FGZD56t0.net] int main(void) { printf("good-bye 157\n");
1011 名前:デフォルトの名無しさん mailto:sage [2021/12/25(土) 11:52:11.17 ID:9FGZD56t0.net] } /*このすれは終了しました*/
1012 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 180日 0時間 29分 20秒
1013 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています