!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
C言語なら俺に聞け 151
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ cf8f-fy95)
2019/04/02(火) 11:23:37.62ID:SQXqRaAc0576デフォルトの名無しさん (ワッチョイ ae2c-uMtI)
2019/05/21(火) 01:29:10.75ID:jVHVO/YL0 1万文字くらいのテキストファイルを標準出力でやってみたけど変わった気しなかったぞ
もしかして数百万文字レベルの巨大ファイルだと劇的に変わるんか?
もしかして数百万文字レベルの巨大ファイルだと劇的に変わるんか?
577デフォルトの名無しさん (ワッチョイ 73c3-AU7T)
2019/05/21(火) 01:34:19.46ID:XM845/F70 10kbって小さくね
578デフォルトの名無しさん (アウアウカー Sa0a-ZkGz)
2019/05/21(火) 01:46:59.05ID:+xvLcOVEa というか普通はバッファリングする関数ばっかりだが、自前でバッファ用意したいときもあるって話。
基本変わらんよたぶん。
基本変わらんよたぶん。
579デフォルトの名無しさん (ワッチョイ ae2c-uMtI)
2019/05/21(火) 01:47:43.41ID:jVHVO/YL0 確かに少ないな
と思ったんで2,700kbでやってみたらむしろ4秒長くなったぞ
と思ったんで2,700kbでやってみたらむしろ4秒長くなったぞ
580デフォルトの名無しさん (ワッチョイ 9602-XAPB)
2019/05/21(火) 02:21:13.21ID:Y+BS98b80 >>574
FILE * 経由で出力する printf() 等は内部でバッファリングしていてバッファがいっぱいになったらまとめて出力する(出力先が端末の場合は行単位で出力する)。
そのバッファを自分で指定した領域を使わせるか、またはなしにできるのが setbuf()。更に自由に大きさやモードも指定したいなら setvbuf() を使う。
バッファリングに関して考慮しなくても良い入出力をする場合は read(), write() で行う。この場合は全くバッファリングされないので少ないバイト数の入出力が多いと遅くなる。
それと printf() のようなフォーマットを考慮した出力はないので必要なら自作する。
FILE * 経由で出力する printf() 等は内部でバッファリングしていてバッファがいっぱいになったらまとめて出力する(出力先が端末の場合は行単位で出力する)。
そのバッファを自分で指定した領域を使わせるか、またはなしにできるのが setbuf()。更に自由に大きさやモードも指定したいなら setvbuf() を使う。
バッファリングに関して考慮しなくても良い入出力をする場合は read(), write() で行う。この場合は全くバッファリングされないので少ないバイト数の入出力が多いと遅くなる。
それと printf() のようなフォーマットを考慮した出力はないので必要なら自作する。
581デフォルトの名無しさん (ワッチョイ 9602-XAPB)
2019/05/21(火) 02:26:07.71ID:Y+BS98b80 >>576
open()してwrite()で1バイトづつ書くのとまとめて書くのとではバイト数によっては大幅に違いが出ると思う。環境依存ではあるが。
open()してwrite()で1バイトづつ書くのとまとめて書くのとではバイト数によっては大幅に違いが出ると思う。環境依存ではあるが。
582デフォルトの名無しさん (ワッチョイ ae2c-uMtI)
2019/05/21(火) 03:47:59.45ID:jVHVO/YL0 >>581
大きなファイルの入出力を高速化したい時はsetbuf(fp,buf)
バッファリング無しにしてバッファをフラッシュするタイミングを順番に逐一実行させたい時はsetbuf(fp,NULL)
みたいな感じでええんかな?
大きなファイルの入出力を高速化したい時はsetbuf(fp,buf)
バッファリング無しにしてバッファをフラッシュするタイミングを順番に逐一実行させたい時はsetbuf(fp,NULL)
みたいな感じでええんかな?
583デフォルトの名無しさん (ワッチョイ 9602-XAPB)
2019/05/21(火) 03:58:34.93ID:Y+BS98b80 >>582
setvbuf()で自分でバッファの大きさ決めてしまった方が良いかも。
setvbuf()で自分でバッファの大きさ決めてしまった方が良いかも。
584デフォルトの名無しさん (ワッチョイ a601-uGxO)
2019/05/21(火) 04:24:32.31ID:zmxtmgNI0 既出かもしれませんがconstがjavaのfinalと違うと知りました。どう違うのでしょうか?c初心者です
585デフォルトの名無しさん (ワッチョイ 4101-MvwS)
2019/05/21(火) 05:39:22.97ID:SRv5ILQj0 >>576
OSによってはHDDへ遅延書き込みするから、結局バッファしてるのと大して変わらなかったりする。
OSによってはHDDへ遅延書き込みするから、結局バッファしてるのと大して変わらなかったりする。
586デフォルトの名無しさん (ワッチョイ 462d-EL+e)
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は知らないんだけどね。
あまり自信がないので、詳しい方のレスを待ちましょう。
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は知らないんだけどね。
あまり自信がないので、詳しい方のレスを待ちましょう。
587デフォルトの名無しさん (ドコグロ MM02-A+mh)
2019/05/21(火) 06:49:56.40ID:tdstqwiHM >>585
そっちもあるけどAPI呼出し回数の削減もあるから
そっちもあるけどAPI呼出し回数の削減もあるから
588デフォルトの名無しさん (オッペケ Sr88-2aw6)
2019/05/21(火) 07:08:29.24ID:6muVxYSDr >>585
今どきのディスクならほぼ遅延書き込みしてるといってもいいね
バッファには二段階あって、
@プロセスが持ってるバッファ
AOSが持ってるバッファ
flush関係のライブラリ関数やシステムコールは@をAに吐き出す
Aを吐き出すにはLinuxだとfsyncもしくはfdatasync
今どきのディスクならほぼ遅延書き込みしてるといってもいいね
バッファには二段階あって、
@プロセスが持ってるバッファ
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のクラス変数とか、外部から書き換えられるようになっていれば書き換えられる)。
ま、ちょっと試してみな。
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
それコンパイラ依存なのでは?
それコンパイラ依存なのでは?
592デフォルトの名無しさん (ササクッテロル Sp88-uMtI)
2019/05/21(火) 12:55:43.68ID:PZq+OQZ5p593デフォルトの名無しさん (ワッチョイ ae2c-rckI)
2019/05/21(火) 15:23:18.72ID:ZAINLMmO0 Linux では、HDD へ書き込むのは、デフォルトで、5秒に1回
USB メモリで、書き込み回数を減らしたい場合は、
15秒に1回とかに設定する人もいる
USB メモリで、書き込み回数を減らしたい場合は、
15秒に1回とかに設定する人もいる
594デフォルトの名無しさん (オッペケ Sr88-2aw6)
2019/05/21(火) 18:23:31.31ID:6muVxYSDr595デフォルトの名無しさん (ササクッテロル Sp88-Qul6)
2019/05/21(火) 18:37:21.97ID:G/IUf+gXp C言語のfprintfを用いるときに、前行の改行を消す方法をご存知ないですか?
エスケープシーケンスでバックスペースを試したのですか上手くいかなくて困っています。
状況としてはfor文を用いて改行を含んだ文字列を繰り返し出力させているんですが、最後の行だけ改行を無くし、続けて別の文を出力したいのです。
繰り返しの回数を変えて最後に改行なしの処理をいれればいいと思うのですが、簡単な方法があればと思い質問させていただきました。
よろしくお願いします。
エスケープシーケンスでバックスペースを試したのですか上手くいかなくて困っています。
状況としてはfor文を用いて改行を含んだ文字列を繰り返し出力させているんですが、最後の行だけ改行を無くし、続けて別の文を出力したいのです。
繰り返しの回数を変えて最後に改行なしの処理をいれればいいと思うのですが、簡単な方法があればと思い質問させていただきました。
よろしくお願いします。
596デフォルトの名無しさん (ワッチョイ 3f01-pg4x)
2019/05/21(火) 18:40:11.67ID:UdJL+OJH0 ストリームの撒き戻しは難しいんじゃないか? 表示装置なのかファイルなのかでも変わるだろうし…
597デフォルトの名無しさん (ワッチョイ 1c79-N32O)
2019/05/21(火) 18:54:48.20ID:Hcv2vO/e0 ファイルポインタは巻き戻せる
標準出力ならエスケープシーケンスで右上に行けばいい
標準出力ならエスケープシーケンスで右上に行けばいい
598デフォルトの名無しさん (ワッチョイ ee02-8NB0)
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;
}
#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;
}
599デフォルトの名無しさん (ワッチョイ 462d-EL+e)
2019/05/21(火) 19:53:55.55ID:UPiNM42a0 質問者が知りたい情報とは違うので、スルー推奨かもですが。
もし自分が、同じことをやれ、と言われたら。
「改行を含んだ文字列」を、「改行」と「それ以外の文字列」の2つに分けて、別々に出力しようとするかなあ。
ループの回数を変える必要はなくて。イメージとしては
for() ※行単位のループ
{
if(最初の行でなければ) fprintf で「改行」を出力
fprintf で「それ以外の文字列」を出力
}
fprintf で「別の文を出力」
もし自分が、同じことをやれ、と言われたら。
「改行を含んだ文字列」を、「改行」と「それ以外の文字列」の2つに分けて、別々に出力しようとするかなあ。
ループの回数を変える必要はなくて。イメージとしては
for() ※行単位のループ
{
if(最初の行でなければ) fprintf で「改行」を出力
fprintf で「それ以外の文字列」を出力
}
fprintf で「別の文を出力」
600デフォルトの名無しさん (ドコグロ MM02-A+mh)
2019/05/21(火) 19:58:03.98ID:kdkwqODuM >>595
bool First = true;
for( … ){
if(First){
First = false;
} else {
fprintf("¥n");
}
fprintf( … );
}
bool First = true;
for( … ){
if(First){
First = false;
} else {
fprintf("¥n");
}
fprintf( … );
}
601デフォルトの名無しさん (ドコグロ MM02-A+mh)
2019/05/21(火) 19:58:35.62ID:kdkwqODuM あっ、被ったや
602デフォルトの名無しさん (ワッチョイ ee02-8NB0)
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窓なら無理?
#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+gXp604デフォルトの名無しさん (スププ Sd94-AU7T)
2019/05/21(火) 20:31:17.43ID:JOJ6V6qzd プログラムいじられるなら、改行出す方をどうにかした方が良さそうだが
605デフォルトの名無しさん (ワッチョイ aaf9-8NB0)
2019/05/21(火) 20:31:52.25ID:8vKfOnx40 ansi.sysを組み込めばVT100互換エスケープシーケンスが
という昔話…と思ったが、ググったらvistaまであったんだな驚き
Windows 10 Threshold 2(10.0.1058)ではコマンドプロンプトでANSI/VT100互換表示が可能に
というスラドの記事も出た
という昔話…と思ったが、ググったらvistaまであったんだな驚き
Windows 10 Threshold 2(10.0.1058)ではコマンドプロンプトでANSI/VT100互換表示が可能に
というスラドの記事も出た
606デフォルトの名無しさん (アウアウウー Sa83-RNyv)
2019/05/21(火) 20:52:46.26ID:BVi2WQ22a 最後に改行出すんじゃなくて最初に改行出すようにすれば良いだけでは?
一番最初の行だけは最初に出さなければ良いだけ。
バッファリングされて出力されないのが嫌なら行末でfflush()する。
一番最初の行だけは最初に出さなければ良いだけ。
バッファリングされて出力されないのが嫌なら行末でfflush()する。
607デフォルトの名無しさん (ワッチョイ aa01-A+mh)
2019/05/21(火) 21:47:10.75ID:n1jvW3Ih0608デフォルトの名無しさん (ワッチョイ 9602-XAPB)
2019/05/21(火) 22:06:40.11ID:Y+BS98b80609デフォルトの名無しさん (ワッチョイ 1e01-Qul6)
2019/05/21(火) 22:09:47.12ID:JtLDtEYt0610デフォルトの名無しさん (ワッチョイ dfb9-9b2Z)
2019/05/24(金) 09:00:19.45ID:h3dkW7YJ0 C言語はクラスが無い。
それは実際どれくらい問題になりますか?
昔C使ってたけど、本格的な抽象的設計をやってたわけじゃなくて、
最近Java使っててそういうのをやりだしたけど、
今思い返してみるとC言語はクラスや継承や多態性が無いから
かなり厳しい言語なんじゃないかな、と思ったんです。
メジャーなカーネルがCで作られてるという事実に驚愕します。
クラス無しで大規模開発は不可能としか思えません。
それどころか、1アルゴリズムの実装でもクラスは有用だと思うんですが。
最近、NimとかRustのようなCを代替するかもしれない勢いのある言語があります。
そういう言語はかなり抽象的な設計が可能です。
そういうのと比べると、小さなデバイスドライバみたいなものはCでいいだろうけど、
大規模開発におけるCはかなり無理があるんじゃないかな?と
そうでもないものですか?
それは実際どれくらい問題になりますか?
昔C使ってたけど、本格的な抽象的設計をやってたわけじゃなくて、
最近Java使っててそういうのをやりだしたけど、
今思い返してみるとC言語はクラスや継承や多態性が無いから
かなり厳しい言語なんじゃないかな、と思ったんです。
メジャーなカーネルがCで作られてるという事実に驚愕します。
クラス無しで大規模開発は不可能としか思えません。
それどころか、1アルゴリズムの実装でもクラスは有用だと思うんですが。
最近、NimとかRustのようなCを代替するかもしれない勢いのある言語があります。
そういう言語はかなり抽象的な設計が可能です。
そういうのと比べると、小さなデバイスドライバみたいなものはCでいいだろうけど、
大規模開発におけるCはかなり無理があるんじゃないかな?と
そうでもないものですか?
611デフォルトの名無しさん (アウアウエー Sa9f-eVvB)
2019/05/24(金) 09:04:22.51ID:a6wIXg41a まあファイルがクラスと同じだし。
継承はしづらいけど、そんなもん使ったらC++でもむしろ見通し悪くなるでしょ?
継承はしづらいけど、そんなもん使ったらC++でもむしろ見通し悪くなるでしょ?
612デフォルトの名無しさん (ワッチョイ dfa5-vAXu)
2019/05/24(金) 10:11:20.70ID:M2ZwKTAn0 最大のデバイスドライバがOSのカーネルなんじゃねえの
そしてそれがC言語の限界
そしてそれがC言語の限界
613デフォルトの名無しさん (ワッチョイ dfb9-9b2Z)
2019/05/24(金) 10:43:06.36ID:h3dkW7YJ0 Linuxカーネルは2100万行を超えているそうなので
たぶん地球上でもっとも大規模な開発の1つです。
たぶん地球上でもっとも大規模な開発の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でもオブジェクト指向的に考えて作ることは可能。構造体へのポインタまたは情報を区別する番号などを渡してその中身に基づいて処理する関数作ればいいので。
ファイルアクセスとかは作りがそうなってるよね。
ファイルアクセスとかは作りがそうなってるよね。
616デフォルトの名無しさん (ワッチョイ c7d2-Fpyl)
2019/05/24(金) 12:32:21.84ID:M3xcEept0 クラスはコンストラクタ/デストラクタは活用したけど
継承で面倒になって、ちょっと便利な関数付き構造体としてしか設計したことない。
継承で面倒になって、ちょっと便利な関数付き構造体としてしか設計したことない。
617デフォルトの名無しさん (ブーイモ MMcb-/OyN)
2019/05/24(金) 12:35:03.01ID:C+5joBz9M C言語ではオブジェクト指向も関数型プログラミングもできる。その下位レイヤーだから。
面倒臭いけど。
面倒臭いけど。
618デフォルトの名無しさん (ドコグロ MM9f-LXA5)
2019/05/24(金) 12:50:51.48ID:8pSuDyEhM >>613
デバドラとかが山ほどあるだけでコア部分はそんなにたいしたことないよ
デバドラとかが山ほどあるだけでコア部分はそんなにたいしたことないよ
619デフォルトの名無しさん (ドコグロ MM9f-LXA5)
2019/05/24(金) 12:53:08.72ID:8pSuDyEhM620デフォルトの名無しさん (アウアウウー Saab-EYzY)
2019/05/24(金) 12:59:14.48ID:Cw+6mW4za まあしかしC++は複雑怪奇な状態になったような感じがするのでなんか別の言語でオブジェクト指向やった方が良いような気がする。
621デフォルトの名無しさん (ワッチョイ c7da-YLUn)
2019/05/24(金) 13:49:11.26ID:FIKXvkBI0 Javaがとてもシンプルな言語に見えてくる
622デフォルトの名無しさん (スププ Sdff-OWKl)
2019/05/24(金) 14:27:11.63ID:YkjJvwKvd linux kernelなんておもくそオブジェクト指向的な構造だろ
623デフォルトの名無しさん (ワッチョイ e701-/OyN)
2019/05/24(金) 19:13:34.31ID:E0qJKDus0 関係ないけどOOPが流行り始めた頃に「WindowsのUIはオブジェクト指向だ」と言ってたやつを思い出した。
624デフォルトの名無しさん (ワッチョイ 7f63-buEI)
2019/05/24(金) 19:26:36.07ID:omgaeJxY0 目指していた方向はそうだったと思う
628デフォルトの名無しさん (アウアウウー Saab-EYzY)
2019/05/24(金) 20:41:47.14ID:1FXcUtRQa いやできなくはないよ。何せC++は元々はCへのコンバータだったしな。C++のソースを読んでC言語に変換して後のことはCコンパイラに任せてたんだよ。それが初期のC++。
もちろんCは言語そのものがオブジェクト指向をサポートしてないから人間がそれをやろうとするととても面倒な事になるけどな。
もちろんCは言語そのものがオブジェクト指向をサポートしてないから人間がそれをやろうとするととても面倒な事になるけどな。
629デフォルトの名無しさん (ワッチョイ e701-/OyN)
2019/05/24(金) 20:51:16.47ID:E0qJKDus0 そんなん言い始めたらアセンブラでもオブジェクト指向プログラミングできることになっちゃう。
言語としてOOPがサポートされてなきゃ認められないでしょ。
言語としてOOPがサポートされてなきゃ認められないでしょ。
>>628
>C++のソースを読んでC言語に変換して後のことはCコンパイラに任せてたんだよ。それが初期のC++。
C++ から C へのトランスパイラが存在したからといって、C にてオブジェクト指向(的ではなくそのものずばり)なプログラミングができるわけではありません
C++ のコンパイラが存在するからといって機械語が OO でないのと同じです、まず、
C++ https://ideone.com/vAp2Sj
に対応する C のコードを示してください
>C++のソースを読んでC言語に変換して後のことはCコンパイラに任せてたんだよ。それが初期のC++。
C++ から C へのトランスパイラが存在したからといって、C にてオブジェクト指向(的ではなくそのものずばり)なプログラミングができるわけではありません
C++ のコンパイラが存在するからといって機械語が OO でないのと同じです、まず、
C++ https://ideone.com/vAp2Sj
に対応する C のコードを示してください
632デフォルトの名無しさん (ワッチョイ 67f6-dCWx)
2019/05/24(金) 21:12:51.85ID:ZwmHdTYl0 >>610
全く問題にならない
classというキーワードがなくても
コードを書く者の考え方次第でカプセル化や継承はできる
FILE構造体がその例だ
多態性がないというのは、おまえさんの認識不足で
関数ポインタでそんなものはすぐに実現できる
そういう認識不足があるからこそ
メジャーなカーネルをなぜ書けたかが理解できないのだ
全く問題にならない
classというキーワードがなくても
コードを書く者の考え方次第でカプセル化や継承はできる
FILE構造体がその例だ
多態性がないというのは、おまえさんの認識不足で
関数ポインタでそんなものはすぐに実現できる
そういう認識不足があるからこそ
メジャーなカーネルをなぜ書けたかが理解できないのだ
633デフォルトの名無しさん (ワッチョイ 67f6-dCWx)
2019/05/24(金) 21:15:04.81ID:ZwmHdTYl0634デフォルトの名無しさん (アウアウエー Sa9f-eVvB)
2019/05/24(金) 21:24:37.67ID:QPLeHwR8a まあ継承なんてオブジェクト指向と関係ないよ
637デフォルトの名無しさん (ワッチョイ e701-GX6Y)
2019/05/24(金) 21:56:28.68ID:wwZ4gkZH0 仮想関数テーブルの実装方法について語るスレはここですか?
638デフォルトの名無しさん (ワッチョイ 67f6-dCWx)
2019/05/24(金) 22:01:07.63ID:ZwmHdTYl0639デフォルトの名無しさん (ワッチョイ 67f6-dCWx)
2019/05/24(金) 22:02:14.93ID:ZwmHdTYl0640蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 2701-6B7C)
2019/05/24(金) 22:06:22.36ID:/xfbOr910 >>638
ではストロヴストルップやリップマンはどういっているのか、ここに引用していただけますか?
あらかじめいっておきますが、引用はできない、なぜならば、そんな内容をストロヴストルップもリップマンも書いていないのだから
ではストロヴストルップやリップマンはどういっているのか、ここに引用していただけますか?
あらかじめいっておきますが、引用はできない、なぜならば、そんな内容をストロヴストルップもリップマンも書いていないのだから
642デフォルトの名無しさん (ワッチョイ df01-LXA5)
2019/05/24(金) 22:18:09.05ID:TMKOHW7N0643デフォルトの名無しさん (ワッチョイ e701-1x1Z)
2019/05/24(金) 22:21:05.39ID:0NhXAFL60 概念ならFILE構造体とそれの操作関数群
>>642
それは smalltalk 的な OO であって C++ の OO の概念とは多少食い違うと思います
それは smalltalk 的な OO であって C++ の OO の概念とは多少食い違うと思います
646デフォルトの名無しさん (ワッチョイ e701-1x1Z)
2019/05/24(金) 22:24:05.41ID:0NhXAFL60 コンストラクタとデストラクタの機構だけは欲しいと思ったことがしばしば
648デフォルトの名無しさん (ブーイモ MMcf-wr5r)
2019/05/24(金) 22:41:32.12ID:K6buSCwsM glibとか大昔からあるじゃん…
glibがooでないならooの定義をまず示せ
glibがooでないならooの定義をまず示せ
649デフォルトの名無しさん (アウアウカー Sa3b-eVvB)
2019/05/24(金) 22:42:05.32ID:hUeULEjja オブジェクト指向ってC++固有の概念なの?
だとすると、そりゃCで実現は無理でしょう。関係ないんだから。CとC++は。
だとすると、そりゃCで実現は無理でしょう。関係ないんだから。CとC++は。
>>648
glibc++ は OO かもしれませんが glibc が OO だとは寡聞にして聞きませんね
glibc++ は OO かもしれませんが glibc が OO だとは寡聞にして聞きませんね
652デフォルトの名無しさん (アウアウカー Sa3b-eVvB)
2019/05/24(金) 22:50:26.22ID:hUeULEjja653デフォルトの名無しさん (アウアウカー Sa3b-eVvB)
2019/05/24(金) 22:51:22.70ID:hUeULEjja654蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 2701-uiLC)
2019/05/24(金) 22:53:40.43ID:/xfbOr910 GTKのGLibだよね。
656デフォルトの名無しさん (ブーイモ MMcf-wr5r)
2019/05/24(金) 22:55:59.59ID:K6buSCwsM657デフォルトの名無しさん (ワッチョイ c7c3-OWKl)
2019/05/24(金) 23:36:16.20ID:SCqWQYPI0658デフォルトの名無しさん (ワッチョイ c7c3-OWKl)
2019/05/24(金) 23:46:49.71ID:SCqWQYPI0659デフォルトの名無しさん (ワッチョイ bfba-GX6Y)
2019/05/24(金) 23:58:34.02ID:S5Q/uU3j0 >>655
CでもOOできるし、継承できるし、オーバーライドもできる。
20年位前の本に「ANSI C に準拠したコンパイラならできる」と紹介されている。
メモリを意識したコードを書けない人には理解できないけどね。
CでもOOできるし、継承できるし、オーバーライドもできる。
20年位前の本に「ANSI C に準拠したコンパイラならできる」と紹介されている。
メモリを意識したコードを書けない人には理解できないけどね。
660デフォルトの名無しさん (ワッチョイ dfb9-9b2Z)
2019/05/25(土) 00:01:58.97ID:7Hh+Cor80 C言語はABIが標準化されている、という文を見たんですが、
その標準仕様の名前は何ですか?
新しいプラットフォームがその標準仕様を満たせば
バイナリレベルあるいはソースレベルで移植性があるんでしょうか?
その標準仕様の名前は何ですか?
新しいプラットフォームがその標準仕様を満たせば
バイナリレベルあるいはソースレベルで移植性があるんでしょうか?
661デフォルトの名無しさん (ワッチョイ bfba-GX6Y)
2019/05/25(土) 00:07:07.65ID:KPhaQb+n0662デフォルトの名無しさん (ワッチョイ c7c3-OWKl)
2019/05/25(土) 00:11:09.80ID:oops2jeN0 アーキテクチャ跨いでABIが統一できるわけないよね
引数の渡し方なんてアーキテクチャ変わったらそもそも使えるレジスタ変わるし
同一アーキテクチャの特定OS内ならバージョン変わってもABI互換ってのは良くあるけど
引数の渡し方なんてアーキテクチャ変わったらそもそも使えるレジスタ変わるし
同一アーキテクチャの特定OS内ならバージョン変わってもABI互換ってのは良くあるけど
664デフォルトの名無しさん (ワッチョイ df01-LXA5)
2019/05/25(土) 05:52:48.29ID:Tic4GHY30665デフォルトの名無しさん (ワッチョイ df79-buEI)
2019/05/25(土) 05:57:11.32ID:6KmI3UXB0 Cでオブジェクト指向プログラムなんて書くのは時間の無駄
速度が必要な部分だけCで作るのが正解
速度が必要な部分だけCで作るのが正解
666デフォルトの名無しさん (ワッチョイ 67f6-dCWx)
2019/05/25(土) 06:05:28.22ID:6T2yG8cn0667デフォルトの名無しさん (ドコグロ MM9f-LXA5)
2019/05/25(土) 07:19:56.39ID:DOpjF4HUM >>658
>多重じゃない継承の場合Cでは1つめのメンバにベースクラスのインスタンスを書くというルールなだけ
C では構造体のメンバの順番をプログラムから指定することはできたのでしょうか?
C コンパイラはアラインメントを考慮して最適化をはかり構造体のメンバを、プログラマの記述から適宜入れ替えていもいいのでは?
となると一つめのメンバにベースクラスのインスタンスを書いても、コンパイラに入れ替えられてしまっては無意味なのでは?
>多重じゃない継承の場合Cでは1つめのメンバにベースクラスのインスタンスを書くというルールなだけ
C では構造体のメンバの順番をプログラムから指定することはできたのでしょうか?
C コンパイラはアラインメントを考慮して最適化をはかり構造体のメンバを、プログラマの記述から適宜入れ替えていもいいのでは?
となると一つめのメンバにベースクラスのインスタンスを書いても、コンパイラに入れ替えられてしまっては無意味なのでは?
>>666
>てめえの怠慢を俺が尻拭いする筋合いはねえぜ
あなたは私の怠慢を主張するのと同様の筋で、私はあなたの欺瞞を主張します
出典元や引用を正確にできないのであれば、あなたは嘘をついていると判断されてもしかたがないと思います
>てめえの怠慢を俺が尻拭いする筋合いはねえぜ
あなたは私の怠慢を主張するのと同様の筋で、私はあなたの欺瞞を主張します
出典元や引用を正確にできないのであれば、あなたは嘘をついていると判断されてもしかたがないと思います
>>661
片山先生は私とは比較にならないほど生産性の高いプログラマですよ
片山先生は私とは比較にならないほど生産性の高いプログラマですよ
673デフォルトの名無しさん (ワッチョイ df01-LXA5)
2019/05/25(土) 16:17:34.75ID:Tic4GHY30 >>673
コメントありがとうございます。確かに >>668 には誤りが含まれていました
ISO/IEC 9899:1999
6.7.2.1.5
As discussed in 6.2.5, a structure is a type consisting of a sequence of members, whose
storage is allocated in an ordered sequence,
JIS X3010:2003
構造体は,メンバの列から成る型とし,メンバの記憶域は,並べられた順に割り付ける(6.2.5参照)。
しかし、この記述は構造体のパディングが構造体の先頭に詰められる場合を排除していないと考えます
よって、>>658
>多重じゃない継承の場合Cでは1つめのメンバにベースクラスのインスタンスを書く
>それだけで呼び出し元のコードはほぼなにも考えずにベースクラスの機能を使うことができる
構造体の先頭にパディングがあった場合は、この記述は正しくないのではないでしょうか。
コメントありがとうございます。確かに >>668 には誤りが含まれていました
ISO/IEC 9899:1999
6.7.2.1.5
As discussed in 6.2.5, a structure is a type consisting of a sequence of members, whose
storage is allocated in an ordered sequence,
JIS X3010:2003
構造体は,メンバの列から成る型とし,メンバの記憶域は,並べられた順に割り付ける(6.2.5参照)。
しかし、この記述は構造体のパディングが構造体の先頭に詰められる場合を排除していないと考えます
よって、>>658
>多重じゃない継承の場合Cでは1つめのメンバにベースクラスのインスタンスを書く
>それだけで呼び出し元のコードはほぼなにも考えずにベースクラスの機能を使うことができる
構造体の先頭にパディングがあった場合は、この記述は正しくないのではないでしょうか。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】中国、水産物輸入停止と通達 日本政府に ★2 [おっさん友の会★]
- 中国側が首相答弁の撤回要求、日本側拒否★6 [夜のけいちゃん★]
- 「厚かましい挑発的発言だ」中国国連大使が高市首相発言に強く反発 日本の常任理事国入りに明確に反対 [ぐれ★]
- 【速報】 米大使「はっきりさせておこう、米国は尖閣諸島含め日本の防衛に全面コミット、中国がどうしようが変わらない」 [お断り★]
- 自民、経済対策で子ども1人に2万円給付へ 児童手当に上乗せ 所要額は約4000億円 [ぐれ★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 [ぐれ★]
- 「日本の保守層のご機嫌を取りながら、中国、ロシア、アメリカのご機嫌も取る」👈こういう総理がいれば良かったよな [762037879]
- 【高市訃報】ホタテ業者、死亡😇😇😇 [573041775]
- 【朗報】ウヨの姫小野田大臣、吠える「何か気に入らないことがあったらすぐに経済威圧をする国に依存するのはリスク」脱アメリカを宣言 [856698234]
- 高市早苗 「靖国神社電撃参拝」説が浮上 [163661708]
- 【終国悲報】高市早苗、たったの10日で莫大な経済的損失を叩き出す [165981677]
- 米タイム紙、日中の台湾問題を全力解説で中国の高市早苗批判を全力で拡散。ネトウヨは英語で反論がんばって! [792931474]
