C言語なら俺に聞け 151

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ cf8f-fy95)
垢版 |
2019/04/02(火) 11:23:37.62ID:SQXqRaAc0
!extend:checked:vvvvv:1000:512
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

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

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

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

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2019/05/16(木) 21:09:34.65ID:q0J7kB7g0
自己解決できたようでなにより
整数の配列を逆に整列させるなら正解だったんだけどねー
「文字列」操作の落とし穴ですな
2019/05/18(土) 22:03:40.11ID:e0Mh58zT0
今C言語教室でSQLとGUIやってる初心者なんだがCでDB弄る仕事ってあるのか
JavaとかC#に取られそうだけど
2019/05/18(土) 22:06:44.17ID:8rj7/ih6a
sqliteは使うよ
2019/05/18(土) 22:07:47.63ID:Pqc0+ZP00
>>549
ODBC 経由ならできますが…昔、ハンドルのキャストをとちったミスを、その意味不明の動きから突き止めるのは大変でした
ODBC を直書きする情報はネットにほとんどありませんね
2019/05/18(土) 22:19:48.67ID:e0Mh58zT0
SQL使うのか慣れてないからあんまやりたくないんだよなあ
頑張るか
2019/05/18(土) 22:37:47.44ID:D3aJPSyb0
>>549
C++ならまだしもC言語でGUI?
どこの教室だよ…
2019/05/18(土) 22:53:12.41ID:RWbfx4gX0
むかーし、Pro*C って使った事がある
Cのソース内にSQLを埋め込み
プリコンパイルする感じ
今は流行らないかもしれない
2019/05/18(土) 22:58:45.45ID:8rj7/ih6a
SQL使いこなしてる人ってすごいけど、正直ああはなりたくないという感じだよな。
2019/05/18(土) 23:01:53.11ID:RWbfx4gX0
賢いファイルシステムとして利用すると超便利だぞ
2019/05/18(土) 23:02:38.45ID:RWbfx4gX0
同じ事をCのロジックで組むとなると、アタマおかしくなるかも
2019/05/18(土) 23:08:58.89ID:Y/SMFmS40
普通にアプリケーションの規模が大きくなるとsql使いたくなるだろ

そういう場合はsqlite使う
2019/05/18(土) 23:10:30.33ID:RWbfx4gX0
5ちゃんねる専用ブラウザもsqlite使っているそうですね?
プログラムコードはCではないですが
2019/05/19(日) 10:01:29.20ID:EV8D9m9A0
IoTのデバイス開発やってるけど、C言語でDBのクライアントライブラリ使ってるよ
2019/05/19(日) 16:30:57.06ID:b6d7Y/CF0
リーナスさんはC++嫌いつーてるしな
トレードマークのfuck口調で
562デフォルトの名無しさん (アウアウウー Sa83-RNyv)
垢版 |
2019/05/19(日) 17:49:51.40ID:V/GPYpFPa
この頃は間に何かライブラリ挟んでDB変わってもSQL文がほぼ同じままで行けるようなのが流行りなのでは?
2019/05/19(日) 19:08:51.80ID:SqCxdnVY0
大学の情報科の人たちってどのレベルでC言語使えるんですかね?
Cに限ったことではないですが大学4年でどの程度の練度が身につくのか
2019/05/19(日) 19:17:39.10ID:Ic55MIMX0
人によるだろ
そもそも好きなやつは大学入る前からやってるからな
2019/05/19(日) 19:22:28.74ID:qBoKnLB7a
>>563
別に使えなくてもいいよ
2019/05/19(日) 21:05:03.54ID:b6d7Y/CF0
>>565
おまえは情報科に来るなってだけ
やる気ねえやつが畑違いな学部に入ること自体が害悪だ
2019/05/19(日) 21:14:52.17ID:Y3pJ4vrOa
>>566
お前が入ったの専門学校だろ?
2019/05/19(日) 21:19:32.43ID:b6d7Y/CF0
>>567
化学科だけど
2019/05/19(日) 21:24:37.32ID:RJz4Ejb00
学校だとアルゴリズムやシステム設計手法は学べるだろうが
練度が上がるのはやはり仕事を始めてからだと思う
2019/05/20(月) 12:44:26.31ID:PSRVLRmYr
コンピュータサイカヨウの基本は一通りやるんじゃない?
情報処理試験の基本レベルくらいのもの
初心者は実務にはそのままは使えないけど、中級以上のエンジニアならこのあたりの知識があると差がついてくるね
571デフォルトの名無しさん (ワッチョイ 328c-TfzP)
垢版 |
2019/05/20(月) 14:12:04.87ID:0d3wAWyu0
業務のほとんどは手作業の自動化だから差は出ない。そしてみんなリストラされる。
2019/05/20(月) 18:18:34.53ID:IJBxlZ980
仕事で出会った、いろいろな人を思い出すに、ガチに使える人材って凄いからなあ。
学校や仕事を通じて学ぶ、みたいな次元じゃないんだよねえ。
2019/05/20(月) 19:49:19.18ID:Nbm/sW0Oa
おまえが使ってるんだったらおまえが偉いよ
2019/05/21(火) 00:42:18.33ID:jVHVO/YL0
setbuf関数っていつなんの為に使うんや?
バッファリングのためにあるのはわかるけどそもそもバッファリングがなんの為にあるのかわからん
2019/05/21(火) 00:44:38.83ID:Hcv2vO/e0
ちまちま出力するより溜めてからまとめて出力した方が高速
2019/05/21(火) 01:29:10.75ID:jVHVO/YL0
1万文字くらいのテキストファイルを標準出力でやってみたけど変わった気しなかったぞ
もしかして数百万文字レベルの巨大ファイルだと劇的に変わるんか?
2019/05/21(火) 01:34:19.46ID:XM845/F70
10kbって小さくね
2019/05/21(火) 01:46:59.05ID:+xvLcOVEa
というか普通はバッファリングする関数ばっかりだが、自前でバッファ用意したいときもあるって話。
基本変わらんよたぶん。
2019/05/21(火) 01:47:43.41ID:jVHVO/YL0
確かに少ないな
と思ったんで2,700kbでやってみたらむしろ4秒長くなったぞ
580デフォルトの名無しさん (ワッチョイ 9602-XAPB)
垢版 |
2019/05/21(火) 02:21:13.21ID:Y+BS98b80
>>574
FILE * 経由で出力する printf() 等は内部でバッファリングしていてバッファがいっぱいになったらまとめて出力する(出力先が端末の場合は行単位で出力する)。
そのバッファを自分で指定した領域を使わせるか、またはなしにできるのが setbuf()。更に自由に大きさやモードも指定したいなら setvbuf() を使う。

バッファリングに関して考慮しなくても良い入出力をする場合は read(), write() で行う。この場合は全くバッファリングされないので少ないバイト数の入出力が多いと遅くなる。
それと printf() のようなフォーマットを考慮した出力はないので必要なら自作する。
581デフォルトの名無しさん (ワッチョイ 9602-XAPB)
垢版 |
2019/05/21(火) 02:26:07.71ID:Y+BS98b80
>>576
open()してwrite()で1バイトづつ書くのとまとめて書くのとではバイト数によっては大幅に違いが出ると思う。環境依存ではあるが。
2019/05/21(火) 03:47:59.45ID:jVHVO/YL0
>>581
大きなファイルの入出力を高速化したい時はsetbuf(fp,buf)
バッファリング無しにしてバッファをフラッシュするタイミングを順番に逐一実行させたい時はsetbuf(fp,NULL)
みたいな感じでええんかな?
583デフォルトの名無しさん (ワッチョイ 9602-XAPB)
垢版 |
2019/05/21(火) 03:58:34.93ID:Y+BS98b80
>>582
setvbuf()で自分でバッファの大きさ決めてしまった方が良いかも。
2019/05/21(火) 04:24:32.31ID:zmxtmgNI0
既出かもしれませんがconstがjavaのfinalと違うと知りました。どう違うのでしょうか?c初心者です
2019/05/21(火) 05:39:22.97ID:SRv5ILQj0
>>576
OSによってはHDDへ遅延書き込みするから、結局バッファしてるのと大して変わらなかったりする。
2019/05/21(火) 06:44:08.98ID:UPiNM42a0
>>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は知らないんだけどね。
あまり自信がないので、詳しい方のレスを待ちましょう。
2019/05/21(火) 06:49:56.40ID:tdstqwiHM
>>585
そっちもあるけどAPI呼出し回数の削減もあるから
2019/05/21(火) 07:08:29.24ID:6muVxYSDr
>>585
今どきのディスクならほぼ遅延書き込みしてるといってもいいね
バッファには二段階あって、
@プロセスが持ってるバッファ
AOSが持ってるバッファ

flush関係のライブラリ関数やシステムコールは@をAに吐き出す
Aを吐き出すにはLinuxだとfsyncもしくはfdatasync
589デフォルトの名無しさん (アウアウウー Sa83-RNyv)
垢版 |
2019/05/21(火) 09:19:53.31ID:BVi2WQ22a
>>584
Cはポインタの指す先が const という指定ができるがJavaは配列の要素まで final にする指定ができなかったと思う。
つまり配列やクラスそのもののインスタンスへの参照は final にてきる。しかし参照される中身までは final にできず書き換え可能(クラスの場合はpublicのクラス変数とか、外部から書き換えられるようになっていれば書き換えられる)。

ま、ちょっと試してみな。
590デフォルトの名無しさん (ワッチョイ f6d2-cXFR)
垢版 |
2019/05/21(火) 10:05:33.15ID:DLRGb2lZ0
LTOのオプション
を使ってコンパイルすれば
インライン関数をヘッ
ダーに書かなくても
勝手にインライン化できるものはインラ
イン化してくれる
という理解で
あってますか?
591デフォルトの名無しさん (アウアウウー Sa83-RNyv)
垢版 |
2019/05/21(火) 10:21:18.62ID:BVi2WQ22a
>>590
それコンパイラ依存なのでは?
2019/05/21(火) 12:55:43.68ID:PZq+OQZ5p
>>589
これな
Javaを最初に設計した奴はバカなんじゃないかと final の仕様を見たとき思ったな
2019/05/21(火) 15:23:18.72ID:ZAINLMmO0
Linux では、HDD へ書き込むのは、デフォルトで、5秒に1回

USB メモリで、書き込み回数を減らしたい場合は、
15秒に1回とかに設定する人もいる
2019/05/21(火) 18:23:31.31ID:6muVxYSDr
>>593
書き出し周期はファイルシステムに依存するよ
例えばext3かext4かで挙動は違う
595デフォルトの名無しさん (ササクッテロル Sp88-Qul6)
垢版 |
2019/05/21(火) 18:37:21.97ID:G/IUf+gXp
C言語のfprintfを用いるときに、前行の改行を消す方法をご存知ないですか?
エスケープシーケンスでバックスペースを試したのですか上手くいかなくて困っています。

状況としてはfor文を用いて改行を含んだ文字列を繰り返し出力させているんですが、最後の行だけ改行を無くし、続けて別の文を出力したいのです。
繰り返しの回数を変えて最後に改行なしの処理をいれればいいと思うのですが、簡単な方法があればと思い質問させていただきました。
よろしくお願いします。
2019/05/21(火) 18:40:11.67ID:UdJL+OJH0
ストリームの撒き戻しは難しいんじゃないか? 表示装置なのかファイルなのかでも変わるだろうし…
2019/05/21(火) 18:54:48.20ID:Hcv2vO/e0
ファイルポインタは巻き戻せる
標準出力ならエスケープシーケンスで右上に行けばいい
2019/05/21(火) 19:19:14.41ID:IJ+i04U80
こんな感じでいいのか?

#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;
}
2019/05/21(火) 19:53:55.55ID:UPiNM42a0
質問者が知りたい情報とは違うので、スルー推奨かもですが。

もし自分が、同じことをやれ、と言われたら。
「改行を含んだ文字列」を、「改行」と「それ以外の文字列」の2つに分けて、別々に出力しようとするかなあ。
ループの回数を変える必要はなくて。イメージとしては

for() ※行単位のループ
{
if(最初の行でなければ) fprintf で「改行」を出力

fprintf で「それ以外の文字列」を出力
}
fprintf で「別の文を出力」
2019/05/21(火) 19:58:03.98ID:kdkwqODuM
>>595
bool First = true;
for( … ){
if(First){
First = false;
} else {
fprintf("¥n");
}
fprintf( … );
}
2019/05/21(火) 19:58:35.62ID:kdkwqODuM
あっ、被ったや
2019/05/21(火) 20:07:13.38ID:IJ+i04U80
ファイルが標準出力等で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窓なら無理?
603デフォルトの名無しさん (ササクッテロル Sp88-Qul6)
垢版 |
2019/05/21(火) 20:22:57.69ID:G/IUf+gXp
>>596-602
皆様回答ありがとうございます。
ファイルを扱っているので、fseekで戻す方法を試してみようと思います。
2019/05/21(火) 20:31:17.43ID:JOJ6V6qzd
プログラムいじられるなら、改行出す方をどうにかした方が良さそうだが
2019/05/21(火) 20:31:52.25ID:8vKfOnx40
ansi.sysを組み込めばVT100互換エスケープシーケンスが
という昔話…と思ったが、ググったらvistaまであったんだな驚き
Windows 10 Threshold 2(10.0.1058)ではコマンドプロンプトでANSI/VT100互換表示が可能に
というスラドの記事も出た
606デフォルトの名無しさん (アウアウウー Sa83-RNyv)
垢版 |
2019/05/21(火) 20:52:46.26ID:BVi2WQ22a
最後に改行出すんじゃなくて最初に改行出すようにすれば良いだけでは?
一番最初の行だけは最初に出さなければ良いだけ。
バッファリングされて出力されないのが嫌なら行末でfflush()する。
2019/05/21(火) 21:47:10.75ID:n1jvW3Ih0
>>606
>>599-600
608デフォルトの名無しさん (ワッチョイ 9602-XAPB)
垢版 |
2019/05/21(火) 22:06:40.11ID:Y+BS98b80
>>607
おお。既にあった。
さっきスマホで見てて気付かなかった。
609デフォルトの名無しさん (ワッチョイ 1e01-Qul6)
垢版 |
2019/05/21(火) 22:09:47.12ID:JtLDtEYt0
>>604-607
603です。>>600の意味をちゃんとわかってませんでしたが、>>606の方のレスでわかりました。
>>600の方が安全な気がするのでそちらを検討します。
610デフォルトの名無しさん (ワッチョイ dfb9-9b2Z)
垢版 |
2019/05/24(金) 09:00:19.45ID:h3dkW7YJ0
C言語はクラスが無い。
それは実際どれくらい問題になりますか?

昔C使ってたけど、本格的な抽象的設計をやってたわけじゃなくて、
最近Java使っててそういうのをやりだしたけど、
今思い返してみるとC言語はクラスや継承や多態性が無いから
かなり厳しい言語なんじゃないかな、と思ったんです。

メジャーなカーネルがCで作られてるという事実に驚愕します。
クラス無しで大規模開発は不可能としか思えません。
それどころか、1アルゴリズムの実装でもクラスは有用だと思うんですが。

最近、NimとかRustのようなCを代替するかもしれない勢いのある言語があります。
そういう言語はかなり抽象的な設計が可能です。
そういうのと比べると、小さなデバイスドライバみたいなものはCでいいだろうけど、
大規模開発におけるCはかなり無理があるんじゃないかな?と

そうでもないものですか?
2019/05/24(金) 09:04:22.51ID:a6wIXg41a
まあファイルがクラスと同じだし。
継承はしづらいけど、そんなもん使ったらC++でもむしろ見通し悪くなるでしょ?
2019/05/24(金) 10:11:20.70ID:M2ZwKTAn0
最大のデバイスドライバがOSのカーネルなんじゃねえの
そしてそれがC言語の限界
613デフォルトの名無しさん (ワッチョイ dfb9-9b2Z)
垢版 |
2019/05/24(金) 10:43:06.36ID:h3dkW7YJ0
Linuxカーネルは2100万行を超えているそうなので
たぶん地球上でもっとも大規模な開発の1つです。
614デフォルトの名無しさん (ワッチョイ bf8c-GX6Y)
垢版 |
2019/05/24(金) 11:21:47.36ID:0dR+L/D60
責任ある人は気がくるっているじゃない。
615デフォルトの名無しさん (アウアウウー Saab-EYzY)
垢版 |
2019/05/24(金) 12:25:59.56ID:Cw+6mW4za
Cでもオブジェクト指向的に考えて作ることは可能。構造体へのポインタまたは情報を区別する番号などを渡してその中身に基づいて処理する関数作ればいいので。
ファイルアクセスとかは作りがそうなってるよね。
2019/05/24(金) 12:32:21.84ID:M3xcEept0
クラスはコンストラクタ/デストラクタは活用したけど
継承で面倒になって、ちょっと便利な関数付き構造体としてしか設計したことない。
2019/05/24(金) 12:35:03.01ID:C+5joBz9M
C言語ではオブジェクト指向も関数型プログラミングもできる。その下位レイヤーだから。
面倒臭いけど。
2019/05/24(金) 12:50:51.48ID:8pSuDyEhM
>>613
デバドラとかが山ほどあるだけでコア部分はそんなにたいしたことないよ
2019/05/24(金) 12:53:08.72ID:8pSuDyEhM
>>610
構造体に関数ポインタ入れたりすれば継承も多態も可能
書くのが面倒ってだけの話
モジュールを適切に分割すれば個々の開発部分はそんなにでかくならないし
620デフォルトの名無しさん (アウアウウー Saab-EYzY)
垢版 |
2019/05/24(金) 12:59:14.48ID:Cw+6mW4za
まあしかしC++は複雑怪奇な状態になったような感じがするのでなんか別の言語でオブジェクト指向やった方が良いような気がする。
2019/05/24(金) 13:49:11.26ID:FIKXvkBI0
Javaがとてもシンプルな言語に見えてくる
2019/05/24(金) 14:27:11.63ID:YkjJvwKvd
linux kernelなんておもくそオブジェクト指向的な構造だろ
2019/05/24(金) 19:13:34.31ID:E0qJKDus0
関係ないけどOOPが流行り始めた頃に「WindowsのUIはオブジェクト指向だ」と言ってたやつを思い出した。
2019/05/24(金) 19:26:36.07ID:omgaeJxY0
目指していた方向はそうだったと思う
2019/05/24(金) 20:26:08.87ID:0N6+tWvP0
>>615
>Cでもオブジェクト指向的に考えて作ること
あくまでも「オブジェクト指向『的』」であることに注意すること
C ではオブジェクト指向を実現できない(断言)
2019/05/24(金) 20:27:08.05ID:0N6+tWvP0
>>617
>C言語ではオブジェクト指向も関数型プログラミングもできる

C ではオブジェクト指向はできない(断言)
継承をCでどのように記述するのでしょうか?
2019/05/24(金) 20:27:59.68ID:0N6+tWvP0
>>622
>linux kernelなんておもくそオブジェクト指向的な構造だろ

あくまでも「オブジェクト指向『的』」であってオブジェクト指向そのものではありません(断言)
628デフォルトの名無しさん (アウアウウー Saab-EYzY)
垢版 |
2019/05/24(金) 20:41:47.14ID:1FXcUtRQa
いやできなくはないよ。何せC++は元々はCへのコンバータだったしな。C++のソースを読んでC言語に変換して後のことはCコンパイラに任せてたんだよ。それが初期のC++。

もちろんCは言語そのものがオブジェクト指向をサポートしてないから人間がそれをやろうとするととても面倒な事になるけどな。
2019/05/24(金) 20:51:16.47ID:E0qJKDus0
そんなん言い始めたらアセンブラでもオブジェクト指向プログラミングできることになっちゃう。
言語としてOOPがサポートされてなきゃ認められないでしょ。
2019/05/24(金) 21:00:32.57ID:0N6+tWvP0
>>628
>C++のソースを読んでC言語に変換して後のことはCコンパイラに任せてたんだよ。それが初期のC++。
C++ から C へのトランスパイラが存在したからといって、C にてオブジェクト指向(的ではなくそのものずばり)なプログラミングができるわけではありません
C++ のコンパイラが存在するからといって機械語が OO でないのと同じです、まず、

C++ https://ideone.com/vAp2Sj

に対応する C のコードを示してください
2019/05/24(金) 21:01:09.07ID:0N6+tWvP0
>>629
>言語としてOOPがサポートされてなきゃ認められないでしょ。

激しく同感いたします!
2019/05/24(金) 21:12:51.85ID:ZwmHdTYl0
>>610
全く問題にならない
classというキーワードがなくても
コードを書く者の考え方次第でカプセル化や継承はできる
FILE構造体がその例だ
多態性がないというのは、おまえさんの認識不足で
関数ポインタでそんなものはすぐに実現できる
そういう認識不足があるからこそ
メジャーなカーネルをなぜ書けたかが理解できないのだ
2019/05/24(金) 21:15:04.81ID:ZwmHdTYl0
>>630
対応するCのコードを示せるやつがいたら、おまえどうする?
朝8時の品川駅のホームでストリーキングでもするか?
2019/05/24(金) 21:24:37.67ID:QPLeHwR8a
まあ継承なんてオブジェクト指向と関係ないよ
2019/05/24(金) 21:45:54.65ID:0N6+tWvP0
>>632
>classというキーワードがなくても
>コードを書く者の考え方次第でカプセル化や継承はできる

C ではカプセル化はできても継承は不可能ですよ
2019/05/24(金) 21:46:59.73ID:0N6+tWvP0
>>633
>対応するCのコードを示せるやつがいたら、おまえどうする?
あなたができないことをそんなにアピールしなくてもいいと思いますよ
2019/05/24(金) 21:56:28.68ID:wwZ4gkZH0
仮想関数テーブルの実装方法について語るスレはここですか?
2019/05/24(金) 22:01:07.63ID:ZwmHdTYl0
>>635
いーや、できる
おまえさん禿本やリップマンくらい読んだか?

裸踊りを賭す自信もねえやつがいきがってんなよ
2019/05/24(金) 22:02:14.93ID:ZwmHdTYl0
>>637
いいぜ
おら、来いや
2019/05/24(金) 22:06:22.36ID:/xfbOr910
>>630
https://ideone.com/omqT5r
2019/05/24(金) 22:17:20.89ID:0N6+tWvP0
>>638
ではストロヴストルップやリップマンはどういっているのか、ここに引用していただけますか?
あらかじめいっておきますが、引用はできない、なぜならば、そんな内容をストロヴストルップもリップマンも書いていないのだから
2019/05/24(金) 22:18:09.05ID:TMKOHW7N0
>>625-627, >>629
オブジェクト指向と言う概念と実装の区別がついてないんだな
低能なプログラマーによくある行動w

例えばLinuxで言えばリダイレクトなんて言うのはもろオブジェクト指向な機能だよね
Applicatlon > xxx
ってやればxxxがファイルならApplicatlon が出力したデータをファイルに書き込むし、xxxが端末なら端末にデータを表示するし、xxxがプリンタならデータを印刷する
Applicatlonは出力先が何であるかを気にする必要はない
もちろんLinuxはC言語でこれを実現してるしより面倒だろうけど当然アセンブラで実装することも可能
2019/05/24(金) 22:21:05.39ID:0NhXAFL60
概念ならFILE構造体とそれの操作関数群
2019/05/24(金) 22:21:27.40ID:0N6+tWvP0
>>640
>typedef struct C
>{
> A ThisA;
> B ThisB;
> int c;
>} C;

これは委譲であって継承ではありません。私は >>626 で「Cでは継承はできない」と主張しており、これを否定するために委譲は使えません
2019/05/24(金) 22:23:27.35ID:0N6+tWvP0
>>642
それは smalltalk 的な OO であって C++ の OO の概念とは多少食い違うと思います
2019/05/24(金) 22:24:05.41ID:0NhXAFL60
コンストラクタとデストラクタの機構だけは欲しいと思ったことがしばしば
2019/05/24(金) 22:24:31.62ID:0N6+tWvP0
>>643
FILE は OO 的ではありますが、OO そのものではありません
OO というからには委譲とは別の継承を表現できねばなりませんが、
C では継承を表現できません
2019/05/24(金) 22:41:32.12ID:K6buSCwsM
glibとか大昔からあるじゃん…
glibがooでないならooの定義をまず示せ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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