1 名前:デフォルトの名無しさん [2019/04/02(火) 11:23:37.62 ID:SQXqRaAc0.net] !extend:checked:vvvvv:1000:512 C言語の話題のみ取り扱います C++の話題はC++スレへ 質問には最低限の情報(ソース/コンパイラ/OS)を付ける 数行で収まらないソースは以下を適当に使ってURLを晒す https://paiza.io/ https://ideone.com/ codepad.org/ C11 www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf C99 www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf kikakurui.com/x3/X3010-2003-01.html C FAQ 日本語訳 www.kouno.jp/home/c_faq/ JPCERT C コーディングスタンダード https://www.jpcert.or.jp/sc-rules/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
552 名前:デフォルトの名無しさん mailto:sage [2019/05/15(水) 12:59:51.65 ID:Wbf0zcGJ0.net] exeがnew(malloc)するけど中をいじるのは全てdllの関数ってのはままある dllだけ差し替えで済ましたい、サイズが変わらなければexeはビルドし直さなくていいのに… ってことだろう >512の >intや他の型が固定サイズの保証はないから、処理系をかんがえると使えない >パディングでサイズも変わっちゃうしね は全く関係ない話だったということだ 素直に「よくある手段」でやればいい >514,517のunionもいいと思うけど foo.aでアクセスできないよね?foo.body.aとかしないと
553 名前:デフォルトの名無しさん mailto:sage [2019/05/15(水) 13:12:20.84 ID:25auY+1H0.net] >>517 の foo.a でいきなりアクセスできる union が記述できるのは C11 からみたい 無名構造体/無名共用体
554 名前:デフォルトの名無しさん mailto:sage [2019/05/15(水) 14:41:00.06 ID:dMKqDPXvr.net] >>535 intが4バイトなんて保証はないから、char[] bufの大きさを決められないって話でしょ? intメンバを追加したとして、bufのサイズはどれだけ減らせばいいのかわからないのが問題 4の環境が多いだろけど、2の環境だと2を減らさなきゃいけないわけで dll差し替えで再ビルドしない場合、構造体サイズが変わると特に配列渡しの場合はセグメンテーションフォールトになる可能性が高くて危険 セーブデータみたいに構造体をそのままファイルに落とすとしても、サイズはずっと不変なのが扱いやすいね
555 名前:デフォルトの名無しさん mailto:sage [2019/05/15(水) 14:56:07.34 ID:e9I3VVqQa.net] 数字付かないintのでかい方に合わせるなら、それこそunion使って明示的にオフセット決めるとか。 本当にそんなことしたいのか?という話は置いといて。 もちろんint32_tとかint_least32_t使う方がいいし、本当に位置合わせするならバイト位置指定して読み書きするし、そもそもサイズ固定
556 名前:ケずにシリアライズ用のライブラリ使うのが正しいよ。 [] [ここ壊れてます]
557 名前:デフォルトの名無しさん mailto:sage [2019/05/15(水) 19:35:47.81 ID:0TljqresM.net] >>537 > intが4バイトなんて保証はないから、char[] bufの大きさを決められないって話でしょ? そんな話はとっくに終わっとる >>515 をちゃんと読めよ
558 名前:デフォルトの名無しさん mailto:sage [2019/05/15(水) 20:46:54.27 ID:Wbf0zcGJ0.net] >>536 ほう知らんかった なら>517でほぼデメリットないね >>537 「その環境」でのintのサイズはsizeof(int)でおk
559 名前:デフォルトの名無しさん mailto:sage [2019/05/15(水) 21:55:29.06 ID:ZaVTFrP70.net] win32apiはバージョンによって構造体の変数が追加になるから構造体のサイズを構造体の先頭にセットする
560 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 08:13:26.18 ID:eEplP63Q0.net] windows.hのsmallで一時間潰した
561 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 19:38:59.34 ID:GXqxfUU20.net] 文字配列列sを逆順に文字配列tに格納して出力したいのですが、 以下のコードでは実行してもt=[]と出力されてしまいます #include <stdio.h> #define MAXLINE 1000 main() { char s[MAXLINE],t[MAXLINE]; int c,i,I; for(i=0; i<MAXLINE-1 && (c=getchar())!=EOF && c!='¥n'; ++i) { s[i]=c; } if(c=='¥n'){ s[i]=c; ++i; } s[i]='\0'; I=i; for(i=i; 0<=i; i=i-1) { t[I-i]=s[i]; } printf("t=[%s]",t); } どこがおかしいのでしょうか…
562 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 19:48:10.73 ID:q0J7kB7g0.net] 後のループの一発目は s[i]='\0'; I=i; /* ここのforを削って */ t[I-i]=s[i]; こういうことになるから t[0] = s[i] ってことになって t[0] = '\0'; をやってることになる 上記のは 1 2 3 4 \0 → \0 4 3 2 1 のコード 実装すべきなのは 1 2 3 4 \0 → 4 3 2 1 \0 となるコード
563 名前:デフォルトの名無しさん [2019/05/16(木) 20:27:22.18 ID:m1+/MMjMa.net] 惜しいねえ。綺麗に逆に入ってはいるんだよな。
564 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 20:38:11.53 ID:GXqxfUU20.net] おっしゃる通りでした…今度は上手くいきました ありがとうございます
565 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 20:38:46.73 ID:GXqxfUU20.net] おっしゃる通りでした…今度は上手くいきました ありがとうございます
566 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 21:09:34.65 ID:q0J7kB7g0.net] 自己解決できたようでなにより 整数の配列を逆に整列させるなら正解だったんだけどねー 「文字列」操作の落とし穴ですな
567 名前:デフォルトの名無しさん mailto:sage [2019/05/18(土) 22:03:40.11 ID:e0Mh58zT0.net] 今C言語教室でSQLとGUIやってる初心者なんだがCでDB弄る仕事ってあるのか JavaとかC#に取られそうだけど
568 名前:デフォルトの名無しさん mailto:sage [2019/05/18(土) 22:06:44.17 ID:8rj7/ih6a.net] sqliteは使うよ
569 名前: mailto:sage [2019/05/18(土) 22:07:47.63 ID:Pqc0+ZP00.net] >>549 ODBC 経由ならできますが…昔、ハンドルのキャストをとちったミスを、その意味不明の動きから突き止めるのは大変でした ODBC を直書きする情報はネットにほとんどありませんね
570 名前:デフォルトの名無しさん mailto:sage [2019/05/18(土) 22:19:48.67 ID:e0Mh58zT0.net] SQL使うのか慣れてないからあんまやりたくないんだよなあ 頑張るか
571 名前:デフォルトの名無しさん mailto:sage [2019/05/18(土) 22:37:47.44 ID:D3aJPSyb0.net] >>549 C++ならまだしもC言語でGUI? どこの教室だよ…
572 名前:デフォルトの名無しさん mailto:sage [2019/05/18(土) 22:53:12.41 ID:RWbfx4gX0.net] むかーし、Pro*C って使った事がある Cのソース内にSQLを埋め込み プリコンパイルする感じ 今は流行らないかもしれない
573 名前:デフォルトの名無しさん mailto:sage [2019/05/18(土) 22:58:45.45 ID:8rj7/ih6a.net] SQL使いこなしてる人ってすごいけど、正直ああはなりたくないという感じだよな。
574 名前:デフォルトの名無しさん mailto:sage [2019/05/18(土) 23:01:53.11 ID:RWbfx4gX0.net] 賢いファイルシステムとして利用すると超便利だぞ
575 名前:デフォルトの名無しさん mailto:sage [2019/05/18(土) 23:02:38.45 ID:RWbfx4gX0.net] 同じ事をCのロジックで組むとなると、アタマおかしくなるかも
576 名前:デフォルトの名無しさん mailto:sage [2019/05/18(土) 23:08:58.89 ID:Y/SMFmS40.net] 普通にアプリケーションの規模が大きくなるとsql使いたくなるだろ そういう場合はsqlite使う
577 名前:デフォルトの名無しさん mailto:sage [2019/05/18(土) 23:10:30.33 ID:RWbfx4gX0.net] 5ちゃんねる専用ブラウザもsqlite使っているそうですね? プログラムコードはCではないですが
578 名前:デフォルトの名無しさん mailto:sage [2019/05/19(日) 10:01:29.20 ID:EV8D9m9A0.net] IoTのデバイス開発やってるけど、C言語でDBのクライアントライブラリ使ってるよ
579 名前:デフォルトの名無しさん mailto:sage [2019/05/19(日) 16:30:57.06 ID:b6d7Y/CF0.net] リーナスさんはC++嫌いつーてるしな トレードマークのfuck口調で
580 名前:デフォルトの名無しさん [2019/05/19(日) 17:49:51.40 ID:V/GPYpFPa.net] この頃は間に何かライブラリ挟んでDB変わってもSQL文がほぼ同じままで行けるようなのが流行りなのでは?
581 名前:デフォルトの名無しさん mailto:sage [2019/05/19(日) 19:08:51.80 ID:SqCxdnVY0.net] 大学の情報科の人たちってどのレベルでC言語使えるんですかね? Cに限ったことではないですが大学4年でどの程度の練度が身につくのか
582 名前:デフォルトの名無しさん mailto:sage [2019/05/19(日) 19:17:39.10 ID:Ic55MIMX0.net] 人によるだろ そもそも好きなやつは大学入る前からやってるからな
583 名前:デフォルトの名無しさん mailto:sage [2019/05/19(日) 19:22:28.74 ID:qBoKnLB7a.net] >>563 別に使えなくてもいいよ
584 名前:デフォルトの名無しさん mailto:sage [2019/05/19(日) 21:05:03.54 ID:b6d7Y/CF0.net] >>565 おまえは情報科に来るなってだけ やる気ねえやつが畑違いな学部に入ること自体が害悪だ
585 名前:デフォルトの名無しさん mailto:sage [2019/05/19(日) 21:14:52.17 ID:Y3pJ4vrOa.net] >>566 お前が入ったの専門学校だろ?
586 名前:デフォルトの名無しさん mailto:sage [2019/05/19(日) 21:19:32.43 ID:b6d7Y/CF0.net] >>567 化学科だけど
587 名前:デフォルトの名無しさん mailto:sage [2019/05/19(日) 21:24:37.32 ID:RJz4Ejb00.net] 学校だとアルゴリズムやシステム設計手法は学べるだろうが 練度が上がるのはやはり仕事を始めてからだと思う
588 名前:デフォルトの名無しさん mailto:sage [2019/05/20(月) 12:44:26.31 ID:PSRVLRmYr.net] コンピュータサイカヨウの基本は一通りやるんじゃない? 情報処理試験の基本レベルくらいのもの 初心者は実務にはそのままは使えないけど、中級以上のエンジニアならこのあたりの知識があると差がついてくるね
589 名前:デフォルトの名無しさん [2019/05/20(月) 14:12:04.87 ID:0d3wAWyu0.net] 業務のほとんどは手作業の自動化だから差は出ない。そしてみんなリストラされる。
590 名前:デフォルトの名無しさん mailto:sage [2019/05/20(月) 18:18:34.53 ID:IJBxlZ980.net] 仕事で出会った、いろいろな人を思い出すに、ガチに使える人材って凄いからなあ。 学校や仕事を通じて学ぶ、みたいな次元じゃないんだよねえ。
591 名前:デフォルトの名無しさん mailto:sage [2019/05/20(月) 19:49:19.18 ID:Nbm/sW0Oa.net] おまえが使ってるんだったらおまえが偉いよ
592 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 00:42:18.33 ID:jVHVO/YL0.net] setbuf関数っていつなんの為に使うんや? バッファリングのためにあるのはわかるけどそもそもバッファリングがなんの為にあるのかわからん
593 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 00:44:38.83 ID:Hcv2vO/e0.net] ちまちま出力するより溜めてからまとめて出力した方が高速
594 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 01:29:10.75 ID:jVHVO/YL0.net] 1万文字くらいのテキストファイルを標準出力でやってみたけど変わった気しなかったぞ もしかして数百万文字レベルの巨大ファイルだと劇的に変わるんか?
595 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 01:34:19.46 ID:XM845/F70.net] 10kbって小さくね
596 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 01:46:59.05 ID:+xvLcOVEa.net] というか普通はバッファリングする関数ばっかりだが、自前でバッファ用意したいときもあるって話。 基本変わらんよたぶん。
597 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 01:47:43.41 ID:jVHVO/YL0.net] 確かに少ないな と思ったんで2,700kbでやってみたらむしろ4秒長くなったぞ
598 名前:デフォルトの名無しさん [2019/05/21(火) 02:21:13.21 ID:Y+BS98b80.net] >>574 FILE * 経由で出力する printf() 等は内部でバッファリングしていてバッファがいっぱいになったらまとめて出力する(出力先が端末の場合は行単位で出力する)。 そのバッファを自分で指定した領域を使わせるか、またはなしにできるのが setbuf()。更に自由に大きさやモードも指定したいなら setvbuf() を使う。 バッファリングに関して考慮しなくても良い入出力をする場合は read(), write() で行う。この場合は全くバッファリングされないので少ないバイト数の入出力が多いと遅くなる。 それと printf() のようなフォーマットを考慮した出力はないので必要なら自作する。
599 名前:デフォルトの名無しさん [2019/05/21(火) 02:26:07.71 ID:Y+BS98b80.net] >>576 open()してwrite()で1バイトづつ書くのとまとめて書くのとではバイト数によっては大幅に違いが出ると思う。環境依存ではあるが。
600 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 03:47:59.45 ID:jVHVO/YL0.net] >>581 大きなファイルの入出力を高速化したい時はsetbuf(fp,buf) バッファリング無しにしてバッファをフラッシュするタイミングを順番に逐一実行させたい時はsetbuf(fp,NULL) みたいな感じでええんかな?
601 名前:デフォルトの名無しさん [2019/05/21(火) 03:58:34.93 ID:Y+BS98b80.net] >>582 setvbuf()で自分でバッファの大きさ決めてしまった方が良いかも。
602 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 04:24:32.31 ID:zmxtmgNI0.net] 既出かもしれませんがconstがjavaのfinalと違うと知りました。どう違うのでしょうか?c初心者です
603 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 05:39:22.97 ID:SRv5ILQj0.net] >>576 OSによってはHDDへ遅延書き込みするから、結局バッファしてるのと大して変わらなかったりする。
604 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 06:44:08.98 ID:UPiNM42a0.net] >>584 20年前くらいの知識で、しかも完全に理解してるわけではないので、間違っていたらゴメンだけど。 変数について言えば、Java の final 変数は、値が未定義かどうか、という情報を内部的に持っていて。 もし、変数の値が未定義の場合は、1回だけ代入できたはず。例えば final int i; System.out.println("test"); i=4; System.out.println(i); i=5; System.out.println(i); の場合、1回目の代入(i=4)は許されるけど、2回目の代入(i=5)は怒られる。 それに対して、(C89の頃のだけど)Cのconst変数は・・・ const int i; printf("test\n"); i=0; printf("%d\n",i); 1回目の代入(i=0)であっても怒られる。 みたいな感じの違いはあったような。最近のCやJavaは知らないんだけどね。 あまり自信がないので、詳しい方のレスを待ちましょう。
605 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 06:49:56.40 ID:tdstqwiHM.net] >>585 そっちもあるけどAPI呼出し回数の削減もあるから
606 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 07:08:29.24 ID:6muVxYSDr.net] >>585 今どきのディスクならほぼ遅延書き込みしてるといってもいいね バッファには二段階あって、 @プロセスが持ってるバッファ AOSが持ってるバッファ flush関係のライブラリ関数やシステムコールは@をAに吐き出す Aを吐き出すにはLinuxだとfsyncもしくはfdatasync
607 名前:デフォルトの名無しさん [2019/05/21(火) 09:19:53.31 ID:BVi2WQ22a.net] >>584 Cはポインタの指す先が const という指定ができるがJavaは配列の要素まで final にする指定ができなかったと思う。 つまり配列やクラスそのもののインスタンスへの参照は final にてきる。しかし参照される中身までは final にできず書き換え可能(クラスの場合はpublicのクラス変数とか、外部から書き換えられるようになっていれ
608 名前:ば書き換えられる)。 ま、ちょっと試してみな。 [] [ここ壊れてます]
609 名前:デフォルトの名無しさん [2019/05/21(火) 10:05:33.15 ID:DLRGb2lZ0.net] LTOのオプション を使ってコンパイルすれば インライン関数をヘッ ダーに書かなくても 勝手にインライン化できるものはインラ イン化してくれる という理解で あってますか?
610 名前:デフォルトの名無しさん [2019/05/21(火) 10:21:18.62 ID:BVi2WQ22a.net] >>590 それコンパイラ依存なのでは?
611 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 12:55:43.68 ID:PZq+OQZ5p.net] >>589 これな Javaを最初に設計した奴はバカなんじゃないかと final の仕様を見たとき思ったな
612 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 15:23:18.72 ID:ZAINLMmO0.net] Linux では、HDD へ書き込むのは、デフォルトで、5秒に1回 USB メモリで、書き込み回数を減らしたい場合は、 15秒に1回とかに設定する人もいる
613 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 18:23:31.31 ID:6muVxYSDr.net] >>593 書き出し周期はファイルシステムに依存するよ 例えばext3かext4かで挙動は違う
614 名前:デフォルトの名無しさん [2019/05/21(火) 18:37:21.97 ID:G/IUf+gXp.net] C言語のfprintfを用いるときに、前行の改行を消す方法をご存知ないですか? エスケープシーケンスでバックスペースを試したのですか上手くいかなくて困っています。 状況としてはfor文を用いて改行を含んだ文字列を繰り返し出力させているんですが、最後の行だけ改行を無くし、続けて別の文を出力したいのです。 繰り返しの回数を変えて最後に改行なしの処理をいれればいいと思うのですが、簡単な方法があればと思い質問させていただきました。 よろしくお願いします。
615 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 18:40:11.67 ID:UdJL+OJH0.net] ストリームの撒き戻しは難しいんじゃないか? 表示装置なのかファイルなのかでも変わるだろうし…
616 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 18:54:48.20 ID:Hcv2vO/e0.net] ファイルポインタは巻き戻せる 標準出力ならエスケープシーケンスで右上に行けばいい
617 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 19:19:14.41 ID:IJ+i04U80.net] こんな感じでいいのか? #include <stdio.h> int main(void) { FILE* fp; fp = fopen("Test.txt","w"); fprintf(fp,"hoge\n"); fseek(fp,-1,SEEK_CUR); /* 改行2byteなら-2 */ fprintf(fp,"fuga\n"); fclose(fp); return 0; }
618 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 19:53:55.55 ID:UPiNM42a0.net] 質問者が知りたい情報とは違うので、スルー推奨かもですが。 もし自分が、同じことをやれ、と言われたら。 「改行を含んだ文字列」を、「改行」と「それ以外の文字列」の2つに分けて、別々に出力しようとするかなあ。 ループの回数を変える必要はなくて。イメージとしては for() ※行単位のループ { if(最初の行でなければ) fprintf で「改行」を出力 fprintf で「それ以外の文字列」を出力 } fprintf で「別の文を出力」
619 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 19:58:03.98 ID:kdkwqODuM.net] >>595 bool First = true; for( … ){ if(First){ First = false; } else { fprintf("¥n"); } fprintf( … ); }
620 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 19:58:35.62 ID:kdkwqODuM.net] あっ、被ったや
621 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 20:07:13.38 ID:IJ+i04U80.net] ファイルが標準出力等でvt100互換端末であれば。 #include <stdio.h> #include <string.h> int main(void) { int i; i=fprintf(stdout,"hogehogehogehoge\n"); if (0) fprintf(stdout,"\E[01Afuga%*c\n",i,' '); /* これか? */ else fprintf(stdout,"\E[01A\E[%02dCfuga\n",i-strlen("\n")); /* あるいはこれか? */ return 0; } cmdとかdos窓なら無理?
622 名前:デフォルトの名無しさん [2019/05/21(火) 20:22:57.69 ID:G/IUf+gXp.net] >>596-602 皆様回答ありがとうございます。 ファイルを扱っているので、fseekで戻す方法を試してみようと思います。
623 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 20:31:17.43 ID:JOJ6V6qzd.net] プログラムいじられるなら、改行出す方をどうにかした方が良さそうだが
624 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 20:31:52.25 ID:8vKfOnx40.net] ansi.sysを組み込めばVT100互換エスケープシーケンスが という昔話…と思ったが、ググったらvistaまであったんだな驚き Windows 10 Threshold 2(10.0.1058)ではコマンドプロンプトでANSI/VT100互換表示が可能に というスラドの記事も出た
625 名前:デフォルトの名無しさん [2019/05/21(火) 20:52:46.26 ID:BVi2WQ22a.net] 最後に改行出すんじゃなくて最初に改行出すようにすれば良いだけでは? 一番最初の行だけは最初に出さなければ良いだけ。 バッファリングされて出力されないのが嫌なら行末でfflush()する。
626 名前:デフォルトの名無しさん mailto:sage [2019/05/21(火) 21:47:10.75 ID:n1jvW3Ih0.net] >>606 >>599-600
627 名前:デフォルトの名無しさん [2019/05/21(火) 22:06:40.11 ID:Y+BS98b80.net] >>607 おお。既にあった。 さっきスマホで見てて気付かなかった。
628 名前:デフォルトの名無しさん [2019/05/21(火) 22:09:47.12 ID:JtLDtEYt0.net] >>604-607 603です。>>600 の意味をちゃんとわかってませんでしたが、>>606 の方のレスでわかりました。 >>600 の方が安全な気がするのでそちらを検討します。
629 名前:デフォルトの名無しさん [2019/05/24(金) 09:00:19.45 ID:h3dkW7YJ0.net] C言語はクラスが無い。 それは実際どれくらい問題になりますか? 昔C使ってたけど、本格的な抽象的設計をやってたわけじゃなくて、 最近Java使っててそういうのをやりだしたけど、 今思い返してみるとC言語はクラスや継承や多態性が無いから かなり厳しい言語なんじゃないかな、と思ったんです。 メジャーなカーネルがCで作られてるという事実に驚愕します。 クラス無しで大規模開発は不可能としか思えません。 それどころか、1アルゴリズムの実装でもクラスは有用だと思うんですが。 最近、NimとかRustのようなCを代替するかもしれない勢いのある言語があります。 そういう言語はかなり抽象的な設計が可能です。 そういうのと比べると、小さなデバイスドライバみたいなものはCでいいだろうけど、 大規模開発におけるCはかなり無理があるんじゃないかな?と そうでもないものですか?
630 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 09:04:22.51 ID:a6wIXg41a.net] まあファイルがクラスと同じだし。 継承はしづらいけど、そんなもん使ったらC++でもむしろ見通し悪くなるでしょ?
631 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 10:11:20.70 ID:M2ZwKTAn0.net] 最大のデバイスドライバがOSのカーネルなんじゃねえの そしてそれがC言語の限界
632 名前:デフォルトの名無しさん [2019/05/24(金) 10:43:06.36 ID:h3dkW7YJ0.net] Linuxカーネルは2100万行を超えているそうなので たぶん地球上でもっとも大規模な開発の1つです。
633 名前:デフォルトの名無しさん [2019/05/24(金) 11:21:47.36 ID:0dR+L/D60.net] 責任ある人は気がくるっているじゃない。
634 名前:デフォルトの名無しさん [2019/05/24(金) 12:25:59.56 ID:Cw+6mW4za.net] Cでもオブジェクト指向的に考えて作ることは可能。構造体へのポインタまたは情報を区別する番号などを渡してその中身に基づいて処理する関数作ればいいので。 ファイルアクセスとかは作りがそうなってるよね。
635 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 12:32:21.84 ID:M3xcEept0.net] クラスはコンストラクタ/デストラクタは活用したけど 継承で面倒になって、ちょっと便利な関数付き構造体としてしか設計したことない。
636 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 12:35:03.01 ID:C+5joBz9M.net] C言語ではオブジェクト指向も関数型プログラミングもできる。その下位レイヤーだから。 面倒臭いけど。
637 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 12:50:51.48 ID:8pSuDyEhM.net] >>613 デバドラとかが山ほどあるだけでコア部分はそんなにたいしたことないよ
638 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 12:53:08.72 ID:8pSuDyEhM.net] >>610 構造体に関数ポインタ入れたりすれば継承も多態も可能 書くのが面倒ってだけの話 モジュールを適切に分割すれば個々の開発部分はそんなにでかくならないし
639 名前:デフォルトの名無しさん [2019/05/24(金) 12:59:14.48 ID:Cw+6mW4za.net] まあしかしC++は複雑怪奇な状態になったような感じがするのでなんか別の言語でオブジェクト指向やった方が良いような気がする。
640 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 13:49:11.26 ID:FIKXvkBI0.net] Javaがとてもシンプルな言語に見えてくる
641 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 14:27:11.63 ID:YkjJvwKvd.net] linux kernelなんておもくそオブジェクト指向的な構造だろ
642 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 19:13:34.31 ID:E0qJKDus0.net] 関係ないけどOOPが流行り始めた頃に「WindowsのUIはオブジェクト指向だ」と言ってたやつを思い出した。
643 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 19:26:36.07 ID:omgaeJxY0.net] 目指していた方向はそうだったと思う
644 名前: mailto:sage [2019/05/24(金) 20:26:08.87 ID:0N6+tWvP0.net] >>615 >Cでもオブジェクト指向的に考えて作ること あくまでも「オブジェクト指向『的』」であることに注意すること C ではオブジェクト指向を実現できない(断言)
645 名前: mailto:sage [2019/05/24(金) 20:27:08.05 ID:0N6+tWvP0.net] >>617 >C言語ではオブジェクト指向も関数型プログラミングもできる C ではオブジェクト指向はできない(断言) 継承をCでどのように記述するのでしょうか?
646 名前: mailto:sage [2019/05/24(金) 20:27:59.68 ID:0N6+tWvP0.net] >>622 >linux kernelなんておもくそオブジェクト指向的な構造だろ あくまでも「オブジェクト指向『的』」であってオブジェクト指向そのものではありません(断言)
647 名前:デフォルトの名無しさん [2019/05/24(金) 20:41:47.14 ID:1FXcUtRQa.net] いやできなくはないよ。何せC++は元々はCへのコンバータだったしな。C++のソースを読んでC言語に変換して後のことはCコンパイラに任せてたんだよ。それが初期のC++。 もちろんCは言語そのものがオブジェクト指向をサポートしてないから人間がそれをやろうとするととても面倒な事になるけどな。
648 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 20:51:16.47 ID:E0qJKDus0.net] そんなん言い始めたらアセンブラでもオブジェクト指向プログラミングできることになっちゃう。 言語としてOOPがサポートされてなきゃ認められないでしょ。
649 名前: mailto:sage [2019/05/24(金) 21:00:32.57 ID:0N6+tWvP0.net] >>628 >C++のソースを読んでC言語に変換して後のことはCコンパイラに任せてたんだよ。それが初期のC++。 C++ から C へのトランスパイラが存在したからといって、C にてオブジェクト指向(的ではなくそのものずばり)なプログラミングができるわけではありません C++ のコンパイラが存在するからといって機械語が OO でないのと同じです、まず、 C++ https://ideone.com/vAp2Sj に対応する C のコードを示してください
650 名前: mailto:sage [2019/05/24(金) 21:01:09.07 ID:0N6+tWvP0.net] >>629 >言語としてOOPがサポートされてなきゃ認められないでしょ。 激しく同感いたします!
651 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 21:12:51.85 ID:ZwmHdTYl0.net] >>610 全く問題にならない classというキーワードがなくても コードを書く者の考え方次第でカプセル化や継承はできる FILE構造体がその例だ 多態性がないというのは、おまえさんの認識不足で 関数ポインタでそんなものはすぐに実現できる そういう認識不足があるからこそ メジャーなカーネルをなぜ書けたかが理解できないのだ
652 名前:デフォルトの名無しさん mailto:sage [2019/05/24(金) 21:15:04.81 ID:ZwmHdTYl0.net] >>630 対応するCのコードを示せるやつがいたら、おまえどうする? 朝8時の品川駅のホームでストリーキングでもするか?