C言語なら俺に聞け 151at TECH
C言語なら俺に聞け 151 - 暇つぶし2ch532:デフォルトの名無しさん
19/05/14 08:36:30.40 2RiYyx1fa.net
あらゆる環境だったらシリアライズしないとだし。
同じ処理系だったら同じ構造体でいいだろうし。

533:デフォルトの名無しさん
19/05/14 13:41:09.36 d9/Wmgv60.net
>>514 のはこんな感じですかの
union foo {
 struct {
  int a;
  double b; // ここをバージョンアップで追加
 };
 char dummyBuffer[100];
};

534:デフォルトの名無しさん
19/05/14 13:59:44.65 d9/Wmgv60.net
構造体の大きさが char[100] に収まってる範囲での話
>>512 のように末尾に用意したギャップを引き算していくにしても、引ききれなくなった段階で破綻するよね
※ 突破したことをチェックするには sizoef(union foo) と sizeof(char[100]) とを比較すんのかなぁ…

535:経団連
19/05/14 14:09:24.00 4po1tQ0w0.net
C99 <stdint.h>のuint*_t型を使った方がいいと思う。

536:デフォルトの名無しさん
19/05/14 14:39:04.31 2RiYyx1fa.net
普通符号付きでしょ

537:デフォルトの名無しさん
19/05/14 14:51:20.14 5nOlmwWa0.net
符号プログラミングか

538:デフォルトの名無しさん
19/05/14 15:42:40.54 2RiYyx1fa.net
今はstatic_assertとかいうものがあるらしいぞ
これでコンパイル時にチェックすればよい

539:デフォルトの名無しさん
19/05/14 21:12:50.85 8soz04JH0.net
>>512
不格好だけどこれでいけるよ
全部プリプロセッサで処理できて、構造体サイズは100バイト固定になる。
予想を超えてサイズを突き破った場合は別構造体作るしかないね。
#include <stddef.h>
struct inner_foo {
int a;
char buf[];
};
#define MAX_STRUCT_SIZE 100
#define BUF_SIZE (MAX_STRUCT_SIZE - offsetof(struct inner_foo, buf))
struct foo {
int a;
double b;
char buf[BUF_SIZE];
};

540:デフォルトの名無しさん
19/05/15 07:47:15.99 FPbZusNo0.net
>>523 ちょっと間違ってるみたい。
struct foo には struct inner_foo に double b; が追加されてるせいで
sizeof(struct foo) == MAX_STRUCT_SIZE にならない。
sizeof(struct foo) == MAX_STRUCT_SIZE + sizeof(double) になっちゃう。
inner_foo と foo とで char buf[] より前のメンバを一致させる必要がある。

541:デフォルトの名無しさん
19/05/15 08:35:12.84 0TljqresM.net
>>515
なんでサイズが違うとセグメンテーションフォールトになるのかよくわからんが…
Win32APIみたいに頭にサイズ入れときゃいいんじゃね?

542:デフォルトの名無しさん
19/05/15 08:56:22.39 nK0I7Knm0.net
データファイルの話なら分かるが、intのサイズが違う環境の共有ライブラリってそもそも使えるのか?

543:デフォルトの名無しさん
19/05/15 09:12:43.64 e9I3VVqQa.net
コンパイルは自分でしろって話だと思うよ。
そうすると単にメモリ配置を意識した�


544:vログラムだな。 当然、バイトオーダーも気にしろよっていう話に



545:デフォルトの名無しさん
19/05/15 09:32:21.44 k0yjAgrYa.net
やっぱ int32_t みたいな環境に関係なく同じビット数になるやつにしといた方が良いんじゃないかな。

546:デフォルトの名無しさん
19/05/15 09:45:02.94 25auY+1H0.net
515の
>ただ今回考えてるのは、コンパイルせずに共有ライブラリを差し替えるって状況を想定してる
>そのときにセグメンテーションフォールトがでないようにしたい
構造体のパラメータを追加し共有ライブラリを差し替えつつ
呼び出し側のコンパイルは行わないって無理ないか?
旧ソースで追加されたパラメータ部分は不定値であって
その不定値をうけて共有ライブラリ内部が正しく動作できるとは思えないが…

547:デフォルトの名無しさん
19/05/15 11:40:27.07 AfKgri370.net
構造体には、サイズの変わらない、ポインタだけを置いておいて、
実際の領域は、ライブラリ内で確保して使って、解放すれば?

548:デフォルトの名無しさん
19/05/15 12:19:01.09 e9I3VVqQa.net
さすがに実体を共有するという目的がないとこういう発想にはならんでしょ。
共有メモリとか、ファイルとか、通信とか。

549:デフォルトの名無しさん
19/05/15 12:31:29.02 dMKqDPXvr.net
>>529
呼び出す側がバージョン情報をもっておいて、処理側で振り分けてアクセスしないようにすれば問題ないね
#define version 2
void func (const struct* foo) {
func_impl(foo, version);
}

void func_impl(const struct* foo, int version) {
if (version > 1) {
foo.b;
}
}

550:デフォルトの名無しさん
19/05/15 12:43:05.74 25auY+1H0.net
>>532
そのバージョン情報の数字を埋め込むのに一番適度なのは実構造体のサイズって話に(>>525)
>>531 のような背景なら
ペイロードサイズは触りたくない ってのは納得できるな
バージョン違いの吸収法は別途必要だけど

551:デフォルトの名無しさん
19/05/15 12:53:24.07 k0yjAgrYa.net
構造体の中身を公開しないでポインタだけ使わせて読み書きする関数を別途用意するって方法もあると思う。オブジェクト指向の言語でのプロパティのようなものね。
内容のファイルへの読み書きやネットワークでのやり取りはそれようにデータをpack、unpackする処理を作ってそこにバージョン番号も埋め込む。

552:デフォルトの名無しさん
19/05/15 12:59:51.65 Wbf0zcGJ0.net
exeがnew(malloc)するけど中をいじるのは全てdllの関数ってのはままある
dllだけ差し替えで済ましたい、サイズが変わらなければexeはビルドし直さなくていいのに…
ってことだろう
>512の
>intや他の型が固定サイズの保証はないから、処理系をかんがえると使えない
>パディングでサイズも変わっちゃうしね
は全く関係ない話だったということだ
素直に「よくある手段」でやればいい
>514,517のunionもいいと思うけど
foo.aでアクセスできないよね?foo.body.aとかしないと

553:デフォルトの名無しさん
19/05/15 13:12:20.84 25auY+1H0.net
>>517 の foo.a でいきなりアクセスできる union が記述できるのは C11 からみたい
無名構造体/無名共用体

554:デフォルトの名無しさん
19/05/15 14:41:00.06 dMKqDPXvr.net
>>535
intが4バイトなんて保証はないから、char[] bufの大きさを決められないって話でしょ?
intメンバを追加したとして、bufのサイズはどれだけ減らせばいいのかわからないのが問題
4の環境が多いだろけど、2の環境だと2を減らさなきゃいけないわけで
dll差し替えで再ビルドしない場合、構造体サイズが変わると特に配列渡しの場合はセグメンテーションフォールトになる可能性が高くて危険
セーブデータみたいに構造体をそのままファイルに落とすとしても、サイズはずっと不変なのが扱いやすいね

555:デフォルトの名無しさん
19/05/15 14:56:07.34 e9I3VVqQa.net
数字付かないintのでかい方に合わせるなら、それこそunion使って明示的にオフセット決めるとか。
本当にそんなことしたいのか?という話は置いといて。
もちろんint32_tとかint_least32_t使う方がいいし、本当に位置合わせするならバイト位置指定して読み書きするし、そもそもサイズ固定�


556:ケずにシリアライズ用のライブラリ使うのが正しいよ。



557:デフォルトの名無しさん
19/05/15 19:35:47.81 0TljqresM.net
>>537
> intが4バイトなんて保証はないから、char[] bufの大きさを決められないって話でしょ?
そんな話はとっくに終わっとる
>>515をちゃんと読めよ

558:デフォルトの名無しさん
19/05/15 20:46:54.27 Wbf0zcGJ0.net
>>536
ほう知らんかった
なら>517でほぼデメリットないね
>>537
「その環境」でのintのサイズはsizeof(int)でおk

559:デフォルトの名無しさん
19/05/15 21:55:29.06 ZaVTFrP70.net
win32apiはバージョンによって構造体の変数が追加になるから構造体のサイズを構造体の先頭にセットする

560:デフォルトの名無しさん
19/05/16 08:13:26.18 eEplP63Q0.net
windows.hのsmallで一時間潰した

561:デフォルトの名無しさん
19/05/16 19:38:59.34 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:デフォルトの名無しさん
19/05/16 19:48:10.73 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:デフォルトの名無しさん
19/05/16 20:27:22.18 m1+/MMjMa.net
惜しいねえ。綺麗に逆に入ってはいるんだよな。

564:デフォルトの名無しさん
19/05/16 20:38:11.53 GXqxfUU20.net
おっしゃる通りでした…今度は上手くいきました
ありがとうございます

565:デフォルトの名無しさん
19/05/16 20:38:46.73 GXqxfUU20.net
おっしゃる通りでした…今度は上手くいきました
ありがとうございます

566:デフォルトの名無しさん
19/05/16 21:09:34.65 q0J7kB7g0.net
自己解決できたようでなにより
整数の配列を逆に整列させるなら正解だったんだけどねー
「文字列」操作の落とし穴ですな

567:デフォルトの名無しさん
19/05/18 22:03:40.11 e0Mh58zT0.net
今C言語教室でSQLとGUIやってる初心者なんだがCでDB弄る仕事ってあるのか
JavaとかC#に取られそうだけど

568:デフォルトの名無しさん
19/05/18 22:06:44.17 8rj7/ih6a.net
sqliteは使うよ

569:
19/05/18 22:07:47.63 Pqc0+ZP00.net
>>549
ODBC 経由ならできますが…昔、ハンドルのキャストをとちったミスを、その意味不明の動きから突き止めるのは大変でした
ODBC を直書きする情報はネットにほとんどありませんね

570:デフォルトの名無しさん
19/05/18 22:19:48.67 e0Mh58zT0.net
SQL使うのか慣れてないからあんまやりたくないんだよなあ
頑張るか

571:デフォルトの名無しさん
19/05/18 22:37:47.44 D3aJPSyb0.net
>>549
C++ならまだしもC言語でGUI?
どこの教室だよ…

572:デフォルトの名無しさん
19/05/18 22:53:12.41 RWbfx4gX0.net
むかーし、Pro*C って使った事がある
Cのソース内にSQLを埋め込み
プリコンパイルする感じ
今は流行らないかもしれない

573:デフォルトの名無しさん
19/05/18 22:58:45.45 8rj7/ih6a.net
SQL使いこなしてる人ってすごいけど、正直ああはなりたくないという感じだよな。

574:デフォルトの名無しさん
19/05/18 23:01:53.11 RWbfx4gX0.net
賢いファイルシステムとして利用すると超便利だぞ

575:デフォルトの名無しさん
19/05/18 23:02:38.45 RWbfx4gX0.net
同じ事をCのロジックで組むとなると、アタマおかしくなるかも

576:デフォルトの名無しさん
19/05/18 23:08:58.89 Y/SMFmS40.net
普通にアプリケーションの規模が大きくなるとsql使いたくなるだろ
そういう場合はsqlite使う

577:デフォルトの名無しさん
19/05/18 23:10:30.33 RWbfx4gX0.net
5ちゃんねる専用ブラウザもsqlite使っているそうですね?
プログラムコードはCではないですが

578:デフォルトの名無しさん
19/05/19 10:01:29.20 EV8D9m9A0.net
IoTのデバイス開発やってるけど、C言語でDBのクライアントライブラリ使ってるよ

579:デフォルトの名無しさん
19/05/19 16:30:57.06 b6d7Y/CF0.net
リーナスさんはC++嫌いつーてるしな
トレードマークのfuck口調で

580:デフォルトの名無しさん
19/05/19 17:49:51.40 V/GPYpFPa.net
この頃は間に何かライブラリ挟んでDB変わってもSQL文がほぼ同じままで行けるようなのが流行りなのでは?

581:デフォルトの名無しさん
19/05/19 19:08:51.80 SqCxdnVY0.net
大学の情報科の人たちってどのレベルでC言語使えるんですかね?
Cに限ったことではないですが大学4年でどの程度の練度が身につくのか

582:デフォルトの名無しさん
19/05/19 19:17:39.10 Ic55MIMX0.net
人によるだろ
そもそも好きなやつは大学入る前からやってるからな

583:デフォルトの名無しさん
19/05/19 19:22:28.74 qBoKnLB7a.net
>>563
別に使えなくてもいいよ

584:デフォルトの名無しさん
19/05/19 21:05:03.54 b6d7Y/CF0.net
>>565
おまえは情報科に来るなってだけ
やる気ねえやつが畑違いな学部に入ること自体が害悪だ

585:デフォルトの名無しさん
19/05/19 21:14:52.17 Y3pJ4vrOa.net
>>566
お前が入ったの専門学校だろ?

586:デフォルトの名無しさん
19/05/19 21:19:32.43 b6d7Y/CF0.net
>>567
化学科だけど

587:デフォルトの名無しさん
19/05/19 21:24:37.32 RJz4Ejb00.net
学校だとアルゴリズムやシステム設計手法は学べるだろうが
練度が上がるのはやはり仕事を始めてからだと思う

588:デフォルトの名無しさん
19/05/20 12:44:26.31 PSRVLRmYr.net
コンピュータサイカヨウの基本は一通りやるんじゃない?
情報処理試験の基本レベルくらいのもの
初心者は実務にはそのままは使えないけど、中級以上のエンジニアならこのあたりの知識があると差がついてくるね

589:デフォルトの名無しさん
19/05/20 14:12:04.87 0d3wAWyu0.net
業務のほとんどは手作業の自動化だから差は出ない。そしてみんなリストラされる。

590:デフォルトの名無しさん
19/05/20 18:18:34.53 IJBxlZ980.net
仕事で出会った、いろいろな人を思い出すに、ガチに使える人材って凄いからなあ。
学校や仕事を通じて学ぶ、みたいな次元じゃないんだよねえ。

591:デフォルトの名無しさん
19/05/20 19:49:19.18 Nbm/sW0Oa.net
おまえが使ってるんだったらおまえが偉いよ

592:デフォルトの名無しさん
19/05/21 00:42:18.33 jVHVO/YL0.net
setbuf関数っていつなんの為に使うんや?
バッファリングのためにあるのはわかるけどそもそもバッファリングがなんの為にあるのかわからん

593:デフォルトの名無しさん
19/05/21 00:44:38.83 Hcv2vO/e0.net
ちまちま出力するより溜めてからまとめて出力した方が高速

594:デフォルトの名無しさん
19/05/21 01:29:10.75 jVHVO/YL0.net
1万文字くらいのテキストファイルを標準出力でやってみたけど変わった気しなかったぞ
もしかして数百万文字レベルの巨大ファイルだと劇的に変わるんか?

595:デフォルトの名無しさん
19/05/21 01:34:19.46 XM845/F70.net
10kbって小さくね

596:デフォルトの名無しさん
19/05/21 01:46:59.05 +xvLcOVEa.net
というか普通はバッファリングする関数ばっかりだが、自前でバッファ用意したいときもあるって話。
基本変わらんよたぶん。

597:デフォルトの名無しさん
19/05/21 01:47:43.41 jVHVO/YL0.net
確かに少ないな
と思ったんで2,700kbでやってみたらむしろ4秒長くなったぞ

598:デフォルトの名無しさん
19/05/21 02:21:13.21 Y+BS98b80.net
>>574
FILE * 経由で出力する printf() 等は内部でバッファリングしていてバッファがいっぱいになったらまとめて出力する(出力先が端末の場合は行単位で出力する)。
そのバッファを自分で指定した領域を使わせるか、またはなしにできるのが setbuf()。更に自由に大きさやモードも指定したいなら setvbuf() を使う。
バッファリングに関して考慮しなくても良い入出力をする場合は read(), write() で行う。この場合は全くバッファリングされないので少ないバイト数の入出力が多いと遅くなる。
それと printf() のようなフォーマットを考慮した出力はないので必要なら自作する。

599:デフォルトの名無しさん
19/05/21 02:26:07.71 Y+BS98b80.net
>>576
open()してwrite()で1バイトづつ書くのとまとめて書くのとではバイト数によっては大幅に違いが出ると思う。環境依存ではあるが。

600:デフォルトの名無しさん
19/05/21 03:47:59.45 jVHVO/YL0.net
>>581
大きなファイルの入出力を高速化したい時はsetbuf(fp,buf)
バッファリング無しにしてバッファをフラッシュするタイミングを順番に逐一実行させたい時はsetbuf(fp,NULL)
みたいな感じでええんかな?

601:デフォルトの名無しさん
19/05/21 03:58:34.93 Y+BS98b80.net
>>582
setvbuf()で自分でバッファの大きさ決めてしまった方が良いかも。

602:デフォルトの名無しさん
19/05/21 04:24:32.31 zmxtmgNI0.net
既出かもしれませんがconstがjavaのfinalと違うと知りました。どう違うのでしょうか?c初心者です

603:デフォルトの名無しさん
19/05/21 05:39:22.97 SRv5ILQj0.net
>>576
OSによってはHDDへ遅延書き込みするから、結局バッファしてるのと大して変わらなかったりする。

604:デフォルトの名無しさん
19/05/21 06:44:08.98 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:デフォルトの名無しさん
19/05/21 06:49:56.40 tdstqwiHM.net
>>585
そっちもあるけどAPI呼出し回数の削減もあるから

606:デフォルトの名無しさん
19/05/21 07:08:29.24 6muVxYSDr.net
>>585
今どきのディスクならほぼ遅延書き込みしてるといってもいいね
バッファには二段階あって、
①プロセスが持ってるバッファ
②OSが持ってるバッファ
flush関係のライブラリ関数やシステムコールは①を②に吐き出す
②を吐き出すにはLinuxだとfsyncもしくはfdatasync

607:デフォルトの名無しさん
19/05/21 09:19:53.31 BVi2WQ22a.net
>>584
Cはポインタの指す先が const という指定ができるがJavaは配列の要素まで final にする指定ができなかったと思う。
つまり配列やクラスそのもののインスタンスへの参照は final にてきる。しかし参照される中身までは final にできず書き換え可能(クラスの場合はpublicのクラス変数とか、外部から書き換えられるようになっていれ


608:ば書き換えられる)。 ま、ちょっと試してみな。



609:デフォルトの名無しさん
19/05/21 10:05:33.15 DLRGb2lZ0.net
LTOのオプション
を使ってコンパイルすれば
インライン関数をヘッ
ダーに書かなくても
勝手にインライン化できるものはインラ
イン化してくれる
という理解で
あってますか?

610:デフォルトの名無しさん
19/05/21 10:21:18.62 BVi2WQ22a.net
>>590
それコンパイラ依存なのでは?

611:デフォルトの名無しさん
19/05/21 12:55:43.68 PZq+OQZ5p.net
>>589
これな
Javaを最初に設計した奴はバカなんじゃないかと final の仕様を見たとき思ったな

612:デフォルトの名無しさん
19/05/21 15:23:18.72 ZAINLMmO0.net
Linux では、HDD へ書き込むのは、デフォルトで、5秒に1回
USB メモリで、書き込み回数を減らしたい場合は、
15秒に1回とかに設定する人もいる

613:デフォルトの名無しさん
19/05/21 18:23:31.31 6muVxYSDr.net
>>593
書き出し周期はファイルシステムに依存するよ
例えばext3かext4かで挙動は違う

614:デフォルトの名無しさん
19/05/21 18:37:21.97 G/IUf+gXp.net
C言語のfprintfを用いるときに、前行の改行を消す方法をご存知ないですか?
エスケープシーケンスでバックスペースを試したのですか上手くいかなくて困っています。
状況としてはfor文を用いて改行を含んだ文字列を繰り返し出力させているんですが、最後の行だけ改行を無くし、続けて別の文を出力したいのです。
繰り返しの回数を変えて最後に改行なしの処理をいれればいいと思うのですが、簡単な方法があればと思い質問させていただきました。
よろしくお願いします。

615:デフォルトの名無しさん
19/05/21 18:40:11.67 UdJL+OJH0.net
ストリームの撒き戻しは難しいんじゃないか? 表示装置なのかファイルなのかでも変わるだろうし…

616:デフォルトの名無しさん
19/05/21 18:54:48.20 Hcv2vO/e0.net
ファイルポインタは巻き戻せる
標準出力ならエスケープシーケンスで右上に行けばいい

617:デフォルトの名無しさん
19/05/21 19:19:14.41 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:デフォルトの名無しさん
19/05/21 19:53:55.55 UPiNM42a0.net
質問者が知りたい情報とは違うので、スルー推奨かもですが。
もし自分が、同じことをやれ、と言われたら。
「改行を含んだ文字列」を、「改行」と「それ以外の文字列」の2つに分けて、別々に出力しようとするかなあ。
ループの回数を変える必要はなくて。イメージとしては
for() ※行単位のループ
{
if(最初の行でなければ) fprintf で「改行」を出力
fprintf で「それ以外の文字列」を出力
}
fprintf で「別の文を出力」

619:デフォルトの名無しさん
19/05/21 19:58:03.98 kdkwqODuM.net
>>595
bool First = true;
for( … ){
if(First){
First = false;
} else {
fprintf("¥n");
}
fprintf( … );
}

620:デフォルトの名無しさん
19/05/21 19:58:35.62 kdkwqODuM.net
あっ、被ったや

621:デフォルトの名無しさん
19/05/21 20:07:13.38 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:デフォルトの名無しさん
19/05/21 20:22:57.69 G/IUf+gXp.net
>>596-602
皆様回答ありがとうございます。
ファイルを扱っているので、fseekで戻す方法を試してみようと思います。

623:デフォルトの名無しさん
19/05/21 20:31:17.43 JOJ6V6qzd.net
プログラムいじられるなら、改行出す方をどうにかした方が良さそうだが

624:デフォルトの名無しさん
19/05/21 20:31:52.25 8vKfOnx40.net
ansi.sysを組み込めばVT100互換エスケープシーケンスが
という昔話…と思ったが、ググったらvistaまであったんだな驚き
Windows 10 Threshold 2(10.0.1058)ではコマンドプロンプトでANSI/VT100互換表示が可能に
というスラドの記事も出た

625:デフォルトの名無しさん
19/05/21 20:52:46.26 BVi2WQ22a.net
最後に改行出すんじゃなくて最初に改行出すようにすれば良いだけでは?
一番最初の行だけは最初に出さなければ良いだけ。
バッファリングされて出力されないのが嫌なら行末でfflush()する。

626:デフォルトの名無しさん
19/05/21 21:47:10.75 n1jvW3Ih0.net
>>606
>>599-600

627:デフォルトの名無しさん
19/05/21 22:06:40.11 Y+BS98b80.net
>>607
おお。既にあった。
さっきスマホで見てて気付かなかった。

628:デフォルトの名無しさん
19/05/21 22:09:47.12 JtLDtEYt0.net
>>604-607
603です。>>600の意味をちゃんとわかってませんでしたが、>>606の方のレスでわかりました。
>>600の方が安全な気がするのでそちらを検討します。

629:デフォルトの名無しさん
19/05/24 09:00:19.45 h3dkW7YJ0.net
C言語はクラスが無い。
それは実際どれくらい問題になりますか?
昔C使ってたけど、本格的な抽象的設計をやってたわけじゃなくて、
最近Java使っててそういうのをやりだしたけど、
今思い返してみるとC言語はクラスや継承や多態性が無いから
かなり厳しい言語なんじゃないかな、と思ったんです。
メジャーなカーネルがCで作られてるという事実に驚愕します。
クラス無しで大規模開発は不可能としか思えません。
それどころか、1アルゴリズムの実装でもクラスは有用だと思うんですが。
最近、NimとかRustのようなCを代替するかもしれない勢いのある言語があります。
そういう言語はかなり抽象的な設計が可能です。
そういうのと比べると、小さなデバイスドライバみたいなものはCでいいだろうけど、
大規模開発におけるCはかなり無理があるんじゃないかな?と
そうでもないものですか?

630:デフォルトの名無しさん
19/05/24 09:04:22.51 a6wIXg41a.net
まあファイルがクラスと同じだし。
継承はしづらいけど、そんなもん使ったらC++でもむしろ見通し悪くなるでしょ?

631:デフォルトの名無しさん
19/05/24 10:11:20.70 M2ZwKTAn0.net
最大のデバイスドライバがOSのカーネルなんじゃねえの
そしてそれがC言語の限界

632:デフォルトの名無しさん
19/05/24 10:43:06.36 h3dkW7YJ0.net
Linuxカーネルは2100万行を超えているそうなので
たぶん地球上でもっとも大規模な開発の1つです。

633:デフォルトの名無しさん
19/05/24 11:21:47.36 0dR+L/D60.net
責任ある人は気がくるっているじゃない。

634:デフォルトの名無しさん
19/05/24 12:25:59.56 Cw+6mW4za.net
Cでもオブジェクト指向的に考えて作ることは可能。構造体へのポインタまたは情報を区別する番号などを渡してその中身に基づいて処理する関数作ればいいので。
ファイルアクセスとかは作りがそうなってるよね。

635:デフォルトの名無しさん
19/05/24 12:32:21.84 M3xcEept0.net
クラスはコンストラクタ/デストラクタは活用したけど
継承で面倒になって、ちょっと便利な関数付き構造体としてしか設計したことない。

636:デフォルトの名無しさん
19/05/24 12:35:03.01 C+5joBz9M.net
C言語ではオブジェクト指向も関数型プログラミングもできる。その下位レイヤーだから。
面倒臭いけど。

637:デフォルトの名無しさん
19/05/24 12:50:51.48 8pSuDyEhM.net
>>613
デバドラとかが山ほどあるだけでコア部分はそんなにたいしたことないよ

638:デフォルトの名無しさん
19/05/24 12:53:08.72 8pSuDyEhM.net
>>610
構造体に関数ポインタ入れたりすれば継承も多態も可能
書くのが面倒ってだけの話
モジュールを適切に分割すれば個々の開発部分はそんなにでかくならないし

639:デフォルトの名無しさん
19/05/24 12:59:14.48 Cw+6mW4za.net
まあしかしC++は複雑怪奇な状態になったような感じがするのでなんか別の言語でオブジェクト指向やった方が良いような気がする。

640:デフォルトの名無しさん
19/05/24 13:49:11.26 FIKXvkBI0.net
Javaがとてもシンプルな言語に見えてくる

641:デフォルトの名無しさん
19/05/24 14:27:11.63 YkjJvwKvd.net
linux kernelなんておもくそオブジェクト指向的な構造だろ

642:デフォルトの名無しさん
19/05/24 19:13:34.31 E0qJKDus0.net
関係ないけどOOPが流行り始めた頃に「WindowsのUIはオブジェクト指向だ」と言ってたやつを思い出した。

643:デフォルトの名無しさん
19/05/24 19:26:36.07 omgaeJxY0.net
目指していた方向はそうだったと思う

644:
19/05/24 20:26:08.87 0N6+tWvP0.net
>>615
>Cでもオブジェクト指向的に考えて作ること
あくまでも「オブジェクト指向『的』」であることに注意すること
C ではオブジェクト指向を実現できない(断言)

645:
19/05/24 20:27:08.05 0N6+tWvP0.net
>>617
>C言語ではオブジェクト指向も関数型プログラミングもできる
C ではオブジェクト指向はできない(断言)
継承をCでどのように記述するのでしょうか?

646:
19/05/24 20:27:59.68 0N6+tWvP0.net
>>622
>linux kernelなんておもくそオブジェクト指向的な構造だろ
あくまでも「オブジェクト指向『的』」であってオブジェクト指向そのものではありません(断言)

647:デフォルトの名無しさん
19/05/24 20:41:47.14 1FXcUtRQa.net
いやできなくはないよ。何せC++は元々はCへのコンバータだったしな。C++のソースを読んでC言語に変換して後のことはCコンパイラに任せてたんだよ。それが初期のC++。
もちろんCは言語そのものがオブジェクト指向をサポートしてないから人間がそれをやろうとするととても面倒な事になるけどな。

648:デフォルトの名無しさん
19/05/24 20:51:16.47 E0qJKDus0.net
そんなん言い始めたらアセンブラでもオブジェクト指向プログラミングできることになっちゃう。
言語としてOOPがサポートされてなきゃ認められないでしょ。

649:
19/05/24 21:00:32.57 0N6+tWvP0.net
>>628
>C++のソースを読んでC言語に変換して後のことはCコンパイラに任せてたんだよ。それが初期のC++。
C++ から C へのトランスパイラが存在したからといって、C にてオブジェクト指向(的ではなくそのものずばり)なプログラミングができるわけではありません
C++ のコンパイラが存在するからといって機械語が OO でないのと同じです、まず、
C++ URLリンク(ideone.com)
に対応する C のコードを示してください

650:
19/05/24 21:01:09.07 0N6+tWvP0.net
>>629
>言語としてOOPがサポートされてなきゃ認められないでしょ。
激しく同感いたします!

651:デフォルトの名無しさん
19/05/24 21:12:51.85 ZwmHdTYl0.net
>>610
全く問題にならない
classというキーワードがなくても
コードを書く者の考え方次第でカプセル化や継承はできる
FILE構造体がその例だ
多態性がないというのは、おまえさんの認識不足で
関数ポインタでそんなものはすぐに実現できる
そういう認識不足があるからこそ
メジャーなカーネルをなぜ書けたかが理解できないのだ

652:デフォルトの名無しさん
19/05/24 21:15:04.81 ZwmHdTYl0.net
>>630
対応するCのコードを示せるやつがいたら、おまえどうする?
朝8時の品川駅のホームでストリーキングでもするか?

653:デフォルトの名無しさん
19/05/24 21:24:37.67 QPLeHwR8a.net
まあ継承なんてオブジェクト指向と関係ないよ

654:
19/05/24 21:45:54.65 0N6+tWvP0.net
>>632
>classというキーワードがなくても
>コードを書く者の考え方次第でカプセル化や継承はできる
C ではカプセル化はできても継承は不可能ですよ

655:
19/05/24 21:46:59.73 0N6+tWvP0.net
>>633
>対応するCのコードを示せるやつがいたら、おまえどうする?
あなたができないことをそんなにアピールしなくてもいいと思いますよ

656:デフォルトの名無しさん
19/05/24 21:56:28.68 wwZ4gkZH0.net
仮想関数テーブルの実装方法について語るスレはここですか?

657:デフォルトの名無しさん
19/05/24 22:01:07.63 ZwmHdTYl0.net
>>635
いーや、できる
おまえさん禿本やリップマンくらい読んだか?
裸踊りを賭す自信もねえやつがいきがってんなよ

658:デフォルトの名無しさん
19/05/24 22:02:14.93 ZwmHdTYl0.net
>>637
いいぜ
おら、来いや

659:蟻人間
19/05/24 22:06:22.36 /xfbOr910.net
>>630
URLリンク(ideone.com)

660:
19/05/24 22:17:20.89 0N6+tWvP0.net
>>638
ではストロヴストルップやリップマンはどういっているのか、ここに引用していただけますか?
あらかじめいっておきますが、引用はできない、なぜならば、そんな内容をストロヴストルップもリップマンも書いていないのだから

661:デフォルトの名無しさん
19/05/24 22:18:09.05 TMKOHW7N0.net
>>625-627, >>629
オブジェクト指向と言う概念と実装の区別がついてないんだな
低能なプログラマーによくある行動w
例えばLinuxで言えばリダイレクトなんて言うのはもろオブジェクト指向な機能だよね
Applicatlon > xxx
ってやればxxxがファイルならApplicatlon が出力したデータをファイルに書き込むし、xxxが端末なら端末にデータを表示するし、xxxがプリンタならデータを印刷する
Applicatlonは出力先が何であるかを気にする必要はない
もちろんLinuxはC言語でこれを実現してるしより面倒だろうけど当然アセンブラで実装することも可能

662:デフォルトの名無しさん
19/05/24 22:21:05.39 0NhXAFL60.net
概念ならFILE構造体とそれの操作関数群

663:
19/05/24 22:21:27.40 0N6+tWvP0.net
>>640
>typedef struct C
>{
> A ThisA;
> B ThisB;
> int c;
>} C;
これは委譲であって継承ではありません。私は >>626 で「Cでは継承はできない」と主張しており、これを否定するために委譲は使えません

664:
19/05/24 22:23:27.35 0N6+tWvP0.net
>>642
それは smalltalk 的な OO であって C++ の OO の概念とは多少食い違うと思います

665:デフォルトの名無しさん
19/05/24 22:24:05.41 0NhXAFL60.net
コンストラクタとデストラクタの機構だけは欲しいと思ったことがしばしば

666:
19/05/24 22:24:31.62 0N6+tWvP0.net
>>643
FILE は OO 的ではありますが、OO そのものではありません
OO というからには委譲とは別の継承を表現できねばなりませんが、
C では継承を表現できません

667:デフォルトの名無しさん
19/05/24 22:41:32.12 K6buSCwsM.net
glibとか大昔からあるじゃん…
glibがooでないならooの定義をまず示せ

668:デフォルトの名無しさん
19/05/24 22:42:05.32 hUeULEjja.net
オブジェクト指向ってC++固有の概念なの?
だとすると、そりゃCで実現は無理でしょう。関係ないんだから。CとC++は。

669:
19/05/24 22:44:44.02 0N6+tWvP0.net
>>648
glibc++ は OO かもしれませんが glibc が OO だとは寡聞にして聞きませんね

670:
19/05/24 22:45:51.47 0N6+tWvP0.net
>>649
>オブジェクト指向ってC++固有の概念なの?
いいえ、Java も C# も OO だし、 python も ruby も OO で表現できます

671:デフォルトの名無しさん
19/05/24 22:50:26.22 hUeULEjja.net
>>650
GLibだよGLib
今知らないのもどうかと思うけど、使ってみると面白いと思うよ

672:デフォルトの名無しさん
19/05/24 22:51:22.70 hUeULEjja.net
>>651
いや、それだとつじつま合わないでしょ
自分の決めた道を突き進めよ

673:蟻人間
19/05/24 22:53:40.43 /xfbOr910.net
GTKのGLibだよね。

674:
19/05/24 22:54:27.15 0N6+tWvP0.net
>>653
どうつじつまがあわないというのですか?説明ください
私は「OO ならば委譲と区別された継承を記述されなければならない」と主張しています

675:デフォルトの名無しさん
19/05/24 22:55:59.59 K6buSCwsM.net
>>650
glibcじゃねーよ…
gimp、inkscape、gnomeほか様々なソフトウェアで使われてる。
linuxとは無縁だったんだな

676:デフォルトの名無しさん
19/05/24 23:36:16.20 SCqWQYPI0.net
>>629
出来るに決まっている
OO言語はオブジェクト指向プログラミングがやり易いようになっているだけでそれじゃなきゃOO出来ないというのはOOについて理解していないだけ

677:デフォルトの名無しさん
19/05/24 23:46:49.71 SCqWQYPI0.net
>>644
多重じゃない継承の場合Cでは1つめのメンバにベースクラスのインスタンスを書くというルールなだけ
それだけで呼び出し元のコードはほぼなにも考えずにベースクラスの機能を使うことができる

678:デフォルトの名無しさん
19/05/24 23:58:34.02 S5Q/uU3j0.net
>>655
CでもOOできるし、継承できるし、オーバーライドもできる。
20年位前の本に「ANSI C に準拠したコンパイラならできる」と紹介されている。
メモリを意識したコードを書けない人には理解できないけどね。

679:デフォルトの名無しさん
19/05/25 00:01:58.97 7Hh+Cor80.net
C言語はABIが標準化されている、という文を見たんですが、
その標準仕様の名前は何ですか?
新しいプラットフォームがその標準仕様を満たせば
バイナリレベルあるいはソースレベルで移植性があるんでしょうか?

680:デフォルトの名無しさん
19/05/25 00:07:07.65 KPhaQb+n0.net
>>654
ていうかお前、MZ級にウンコな片山博文やんけ。
>>660
標準の名前は無いんじゃないの?
とりあえず「ABI」でググれ。

681:デフォルトの名無しさん
19/05/25 00:11:09.80 oops2jeN0.net
アーキテクチャ跨いでABIが統一できるわけないよね
引数の渡し方なんてアーキテクチャ変わったらそもそも使えるレジスタ変わるし
同一アーキテクチャの特定OS内ならバージョン変わってもABI互換ってのは良くあるけど

682:蟻人間
19/05/25 00:29:35.52 2ZlhwbAL0.net
>>661
そのプライドを大切にしろよ

683:デフォルトの名無しさん
19/05/25 05:52:48.29 Tic4GHY30.net
>>645
お前のOOの定義書いてくれ
俺の思うOOじゃないとか言われたらどうしようもないわなw

684:デフォルトの名無しさん
19/05/25 05:57:11.32 6KmI3UXB0.net
Cでオブジェクト指向プログラムなんて書くのは時間の無駄
速度が必要な部分だけCで作るのが正解

685:デフォルトの名無しさん
19/05/25 06:05:28.22 6T2yG8cn0.net
>>641
てめえの怠慢を俺が尻拭いする筋合いはねえぜ
調べるところまで教えてやったんだ
自分で調べる気がねえなら不勉強のまま取り残されろ

686:デフォルトの名無しさん
19/05/25 07:19:56.39 DOpjF4HUM.net
>>665
> Cでオブジェクト指向プログラムなんて書くのは時間の無駄
そう言うこと
ただ時間がかかると言うのとできるできないの話は別
なのでお前のレスのほうが時間の無駄w

687:
19/05/25 15:51:01.79 jppBZDTS0.net
>>658
>多重じゃない継承の場合Cでは1つめのメンバにベースクラスのインスタンスを書くというルールなだけ
C では構造体のメンバの順番をプログラムから指定することはできたのでしょうか?
C コンパイラはアラインメントを考慮して最適化をはかり構造体のメンバを、プログラマの記述から適宜入れ替えていもいいのでは?
となると一つめのメンバにベースクラスのインスタンスを書いても、コンパイラに入れ替えられてしまっては無意味なのでは?

688:
19/05/25 15:52:11.46 jppBZDTS0.net
>>659
>CでもOOできるし、継承できるし、オーバーライドもできる。
できないとおもいますよ、できるというのなら >>630 を C で記述してみてください
>20年位前の本に「ANSI C に準拠したコンパイラならできる」と紹介されている。
出典を明記ください

689:
19/05/25 15:53:43.84 jppBZDTS0.net
>>666
>てめえの怠慢を俺が尻拭いする筋合いはねえぜ
あなたは私の怠慢を主張するのと同様の筋で、私はあなたの欺瞞を主張します
出典元や引用を正確にできないのであれば、あなたは嘘をついていると判断されてもしかたがないと思います

690:
19/05/25 15:55:14.60 jppBZDTS0.net
>>661
片山先生は私とは比較にならないほど生産性の高いプログラマですよ

691:
19/05/25 16:03:59.98 jppBZDTS0.net
>>652
はじめて知りました、>>650 は勘違いした内容でした、すみません
ご紹介ありがとうございます。今試しているところです!

692:デフォルトの名無しさん
19/05/25 16:17:34.75 Tic4GHY30.net
>>668
真面目な話、規格書読んでこい
ツッコミどころが頓珍漢すぎる

693:
19/05/25 17:02:40.54 jppBZDTS0.net
>>673
コメントありがとうございます。確かに >>668 には誤りが含まれていました
ISO/IEC 9899:1999
6.7.2.1


694:.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つめのメンバにベースクラスのインスタンスを書く >それだけで呼び出し元のコードはほぼなにも考えずにベースクラスの機能を使うことができる 構造体の先頭にパディングがあった場合は、この記述は正しくないのではないでしょうか。



695:
19/05/25 17:37:11.41 jppBZDTS0.net
>>674
よくよく考えると、私の「この記述は構造体のパディングが構造体の先頭に詰められる場合を排除していないと考えます」もかなり疑わしい、
パディングというものは、一つのメンバがあって、それに対してもう一つのメンバを置くときにパディングを置くものであって、最初からパディングを置く必然性がないですね
struct S {
int a;
} b;
のとき
&b = &(b.a)
は保障されている、時間がたつにつれてそんな気がどんどんしてきました…
>>658 を認め、同時に単一継承であれば C で OO と継承を表現できることを認めます

696:
19/05/25 18:11:59.97 jppBZDTS0.net
>>674
> a type consisting of a sequence of members, whose storage is allocated …
この is にも惑わされてしまいました
これは
a type consisting of a sequence of members, each of which is allocated about storage in an ordered sequence
とか
a type consisting of a sequence of members, each of which's storage is allocated in an ordered sequence
くらいに解釈するべきなんですね
検討する機会をいただきありがとうございました

697:デフォルトの名無しさん
19/05/25 21:04:32.61 DDy3bloZM.net
>>675
絶対許さんぞおおおお

698:デフォルトの名無しさん
19/05/25 21:07:06.72 aM9QB8YDa.net
オブジェクト指向って抽象化が目的なのに、メモリ配置とか気にするのは馬鹿みたいだよな

699:デフォルトの名無しさん
19/05/25 21:23:55.56 cjrLAMgS0.net
MicrosoftのCOMはほとんど全てのコンパイラが構造体のメモリ配列を同じ様にするってのを利用してるんだっけ?

700:デフォルトの名無しさん
19/05/25 22:13:30.07 UN9uDEfaM.net
>>678
ここにも概念と実装の区別がついてないバカが…w

701:デフォルトの名無しさん
19/05/25 23:25:49.27 KPhaQb+n0.net
>>669
C言語でオブジェクト指向を表現する (クラス、継承)
URLリンク(qiita.com)
この辺でも読んどけ。
「何故できるか」まで言及したもっといい文献はあるがカスには教えない。
俺は「せざるを得ない」状況だったのでCでOOしたが、ネイティブでOOできるならそれに越したことはない。
あ、同じ板でハッシュが一致してるのでお前は蟻。

702:デフォルトの名無しさん
19/05/26 01:24:13.78 zv+FEFKTa.net
>>681
またおまえか

703:デフォルトの名無しさん
19/05/26 08:36:08.16 o+/j3IaP0.net
>>670
は? 俺は主張なんざしてねえぜ
事実をありのまま指摘しただけだ
何勘違いしてやがる
というか勘違いということにせねば立場がねえってかw

704:デフォルトの名無しさん
19/05/26 08:56:22.54 7tI1cTYc0.net
もうこんなとこで喧嘩しても勝敗つかないんだからやめろw
仲良くできねえのかお前らは

705:デフォルトの名無しさん
19/05/26 12:29:05.12 lzKtO2WM0.net
でも冷静になって考えてみろ
単細胞時代から何億年と喧嘩してきた結果今の人間がいる訳だから喧嘩をやめてしまったらそれは果たして生物と言えるのか
逆に言えばAIが人知を超える時
人間は機械に滅ぼされ地球から人間はいなくなっているという事
つまり今何をすべきかと言うと人間は思考をやめアホになるべきである


706: そうアホの坂田こそ未来の救世主ネオなのである



707:
19/05/26 15:17:23.15 CpBTYp0n0.net
>>681
そのご紹介のリンク先は、内容について、はっきりいって詰めが甘いです
すなわち、継承と委譲を区別できていません
そんな中途半端な理解で quita に掲載するとか、玉か石かどちらかといえば、石の部類でしょう、全然参考になりませんでした
そんな中途半端な内容の記事を掲載するあなたも同様と判断いたします

708:
19/05/26 15:19:14.79 CpBTYp0n0.net
>>683
事実かどうかは、主観的か客観的か、に依存すると思いますが、
相対論においてはすべての事象について純客観的などありえない…①
ので、①より、あなたは主観を主張しているものと私は理解します

709:デフォルトの名無しさん
19/05/26 15:46:43.76 aNhG7Lwu0.net
>>686
「継承」に必要な操作一式を委譲に基づいて提供できているなら継承できていると思うんだけど、
言語サポートを伴って暗黙的に機能しない限り「継承」と呼ぶべきではない、ということなの?
そこで明確に区別することにあんまり意義が見出せないんだけど、その定義どっか出典示せる?

710:
19/05/26 15:52:14.70 CpBTYp0n0.net
>>688
委譲による実装で継承を実現できているのなら、それは継承(の一形態)である、…① という主張ですね
①は私にも理解できますが、委譲はダイヤモンド継承を回避できない欠点があるのでは、と考えています
「ダイヤモンド継承」については C++ の書籍には大概載っているかと、具体的な書籍名は探しておきます

711:デフォルトの名無しさん
19/05/26 16:00:20.28 Jdhtsrqd0.net
まあ継承なんてオブジェクト指向と関係ないからね

712:
19/05/26 16:02:51.60 CpBTYp0n0.net
>>690
それは初耳です
Object Oriented に継承は憑き物だと思っていました、継承のない OO って存在するのですか?それは例えばなにですか?

713:デフォルトの名無しさん
19/05/26 16:08:55.02 aNhG7Lwu0.net
>>689
ちょっと何言ってるかわからないな。
ダイアモンド継承の問題を「継承」で回避しているが委譲では回避できないであろう例を挙げてくれたら考える。
明確に区別しないことも理解できると言うなら「詰めが甘い」とか「中途半端」とか言ってたのは何なのか・・・。

714:デフォルトの名無しさん
19/05/26 16:22:19.45 Jdhtsrqd0.net
>>691
なにって、言語を知りたいということ?

715:デフォルトの名無しさん
19/05/26 16:37:44.23 vwTAovQx0.net
クラスベースのOOP言語ではクラスの継承は一般的だけどプロトタイプベースのOOP言語では継承の概念は存在しないよ

716:
19/05/26 16:40:12.48 CpBTYp0n0.net
>>692
クラス A, B, C, D について、
A のメンバ変数を a とする、また
B->A(B は A を派生する)
C->A
D->B, C (多重継承)
において、これを委譲で実装すると、B.A.a と C.A.a が同じであるべきにもかかわらず二重にインスタンスとして生成されてしまうので、
継承で実装した D.a を、委譲で実装した D.B.a と同一視するか、D.C.a と同一視するか、また継承における D.a を更新した場合に委譲では D.B.a と D.C.a の両方を更新するコードを生成しなければならないのか、
等あいまいな部分がでてくる、これがダイヤモンド継承問題です
継承で実装すれば、C++ ではこれを仮想継承といいますが D.a の実態を一つに限定することができますし、D.B.a, D.C.a の両方を保存することもできます、つまりモデリングにおいて選択肢を準備できる
しかし委譲で実装すると D.a の実態を一つに限定することが不可能です、つまり選択肢を準備できません
以上より委譲で継承のすべてを代行できないため、委譲と継承を区別する必要が生じると考えます
ただし、多重継承を認めないのであれば、委譲と継承は同一視しても差し支えないと考えます

717:
19/05/26 16:41:21.10 CpBTYp0n0.net
>>693-694
ふーん、インタプリタ JavaScript には継承はないのですか

718:デフォルトの名無しさん
19/05/26 16:41:38.74 vwTAovQx0.net
URLリンク(ja.m.wikipedia.org)

719:
19/05/26 17:08:49.07 CpBTYp0n0.net
>>692
>明確に区別しないことも理解できると言うなら「詰めが甘い」とか「中途半端」とか言ってたのは何なのか・・・。
「単一継承に限定するのならば委譲による継承の実装も可能である」という意味での>>689の「理解します」の文言だと解釈ください
ただし委譲で継承をすべて実現できないので、>>681 掲載のリンク先は「詰めが甘い」と判断せざるを得ない、そんなリンク先を紹介する >>681 も同様と判断するものです

720:デフォルトの名無しさん
19/05/26 17:11:49.57 iR9VJ5EUa.net
継承がオブジェクト指向と無関係なんだから、委譲で実現する必要がない

721:デフォルトの名無しさん
19/05/26 17:25:25.86 aNhG7Lwu0.net
>>695
C++が仮想継承・多重継承でやっていることをコードで書き下せば済む話。
アップキャストがnopで済むか、オフセットの足し算になるかなどの詳細に基づいて区別しろってことに
聞こえるんだけど、やっぱりそんな区別の意義が見えてこない。

722:デフォルトの名無しさん
19/05/26 17:39:21.34 kcdU4Ge60.net
もうそろそろ別スレ立ててやれや
> それは smalltalk 的な OO であって C++ の OO の概念とは多少食い違うと思います
とか言う様な奴を相手にしても永遠に終わらんと思うが…

723:
19/05/26 17:50:19.72 CpBTYp0n0.net
>>700
>C++が仮想継承・多重継承でやっていることをコードで書き下せば済む話。
そこで実現されているのは私のいうところの継承であって、私のいうところの委譲ではありません
委譲ではダイヤモンド継承に対応できない(選択肢を提供できない)
したがって、委譲と継承とは区別するべきであり委譲で継承を実装するべきではない、という私の主観には一貫性があると思います

724:デフォルトの名無しさん
19/05/26 17:56:41.22 NrZyzakr0.net
>>702
継承はだめだよ
これから使ったら反省文ね

725:デフォルトの名無しさん
19/05/26 18:07:56.35 aNhG7Lwu0.net
>>702
むちゃくちゃだなぁ。「私のいうところの」「継承」「委譲」の区別がどうにも掴めないし、
その区別の意義も示されなさそうだし、迷惑してる人もいるみたいだから、離脱させてもらうよ。

726:
19/05/26 18:09:31.06 CpBTYp0n0.net
>>703
私がいつ「継承は要らない子」とかいいましたか?
あくまでも「継承を委譲で実装できない」とは言っていますが(これは部分的に意見を修正していますが)「継承不要論」とかは一切主張していないと考えていますよ

727:
19/05/26 18:13:13.41 CpBTYp0n0.net
>>704
継承と委譲の区別は必要だと思いますよ、その言葉を贈らせていただきましょう

728:デフォルトの名無しさん
19/05/26 18:34:08.86 NrZyzakr0.net
>>705
だから、世界の共通認識として要らないもの。
使っちゃだめ。

729:デフォルトの名無しさん
19/05/26 18:57:26.86 mCW+tIqA0.net
もういい加減やめてくれないかな
やりたいなら、Cでクラス実装とかって
別スレたててその中でやってくれ

730:デフォルトの名無しさん
19/05/26 19:03:45.32 NrZyzakr0.net
>>708
またおまえか

731:デフォルトの名無しさん
19/05/26 20:50:42.22 o+/j3IaP0.net
>>706
私のいうところのって、最初の論旨からずいぶん乖離しているな
カプセル化や継承ができるかどうかって話だっただろうがよ
いつから、おまえのお気に召すかどうかって話になったんだよ

732:デフォルトの名無しさん
19/05/26 23:38:41.06 SA/0I36h0.net
>>686
煽って、良い文献の情報を得ようとしているのだろうが、カスにはやらんよwwww

733:デフォルトの名無しさん
19/05/27 01:54:45.96 sXav5Bzw0.net
URLリンク(jp.quora.com)

734:デフォルトの名無しさん
19/05/27 02:52:02.77 jiPRfYyG0.net
ソロソロ終わって良いですよね?
この議論は、C使っている人とは違う世界に感じる

735:デフォルトの名無しさん
19/05/27 03:09:42.07 HzhW79+j0.net
>>713
またおまえか

736:デフォルトの名無しさん
19/05/27 09:01:49.81 Nqk3VxBP0.net
stddef.hをインクルードして
#


737:define __STDC_WANT_LIB_EXT1__ 1 を定義して -std=c11をつけても gccでrsize_tが使えないですけど なぜですか? windows版のGCCでは使えました



738:デフォルトの名無しさん
19/05/27 09:23:40.73 or6IbtWZa.net
defineの順番とか…

739:デフォルトの名無しさん
19/05/27 09:34:14.79 Nqk3VxBP0.net
>>716
順番は試しましたが駄目でした

740:デフォルトの名無しさん
19/05/27 10:04:44.33 PB+ZSyAza.net
rsize_tって多分オプションだから実装されてないよね?
windowsはなぜか実装してる

741:デフォルトの名無しさん
19/05/27 10:11:08.57 Zyn15i1D0.net
C#でポインタ使えばC、C++は無くても良いんじゃないですか?

742:デフォルトの名無しさん
19/05/27 10:15:55.39 gR3ITcWOM.net
C#使うならポインタのように面倒臭いこと考えなくても変数でも関数でも参照できるだろ

743:デフォルトの名無しさん
19/05/27 19:48:50.47 0mZL0xC90.net
C#のポインタはC/C++ほど使い勝手が良くない
C#でポインタを使ったところでパフォーマンスはC++の半分程度
まあトータルで見れば最優秀クラスの言語なのは間違いないけどね
C++みたいなスパゲティ言語ではないし

744:デフォルトの名無しさん
19/05/27 20:36:21.78 f4m/nmMua.net
まあ、だいたいの後から出た言語はC/C++の欠点を補おうとしているのでポインタがあっても安全なのが普通だな。

745:デフォルトの名無しさん
19/05/27 20:42:45.71 MaSSH1d10.net
安全じゃないのがc#のポインタの特長だろ。
特徴じゃなく

746:デフォルトの名無しさん
19/05/27 21:12:57.55 RgnUDQi4a.net
そりゃC#のポインタ使うにはunsafeオプションが必要だからね。安全じゃないわね。
C#のポインタは過去資産APIを使うための必要悪って感じか。

747:デフォルトの名無しさん
19/05/28 07:12:55.99 gr6HI2ftM.net
>>722
Cの前からでてたPascalにもポインタはあるんだが…
むしろC/C++が例外的

748:デフォルトの名無しさん
19/05/28 09:09:59.25 HGTlDNNW0.net
数年前からこのプロジェクトがちょっと注目されてるけどどう思う?
RustはC++を置き換えてもCを置き換えないだろうと思うし、
ZigはCの置き換えとしては妥当なんじゃないかという気がする。
Cより高速、単純、堅牢らしい。
URLリンク(ziglang.org)

749:デフォルトの名無しさん
19/05/28 09:29:30.01 HGTlDNNW0.net
Cより速いと主張
>Speaking of performance, Zig is faster than C.
単純な言語仕様
>Small, simple language
性能と堅牢性
>Performance and Safety: Choose Two
個人的にとても興味を持ってるんだが

750:デフォルトの名無しさん
19/05/28 17:05:35.46 5GqHhS1Q0.net
CはC++ほどではないにせよ色々酷いから
Cを置き換えられる言語があるなら見てみたいしぜひ置き換えてほしい

751:デフォルトの名無しさん
19/05/28 17:30:53.21 vL2LyOeQ0.net
>>726
URLリンク(www.spriters-resource.com)
ちょっと検索してみたらもうドット絵まで準備されてるらしい
さすがに西洋人は仕事が早いな

752:デフォルトの名無しさん
19/05/28 19:02:59.10 Pzgny9jf0.net
URLリンク(www.datadeliver.net)
キューを実装する?プログラムを書いたのだがコアダンプになってしまったため、どこが悪いのか調べるために1回だけenqueueをするように変えたら無限に10を生成するようになってしまった
どこが悪�


753:ゥったのか、どうして10が無限に生成されるのか、教えて欲しい 環境は学校の端末演習室でやったから詳しいことはわからんです



754:デフォルトの名無しさん
19/05/28 19:04:37.65 F6815kaN0.net
>>730
それじゃあ検証のしようがない
ネットカフェで書いてここに晒せ

755:デフォルトの名無しさん
19/05/28 20:11:39.46 vL2LyOeQ0.net
「無限に10を生成するようになってしまった」「どうして10が無限に生成されるのか」
コレがポイントだな
無限に生成してるように見えるだけだよ
要するにprintが悪い
whileだと分かりづらいんだよ
forだとラク
「q->head = temp;」とか、自分で書いてて分からなかったんだろ
だからwhile文だとこのケースでは分かりにくくなる
forを試gうのが正解
void print(struct queuel *q){
struct cell *pt;
printf("[");
for( pt = q; pt != NULL; pt = pt->next ){
printf(" %d", pt->data);
}
printf(" ]\n");
}

756:デフォルトの名無しさん
19/05/28 21:09:24.77 Rd7hCJnFa.net
>>725
Pascalの方が先にできたんだっけ?
まあでも用途が大幅に違うよね。Pascalはコンピュータの学習用の高級言語でCはOS記述用でアセンブラ代わりに使う言語。

757:デフォルトの名無しさん
19/05/28 21:27:52.19 jSvCRMUQ0.net
Pascalが嫌いな人が作った言語だ

758:デフォルトの名無しさん
19/05/28 22:21:26.92 /lAZ9dU10.net
>>733
だからそんなことを言い出したら>>722の言うポインタが安全な言語って用途が違う言語だよね
って話にしかならないんだが…

759:デフォルトの名無しさん
19/05/28 22:24:51.47 Rd7hCJnFa.net
>>735
まあそうだな。
Cは用途が違う上に古くて安全性が低い感じか。

760:デフォルトの名無しさん
19/05/28 23:20:22.65 jSvCRMUQ0.net
安全性って何だよ
インテルのerrataみたいなことか?

761:デフォルトの名無しさん
19/05/28 23:34:40.02 IamnQRk90.net
子供にはナイフを使わせるなというのと同じ類いか

762:デフォルトの名無しさん
19/05/29 04:57:03.97 mWed49vm0.net
>>736
いやOSを書くにはその安全性が邪魔になるから両立は難しいよ

763:デフォルトの名無しさん
19/05/29 06:20:35.18 D5Uzvk1s0.net
OSのコードはどんな感じなの?
ポインタを使ったトリッキーな事をやってるの?
未だにLinuxでバッファオーバーフローの脆弱性出てるよね

764:デフォルトの名無しさん
19/05/29 06:48:57.50 Bfh00rIBM.net
>>740
OSのソースなんてちょっとググればいくらでも出てくるから自分で見なよ

765:デフォルトの名無しさん
19/05/29 07:45:37.52 6C23lth10.net
見たこともないやつが議論してたのかよ

766:デフォルトの名無しさん
19/05/29 08:03:59.01 aFUCBt4U0.net
詳細linuxとかいう1000ページの宗教書だろ
持ってるだけで御利益がある

767:デフォルトの名無しさん
19/05/29 08:13:08.04 akQz27P/d.net
オープンソースなのだから1分もあればソースコードくらい見られるだろうに

768:
19/05/29 18:31:01.76 8RGCI4670.net
>>740
>未だにLinuxでバッファオーバーフローの脆弱性出てるよね
最近は聞かないね…

769:デフォルトの名無しさん
19/05/29 19:51:04.91 D+pGsdPRa.net
今普通に静的・動的解析使うとバッファオーバーフローなんてあり得ない感じするわ。

770:デフォルトの名無しさん
19/05/29 20:40:15.44 rT4tqcG+0.net
strcpyとかsprintfとか使ってるコードはまだたくさんあるでしょ
dstのサイズ指定しないライブラリとか

771:デフォルトの名無しさん
19/05/29 21:00:57.32 FFsAnOexa.net
Cは標準ライブラリ考え直した方が良いかもね。

772:デフォルトの名無しさん
19/05/31 08:23:23.52 JBiczG6TM.net
Cが最も好きだけど、
C十十のほうがライブラリが
便利なのあるから、
個人で趣味で作るものは最近は
CとC++�


773:ャ在で作ります。 わりと自由に混在できるので とても助かってます。 こうゆの俺だけですかね?



774:デフォルトの名無しさん
19/05/31 08:28:11.59 7PD5X056a.net
C††

775:デフォルトの名無しさん
19/05/31 08:30:02.90 LyENK1r60.net
C‡‡

776:デフォルトの名無しさん
19/05/31 09:21:15.46 GTUdpXapa.net
С++

キリル文字

777:デフォルトの名無しさん
19/05/31 18:42:40.60 JBiczG6TM.net
C十十つ
―ー

778:デフォルトの名無しさん
19/05/31 18:46:16.16 4felF8bG0.net
C田田

779:デフォルトの名無しさん
19/05/31 19:11:42.88 Ki0lpFF5M.net
C云々

780:デフォルトの名無しさん
19/05/31 19:45:27.77 /GnAMAD/a.net
⊂┼┼

781:デフォルトの名無しさん
19/05/31 21:44:53.32 r0b/3vSWd.net
C言語認定一級を取得したら転職でどれぐらい評価されますか?

782:デフォルトの名無しさん
19/05/31 21:48:01.31 I0+j7s4/a.net
さあ?
その会社がどの程度その知識を必要としているかで変わるのでは?

783:デフォルトの名無しさん
19/05/31 21:48:52.32 r0b/3vSWd.net
>>758
そういうときは一般化して正確じゃなくても妥当な範囲で思考して回答する癖をつけましょうね~

784:デフォルトの名無しさん
19/05/31 21:56:26.15 OHagz7+U0.net
うちの周囲じゃ全く参考にもしていないし資格給が出るわけでもないって所が多いな

785:デフォルトの名無しさん
19/05/31 22:06:46.05 4X6MeSMk0.net
英検1級の方が重要そう。

786:デフォルトの名無しさん
19/06/01 11:44:52.57 2YdNSpFdd.net
URLリンク(codepad.org)
雨が降る様子を自分の今持ってる知識だけで作ろうとしたんですが、表現が上手くできてない気がします
だれか改善案があれば助言お願いします

787:デフォルトの名無しさん
19/06/01 18:13:48.99 w9UetZ9K0.net
>>762
それはC言語の問題ではなかろう

788:デフォルトの名無しさん
19/06/01 18:56:55.84 2YdNSpFdd.net
>>763
抜けてました
プログラムの問題として、実行すると縦に雨粒が重なってしまうのが目立っていて、この原因がわからず質問しようと思いました。

789:デフォルトの名無しさん
19/06/01 19:26:44.16 w9UetZ9K0.net
>>764
それは使用する言語とは無関係に、雨らしく見せるアルゴリズムの問題ではないか?
ある処理をC言語で実現したいがどう書いていいか分からないとか、書いたものが想定通りにならないのはなぜかとかなら答えようがあるが。

790:デフォルトの名無しさん
19/06/01 21:18:58.51 2YdNSpFdd.net
>>765
1番上の行で雨を発生させるとき何列目で発生させるかは乱数できめているはずなのに、何行か連続で同じ列に発生しているのがよく見られていて、それが何故なのかがわかりません。
このプログラムは改良中のもので、その前のプログラムは雨粒が全部同じ速さのやつを作っていてそれは問題なく(上の現象も起きず)動いていたので、乱数でなくプログラムの問題かなと思って質問しました

791:デフォルトの名無しさん
19/06/01 21:37:41.87 njUSTe0T0.net
>>766
乱数っていうのは偏るものだから、同じ列に連続して発生することが普通。
同じ列に発生しないような作為をする場合は乱数とは言わないと思う。
URLリンク(twitter.com)
あと、'o'が縦に連続するのに違和感があるのなら'|'などに置き換えれば良いと思う。
URLリンク(i.imgur.com)
みたいな感じで
適当に作っててチカチカしちゃってるからあまり参考にならないかもしれない
(deleted an unsolicited ad)

792:デフォルトの名無しさん
19/06/01 22:01:32.09 2YdNSpFdd.net
>>767
すごい!!!
一気に雨っぽく見えるようになりましたw
乱数の件大変


793:勉強になりました もっと改良するとしたら、そのツイートのように不自然に見えるランダムさをなくすため振るいにかけるような工夫もしてみようと思います。 あと、もしよければGIFのやつのソースコードを貼ってもらえないでしょうか。よろしくお願いします



794:デフォルトの名無しさん
19/06/01 22:03:49.20 gZsm+Fjra.net
一様分布でなくても乱数とは言えるだろう

795:デフォルトの名無しさん
19/06/01 22:10:20.53 njUSTe0T0.net
>>768
一応貼るけど自分はC言語あまり得意でない上に適当にササっと作ったのだからあんまり参考にはしないでほしい
URLリンク(ideone.com)
system("cls")で画面更新してるけどチカチカさせずに滑らかに動かしたいならpdcursesとか使ったほうが良いと思う
あとLinuxだったらclsでは動かない

796:デフォルトの名無しさん
19/06/02 08:12:25.21 Df5btDJSd.net
>>770
ありがとうございます!
初心者なので関数の使い方とか、あと自分がいかに無駄なコードを書いてたかとかがわかってとても参考になります
調べてみようと思います。ありがとうございました

797:デフォルトの名無しさん
19/06/02 13:28:56.70 gM/IYiKd0.net
constが外れるのにキャストせずに
char *p = "abc";
とできることを定めている条文どこだっけ?

798:デフォルトの名無しさん
19/06/02 14:35:27.10 hvNC8EHQa.net
初期化はちょっと違うんじゃねえかな

799:デフォルトの名無しさん
19/06/03 19:44:47.54 JpBlPJqE0.net
URLリンク(i.imgur.com)
ちんぷんかんぷんなので教えて下さい

800:デフォルトの名無しさん
19/06/03 19:47:13.69 aVpNGdHY0.net
火の玉ストレートでワロタw

801:デフォルトの名無しさん
19/06/03 19:51:23.16 NMMhu3n80.net
>>774
糞みたいな問題だな
家木臭すぎ

802:デフォルトの名無しさん
19/06/03 19:56:34.99 JpBlPJqE0.net
解決しました

803:デフォルトの名無しさん
19/06/03 19:56:39.36 vGrK+0JX0.net
もうちょっときれいに写せないのか

804:デフォルトの名無しさん
19/06/03 21:20:26.29 CuEu7mica.net
影があって見えない。
ていうか、試験中に撮影して書き込みか?
思い切ったカンニングだな。

805:772
19/06/03 22:17:42.98 V6PZ+bAi0.net
(3)のとこ、この試験問題を作った教官がどういう教え方をしているのか聞かせてくれ

806:デフォルトの名無しさん
19/06/03 22:19:26.68 V6PZ+bAi0.net
正解は *(const char **)&s なんだが解答群にねえだろ

807:デフォルトの名無しさん
19/06/04 01:35:34.87 TgdlAqGq0.net
>>781 C++11以降でもなさそうだし、回答群にあるsでいいでしょ。

808:デフォルトの名無しさん
19/06/04 07:58:43.31 e9k+jtYr0.net
タイミングがよすぎるし>>772>>774は同一人物なのかな

809:デフォルトの名無しさん
19/06/04 10:12:17.26 prB+PlYza.net
ワッチョイからすると別のようだが

810:デフォルトの名無しさん
19/06/04 10:47:57.52 PKXus+yhx.net
簡単なテストがちんぷんかんぷんな人が規約を気にするとは思えない。

811:デフォルトの名無しさん
19/06/04 11:04:10.57 eBRK1s1cH.net
【速報】金券五百円分とすかいらーく優侍券をすぐもらえる   
URLリンク(pbs.twimg.com) 
     
① スマホでたいむばんくを入手  
② 会員登録を済ませる     
③ マイページへ移動する   
④ 招待コード→招待コードを入力する [Rirz Tu](スペース抜き)     
   
今なら更に4日18時までの登録で2倍の600円の紹介金を入手    
クオカードとすかいらーく優待券を両方ゲットできます。  
    
数分で終えられるのでぜひお試し下さい。 

812:デフォルトの名無しさん
19/06/04 13:24:20.51 VVsdR08YH.net
>>786
QUOカード良いな

813:デフォルトの名無しさん
19/06/04 15:35:37.38 ZIqEmt8SM.net
>>786
複数スレに書き込みまくってID変えてレスも書き込みまくってる。

814:デフォルトの名無しさん
19/06/04 17:39:59.80 dFy1Csfg0.net
迷惑メール来るようになるっていう報告もあるからこれはスルーしたほうが良いと思う

815:デフォルトの名無しさん
19/06/04 17:46:57.34 VrCvogjT0.net
ありとあらゆるスレに貼られてるbotだから気にしなくていいぞw

816:デフォルトの名無しさん
19/06/04 17:48:42.06 rpsLXROr0.net
内容を変えてNG対策すり抜けをやろうとしているから、悪質だと考えた

817:デフォルトの名無しさん
19/06/04 18:10:41.59 QEritYjya.net
サービスの提供もとに不正行為として通報して、そいつの招待コードとやらを無効にさせられないかな。

818:デフォルトの名無しさん
19/06/04 18:49:11.42 rpsLXROr0.net
提供元も共犯だろう

819:デフォルトの名無しさん
19/06/04 20:15:40.66 dFy1Csfg0.net
これってどこの企業がやってるんだろう
普通に5chでは荒らしに近い迷惑行為だしなんとかできないかな

820:デフォルトの名無しさん
19/06/04 20:19:32.69 RBIldFVda.net
しかし500円だの600円だのしょぼいな。
PayPayみたいにずっと二割引でたまに全額当たるぐらいやらなきゃ宣伝にならんだろう。

821:デフォルトの名無しさん
19/06/04 20:43:44.67 rpsLXROr0.net
宣伝じゃなく、個人情報の収集だから

822:デフォルトの名無しさん
19/06/05 00:33:04.12 ZHHYr8Rz0.net
とてもいいアプリだからダウンロードして星つけてあげたらいいと思うよ

823:デフォルトの名無しさん
19/06/05 10:04:09.95 Fd++qFdya.net
激しいステマ

824:デフォルトの名無しさん
19/06/07 16:33:58.73 uIEpx76AH.net
真って0でしたっけ?1でしたっけ?0以外でしたっけ?1以外でしたっけ?

825:デフォルトの名無しさん
19/06/07 17:02:27.40 HLWbZT6Fa.net
>>799
bool型の1です。

826:デフォルトの名無しさん
19/06/07 17:27:02.62 RHh4qcVs0.net
0以外は真として扱われることが多いな。
0は明示的にfalseになると思う。
そのfalseの否定がtrue。

827:デフォルトの名無しさん
19/06/07 17:31:47.53 OLbvc6Nr0.net
論理演算結果を整数化したら 偽が0 真は1
整数を論理評価したら 偽が0 で真はそれ以外

828:デフォルトの名無しさん
19/06/07 17:33:03.09 sehGKr170.net
#define TRUE (1==1)
#define FALSE (!TRUE)
こんな事書いてたな
値がいくつなのかは気にしなかった

829:デフォルトの名無しさん
19/06/07 20:41:26.72 NHeyKhkN0.net
OR EAX,EAX
JZ FALSE
JNZ TRUE
こんなんか?

830:デフォルトの名無しさん
19/06/07 21:31:11.89 51aJPRpO0.net
TRUEと比較するなって先輩に言われたろ

831:デフォルトの名無しさん
19/06/07 21:37:49.54 e6zybBXY0.net
!!a == TRUE ならセーフになると思われるー

832:デフォルトの名無しさん
19/06/07 22:15:27.47 RQudHa2vd.net
論理演算では1が真なのに終了は1が異常終了なのはなぜですか?
1が正しく0が間違いというイメージなのですが

833:デフォルトの名無しさん
19/06/07 22:18:06.19 RHh4qcVs0.net
昔はintを返す習慣が多分にあったのでその習慣によるが、自分は異常終了は-1返してたな。

834:デフォルトの名無しさん
19/06/07 22:19:30.98 0dWbT8qma.net
>>807
いや、boolが戻り値なら真を成功にすることがむしろ多いと思う。
「エラーを返す」関数の需要が多いということではないか。

835:デフォルトの名無しさん
19/06/07 22:21:18.54 51aJPRpO0.net
エラーの種類を沢山返せるから

836:デフォルトの名無しさん
19/06/07 22:23:25.13 e6zybBXY0.net
正常というのは1つの状態しかないが
異常には色々な種類があるのでそれを区別するためにコードとして返したい
というのと
2値しかない真偽をどう値に配分するか
というのを同列に並べるとパニック。 C言語では別のものとして割り切る

なぜC言語では偽を0に割り当てたのか?という問いの答えを求めているのならば…
俺は知らない

837:デフォルトの名無しさん
19/06/07 22:23:54.80 Bjvb97BWx.net
>>807
正常は 0でいいけど、異常はいろいろな状態の別を報告できるようにでは

838:デフォルトの名無しさん
19/06/07 22:30:40.09 51aJPRpO0.net
ソフト会社に長年いて開発者からこの質問は初
OSインストールできませんなんてすごく高度なんだなって思った
コマンドのテストでコマンドの戻り値ってあるんですがなんですか?

839:デフォルトの名無しさん
19/06/07 22:36:39.33 0dWbT8qma.net
>>813
windowsの終了ステータスの確認の仕方とか忘れるしなあ。
言葉で出てくる結果しか見れないなんて普通だと思うわ。

840:デフォルトの名無しさん
19/06/07 22:42:11.06 xj9RlcCA0.net
0が偽なのにnoerrというイカれた慣習はどうして生まれたんだろうねぇ。

841:デフォルトの名無しさん
19/06/07 22:58:47.67 DaiiMVNnx.net
最初に誕生した OS、system/360 の JCLでも、正常は 0、警告が 4だったか 8だったかで、異常が 8だったか 16だったかだったな
z/OSでも同じだろうけど
知らんけど

842:デフォルトの名無しさん
19/06/07 23:33:27.02 sehGKr170.net
幸福な戻り値はどれも似たものだが、不幸な戻り値はいずれもそれぞれに不幸なものである。

843:デフォルトの名無しさん
19/06/07 23:33:41.86 nzmV+Edn0.net
if (error == 0)
で違和感ないじゃん

844:デフォルトの名無しさん
19/06/08 03:30:43.12 KzIynz9K0.net
0 informational
1 warning
2 error
3 severe
4 critical

845:デフォルトの名無しさん
19/06/08 11:21:36.15 5iouJYEP0.net
返り値0でエラーなしはUNIXのコマンド終了ステータス以来の慣習かな。
「正常終了」は状態が1種類しかないけど、失敗は「どう失敗したか」で
複数の状態があるから、正常で0、他の値はエラーコードってのは便利でしょ。
論理演算子の結果で true false の1と0は、論理学の数値表現を
プログラム言語にそのまま写しこんだからじゃないかと。
関数は一般にエラー状態を返り値で返す、と思っていれば
正常 == 返り値0 == false は違和感ないかと。
このルールから外れてるのは「失敗時にNULLを返す」タイプの関数で、
結構たくさん存在するのが困ったところだけど。

846:デフォルトの名無しさん
19/06/08 11:32:28.80 7CBKOF2N0.net
Cでは同一のもとして動かせてしまうが
そもそもエラーコードとboolを同一視してる時点で論外なんだが

847:デフォルトの名無しさん
19/06/08 11:38:57.76 WG7jlf5q0.net
論理型を別に設けずに整数型で代用してしまおうというアイデアはBやCの言語仕様をコンパクトに
抑えるのに役立ったが、今となってはプリプロセッサマクロと同じくらいの悪しき遺産だなぁ。

848:デフォルトの名無しさん
19/06/08 14:58:06.03 KzIynz9K0.net
え、何か問題あるか?

849:デフォルトの名無しさん
19/06/08 15:35:48.39 X+3AMWAUM.net
C99以降であれば_Bool型を使えばいいのでは?

850:デフォルトの名無しさん
19/06/08 15:41:42.45 KzIynz9K0.net
ダメだこりゃ

851:デフォルトの名無しさん
19/06/08 15:41:57.08 bm2ApAetM.net
正常時1で異常時0を返す関数が混ざってたり
正常時ポインタで異常時ヌルポ返す関数があったり
それらの関数の返り値を全部 if でチェックしててカオスだったことがあります

852:デフォルトの名無しさん
19/06/08 15:56:39.68 KzIynz9K0.net
BOOLを返す関数が負数を返したかどうか調べにゃあかんやつとかな

853:デフォルトの名無しさん
19/06/08 16:38:04.87 WG7jlf5q0.net
ワインバーグの本にあったなあ。ドル紙幣はみんな同じ色、同じサイズで見分けがつきにくいけど、
それが常識だと思っている人は、一定の確率で間違えてしまうことも世界の法則で仕方のない
ことだと思っているとか。

854:デフォルトの名無しさん
19/06/08 17:13:44.27 auwh2hzj0.net
>>827
GetMessage()の悪口はいくら言ってもよいぞ
DWORDにしとけよ

855:デフォルトの名無しさん
19/06/08 18:39:07.71 jm0tDZO60.net
>>826
カオスっていうかこれ普通じゃない?
標準ライブラリのラッパー書くとき互換性保つために0成功にするでしょ
で他のオレオレライブラリはboolという

856:デフォルトの名無しさん
19/06/08 18:53:36.19 jXs/KV+s0.net
戻り地がboolのときはtrueが成功
intのときは0が成功なんだよ

857:デフォルトの名無しさん
19/06/08 19:39:01.75 ogfAGAzJ0.net
bool型ができたのはC99のときなので

858:デフォルトの名無しさん
19/06/08 19:42:23.71 jm0tDZO60.net
boolぐらいなにもインクルードしなくても使わせてくれぽよ

859:デフォルトの名無しさん
19/06/08 19:54:54.89 ogfAGAzJ0.net
「歴史的理由」という奴

860:デフォルトの名無しさん
19/06/08 21:28:56.66 gCLo3iIIa.net
>>830
それのせいでPrelではシステムコールと同名の関数の返り値がいまいち統一取れてなかったりして、結局マニュアル見ながら個別に覚えざるを得なかったりする。
Perlはだいたいは1が成功でundefが失敗なんだけどね。(undefはCでのNULLみたいなもの。未定義を意味する。定義されてて値が0の時とは違うが、書き方によっては同じように扱えることもある)。

861:デフォルトの名無しさん
19/06/08 21:58:16.60 nbjDJ9kZa.net
今C++にあるoptionalだっけ?
あんな感じの有ってもいいな。かなりうざい感じになるから使わんか。

862:デフォルトの名無しさん
19/06/09 11:06:53.62 42ARNGRn0.net
インクルードをURLで引っ張ってこれたら面白いのに。

863:デフォルトの名無しさん
19/06/09 11:17:01.45 ZHA7gcDF0.net
一発でウイルス仕込まれそう

864:デフォルトの名無しさん
19/06/09 11:59:40.15 W83DJxDE0.net
コスパ最強の副業「動画編集」で稼ぐ方法【生ハム登場】
URLリンク(www.youtube.com)
【最強の副業】動画編集で稼ぎ続ける人の条件【未来予想】
URLリンク(www.youtube.com)
【おすすめ副業・在宅ワーク】「動画編集」は初心者でも時給1,500円狙えます。
URLリンク(www.youtube.com)
【与沢翼】動画編集素人でも本気でやれば個人で月収1000万も夢ではないですよ。
実は動画ってすぐプロと同じクオリティで作れちゃうし月収20万はすぐですよ
URLリンク(www.youtube.com)
センスのいい映像を短時間で編集する方法
URLリンク(www.youtube.com)

865:デフォルトの名無しさん
19/06/09 14:38:56.62 zgQq0a060.net
>>837
/use/include ディレクトリをNFS マウントでもしとけ。

866:デフォルトの名無しさん
19/06/11 14:18:29.61 suKt4vmPd.net
すみません、質問があります。
環境はlinuxです。
ある共有ライブラリlibA.soをロードするプログラムbがあります。
このプログラムbをlibA.so抜きでgccでビルドすることはできるでしょうか?
もちろん実行時にはlibA.soは用意します。

867:デフォルトの名無しさん
19/06/11 15:09:21.38 UmxJxqMia.net
>>841
リンクされる関数やグローバル変数が全て揃ってれば誤魔化し効くのではないかな。

868:デフォルトの名無しさん
19/06/11 16:20:37.89 X43Szptna.net
シンボルだけ定義したsoファイルを用意するのが普通ではないかと

869:デフォルトの名無しさん
19/06/11 18:35:03.43 z8NS6dzQ0.net
ダミーファイルを用意とか、かっけえな

870:デフォルトの名無しさん
19/06/11 20:38:50.54 UmxJxqMia.net
そ、そうか?

871:デフォルトの名無しさん
19/06/11 21:26:50.36 suKt4vmPd.net
ビルド用のsoファイルを用意する、でいこうと思います。ありがとうございました!

872:デフォルトの名無しさん
19/06/11 22:01:48.05 vnr40KfNa.net
スタブってやつね。
dlopen使うと基本そうなると思う。
もともと自動的なシンボル解決して


873:る場合は無視できたかも。



874:デフォルトの名無しさん
19/06/12 00:00:59.88 82Q6hISi0.net
>>847
お前は何を言ってるんだ

875:デフォルトの名無しさん
19/06/12 02:05:00.40 vWkgJgOw0.net
たぶん、DLL import, export みたいな定義ファイルさえあれば、コンパイルできるだろ?

876:デフォルトの名無しさん
19/06/12 09:25:53.48 apqCeTcNa.net
DLL? Windowsだとそうなの?

877:デフォルトの名無しさん
19/06/12 10:40:58.95 QpFBULjO0.net
a) dll import キーワードつきのヘッダでコンパイル
 DLLを読み込みシンボル解決する .lib をリンク
 実行時には dll 読み込みをやってくれる (無いと文句言う)
b) 自前で DLL読み込んで GetProcAddress で関ポにセットして、
その関ポを呼び出すラップ関数を用意
  自前ロードしてるので、実行時に無い時別の処理の記述が可能になるん


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch