探検


C言語って設計が悪いから難しく感じるだけ

レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん
垢版 |
2026/03/24(火) 10:14:24.22ID:iaVEWJjC
ポインタが難しいわけでもないし、単に分かりにくい設計が諸悪の根源。
2デフォルトの名無しさん
垢版 |
2026/03/24(火) 10:17:56.34ID:iaVEWJjC
K&Rを今読んでいてそう感じます。
3デフォルトの名無しさん
垢版 |
2026/03/24(火) 11:25:17.12ID:+hX31Nmn
int main(argc, argv)
int argc;
char **argv;
{
return main(argc, argv);
}
4デフォルトの名無しさん
垢版 |
2026/03/24(火) 16:59:55.39ID:iaVEWJjC
例えば、

int (*p)[10];

とかいう表記が最悪。
5デフォルトの名無しさん
垢版 |
2026/03/24(火) 19:07:52.20ID:dTqNOQ9b
C++の.hファイルとcppファイルが分かれてるだけで勉強する気失せる
6デフォルトの名無しさん
垢版 |
2026/03/24(火) 23:41:15.90ID:4RNA5ClM
俺からは一つだけ 
char* ptr_something;
この作法だけが正しい
俺以外全員間違い
7デフォルトの名無しさん
垢版 |
2026/03/25(水) 08:40:44.64ID:NTvTvHA2
エセ職人スレ
2026/03/25(水) 13:07:39.68ID:idN2Bxou
>>3
ANSI版を嫁
9デフォルトの名無しさん
垢版 |
2026/03/26(木) 13:47:31.74ID:q1C4x9ZJ
>>6
お前複数の宣言で事故るタイプ
2026/03/26(木) 16:35:25.34ID:ZMuTo2I4
>>4
int p[][10];
2026/03/26(木) 17:41:34.69ID:HYl7uPT4
C言語からの推奨移行先Rustの場合

T 型T
&T 型Tへの参照

長さが不定なもの
[T] 型Tのスライス値
[&T] 型&Tのスライス値
&[T] 型Tのスライス参照
&[&T] 型&Tのスライス参照

長さが固定なもの
[T; N] 型T長さNの配列値
[&T; N] 型&T長さNの配列値
&[T; N] 型T長さNの配列参照
&[&T; N] 型&T長さNの配列参照

このように[&T]角括弧の内部に&が来るため区別しやすい
12デフォルトの名無しさん
垢版 |
2026/03/26(木) 21:28:53.50ID:Qpr66Kdr
[[T; M]; N]
13デフォルトの名無しさん
垢版 |
2026/03/26(木) 21:29:45.57ID:Qpr66Kdr
[[T]; N]
[[T; M]]
14デフォルトの名無しさん
垢版 |
2026/03/26(木) 23:39:18.32ID:ai1mHsgg
>>10
それが等価なのは引数の宣言だけ
15デフォルトの名無しさん
垢版 |
2026/03/26(木) 23:41:42.57ID:ai1mHsgg
C23からのアトリビュートの宣言もかなりの闇
各種コンパイラ独自実装のアトリビュート宣言よりだいぶマシとはいえ中途半端にセマンティクス保存しようとして闇った
16デフォルトの名無しさん
垢版 |
2026/03/27(金) 00:17:17.87ID:vbJQvJ18
よくこんな意味がわからない記号操れるな感心
17デフォルトの名無しさん
垢版 |
2026/03/27(金) 00:39:46.85ID:DyQoFlgK
ポインタは便利
2026/03/27(金) 07:59:03.05ID:czUbq4AE
参照も欲しいけどな
2026/03/27(金) 10:20:18.62ID:IuqLSoe9
クソソースが作りにくい分だけ、C言語は設計が優れているといえなくもない
オブジェクト思考言語は美しいコードを生成できる反面、非常に難解なソースも量産できてしまう

世の中にあるクソソースでも、C言語だと理解してやろうという気持ちになれるけど
オブジェクト思考言語のクソソースは理解する気が起きないどころか殺意を感じる
2026/03/27(金) 10:35:39.69ID:/adP+HZw
クラスがないRustは分かりやすい
2026/03/27(金) 10:51:28.26ID:/ab4OUXT
>>14
まさに設計が悪い例だな
22デフォルトの名無しさん
垢版 |
2026/03/27(金) 12:46:59.20ID:t++aEQp8
>>15
[[]]で囲むキモい文法はC++から借りたものではあるが、C++のアトリビュートも仕様腐ってるから何とも言えない無念さ
C++のキレイなところだけ輸入するのがC標準委員会の方針でなかったのかよ…
23デフォルトの名無しさん
垢版 |
2026/03/27(金) 12:48:23.02ID:t++aEQp8
通常の言語と違って年々ゴミになっていく類稀なる発展をするC
24デフォルトの名無しさん
垢版 |
2026/03/28(土) 12:21:20.72ID:rz9WNfgC
>>11
これも大概だろ
2026/03/28(土) 13:19:25.20ID:gdYalcvN
int *p, *q; // c
var p, q *int // go
2026/03/28(土) 15:43:10.47ID:IcEr9v0h
int *p; 派と
int* p; 派が居るけど
前者は int *p, *q; 出来るのに
後者は int* p, q; で詰む
2026/03/28(土) 15:58:42.04ID:/NjMiNwB
仕様とクセの折り合いをつけて
int* p; int* q;
28デフォルトの名無しさん
垢版 |
2026/03/28(土) 17:06:21.66ID:bSm0koos
void func(int a[]);

funcの定義内で、引数 a を使う場合、a[i] などと書きます。

void func2(void (*g)(void));

func2の定義内で、引数 g を使う場合、g() だけでなく (*g)() とも書くことができるそうです。

配列と関数の場合で整合性がとれていないように思います。
29デフォルトの名無しさん
垢版 |
2026/03/28(土) 19:00:06.62ID:19qhTXg6
>>28
それはCのcallableは関数ポインタだから
関数名を使っても関数ポインタに変換される。
だからなんなら(*****g)()でもok

また宣言の中の配列宣言子はポインタに読み替えられるから、int a[42]であろうとint *aと同じ
中に数字書くのは飾りです
但し配列宣言子内にstatic とか書くと意味が出るのでこれも注意

クソだな!!
2026/03/28(土) 19:33:58.12ID:/NjMiNwB
>>28
その引数aはポインタのシュガーシンタックスだから、整合を取りたければ*(a+i) と書いてあげるとか

>>29
&&gが出来ないのに**gができるとは、、、
2026/03/28(土) 19:40:23.77ID:/NjMiNwB
いや、29の話が全てで、30は要らなそうですね、、、
32デフォルトの名無しさん
垢版 |
2026/03/29(日) 09:25:03.78ID:WM1+84P1
>>28
void func(void){}
に対して
void func2(void (*g)(void));
を使うとき
func2(func); と呼ぶ派と
func2(&func); と呼ぶ派が居るらしい
33デフォルトの名無しさん
垢版 |
2026/03/29(日) 14:40:17.31ID:Nafr56OV
int *f();
int (*pf)();

という宣言を考えます。この宣言に含まれる「*」や「()」は演算子ではないですよね。実際に演算を行うわけではないからです。

ですが、K&Rにこれについて以下のような説明があります。

* is a prefix operator and it has lower precedence than (), so parentheses are necessary to force the proper association.

これは演算子ではない記号「*」、「()」の優先順位を考えています。

これはおかしくないですか?
34デフォルトの名無しさん
垢版 |
2026/03/29(日) 14:44:14.10ID:Nafr56OV
もし、これらにも優先順位を考えるのであれば、

「int」と「*」と「()」の優先順位も考えなければならないはずです。
35デフォルトの名無しさん
垢版 |
2026/03/29(日) 14:51:49.17ID:Nafr56OV
あ、その後に、

「dcl」という関数が書いてあります。これは、「int (*daytab)[13]」が入力されると「daytab: pointer to array[13] of int」という出力を作る関数のようです。

この関数を解読すれば、精密にCでの記法を理解できますね。
2026/03/29(日) 16:01:27.13ID:zcXFJxx/
&a == &a[0]
37デフォルトの名無しさん
垢版 |
2026/03/29(日) 16:07:19.25ID:USBE/Vop
30年以上前にfj.comp.lang.cでフレーム起こしながらやってたような不毛すぎる議論で草

やっぱ引導渡さないとダメだこのクソ言語
2026/03/29(日) 19:06:16.10ID:dW2XAb/Z
話題に鮮度がなくて食いつけないよ・・・
初学者はこんなスレ立ててないで黙ってひっそりと独学してください
39デフォルトの名無しさん
垢版 |
2026/03/29(日) 19:44:42.45ID:60xioQbF
>>36
型も一緒なの?
2026/03/29(日) 19:47:43.35ID:60xioQbF
>>37-38
残念だが 5ch がお�hる
41デフォルトの名無しさん
垢版 |
2026/03/30(月) 18:06:41.81ID:VsAnrdcH
char (*(*x())[])();
char (*(*x[3])())[5];

上の宣言を解読せよ。
42デフォルトの名無しさん
垢版 |
2026/03/30(月) 21:09:55.85ID:PRAX/oWX
わざと難読化したのを書いて言語がクスという言うスレ
2026/03/30(月) 21:34:19.04ID:0h8bFcOt
こんなの無限にできるだろ
char (*(*(*(*(*x[3])())[5] )));
44デフォルトの名無しさん
垢版 |
2026/03/31(火) 02:19:57.63ID:XWIEtcEp
>>41
char (*(*x())[])();
x is fun ret ptr of array of ptr to fun ret char.

char (*(*x[3])())[5];
x is array 3 of ptr to fun ret ptr to array 5 of char.

かな?
45デフォルトの名無しさん
垢版 |
2026/03/31(火) 02:39:01.36ID:XWIEtcEp
じゃあ俺からも問題
xの宣言
int (*(*x[3]) [[A]] (double)) [[B]] [5];
を読み下せ
46デフォルトの名無しさん
垢版 |
2026/03/31(火) 10:00:53.38ID:KKs2VdCx
なぞなぞ言語
47デフォルトの名無しさん
垢版 |
2026/03/31(火) 11:02:05.53ID:XWIEtcEp
signalとかqsort_rとかなぞなぞ解かないと使えない関数もあるので…
48デフォルトの名無しさん
垢版 |
2026/03/31(火) 11:04:18.42ID:XWIEtcEp
あとはpthread、特にpthread cleanup handlerあたりはかなりなぞなぞ
2026/03/31(火) 23:41:51.12ID:spN5Do5t
gets("(σ・∀・)σ"); // Segmentation fault
50デフォルトの名無しさん
垢版 |
2026/04/01(水) 17:51:10.06ID:3UTfV8wO
>>45
アトリビュートは闇…
2026/04/01(水) 20:05:24.77ID:uzR/ljvY
アルゴリズムは苦手だけどなそなそは得意
52デフォルトの名無しさん
垢版 |
2026/04/01(水) 23:08:41.35ID:8lGTkqWR
人間がコンピューターに寄り添う優しい言語
それがC
かわりにコンピューターも全力でがんばってくれる
2026/04/15(水) 21:01:40.39ID:KTOGvwbf
こうやればステップ数少なくなるから速く動くんじゃね?
と書いたコードがびっくりするほど遅くて
やっぱり妙な書き方しない方がまともだと学んだ
54デフォルトの名無しさん
垢版 |
2026/04/15(水) 21:45:10.88ID:Shlgqzec
どの命令がどんな速度で実行されるかを学んだ方がいい
ステップ数が短い命令は、複雑なことを簡単な命令でこなすように作ってあるから
むしろ時間がかかる
55デフォルトの名無しさん
垢版 |
2026/04/17(金) 15:19:45.09ID:Ph1ijPva
DJNZ
56デフォルトの名無しさん
垢版 |
2026/04/17(金) 15:21:27.98ID:Ph1ijPva
stsb
ldsb
57デフォルトの名無しさん
垢版 |
2026/04/18(土) 13:49:14.41ID:HlEIpBul
xor a,a
2026/04/20(月) 06:21:40.12ID:p1bOR+Kk
test
https://www.youtube.com/watch?v=5k3jE-NAVQQ
2026/04/20(月) 14:29:08.22ID:+xN4UTBC
switch(x){
 case 0:
  break;
label1:
 case 1:
  break;
 case 2:
  x=1;
  goto label1;
  break;
 default:
  break;
}
60デフォルトの名無しさん
垢版 |
2026/05/04(月) 23:05:10.83ID:loKn+pyl
>>1
C言語はUNIXというOSを作るために作られたプログラミング言語です。
だから中水準言語なのです。
61デフォルトの名無しさん
垢版 |
2026/05/04(月) 23:43:52.89ID:S7DHTU1B
だからってなんだよ
2026/05/05(火) 07:24:50.94ID:IgpYxfA3
Cの楽しさを知りたければIOCCCの作品でも読んでみればいい
63デフォルトの名無しさん
垢版 |
2026/05/05(火) 10:34:17.51ID:pUcfUdxA
>>61
ハードウェアとのやりとりが多いので、ハードウェア寄りのプログラミング言語になっている。
2026/05/05(火) 13:40:19.79ID:sd/Q4g2J
全ての言語はunlambdaと同様の難読化が可能。なぜならSKIコンビネータからの遺伝だから。
2026/05/05(火) 19:07:15.16ID:JPdT+3XD
K&R時代のC言語を体験してみよう
2026/05/06(水) 16:32:37.85ID:mBI68MGx
ポインタはデータまたは関数そのものではなくそのデータまたは関数のアドレスを意味する
簡単に聞こえるし簡単だと思っていたらいつか足をすくわれるのがパターン
67💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/06(水) 16:35:45.09ID:4i0fkMKP
メモリマップとかI/Oマップとか一度でも見たことあるのか?サル。
68💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/06(水) 16:43:14.10ID:4i0fkMKP
>>66
間違ってないね。
69デフォルトの名無しさん
垢版 |
2026/05/06(水) 18:22:41.41ID:Oi8nJDg6
Cは「ちょっと高度なアセンブラ」なんだよ
人間の読みやすさなんて考えてない
2026/05/06(水) 19:00:06.93ID:usSUIi60
>>66
違うよ
ある変数があるとして
そこへのポインタこそ変数そのものなんだよ
値の方は変数ではない

これは代入すればわかる
ポインタがあればその指してる先を書き換えることができる
値があってそれを書き換えても変数の中身は書き換わらない

つまり
ポインタが変数
値は変数ではない
71💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/06(水) 19:18:31.75ID:D9NyPKEC
>>70
おい、サル。

int x;
int *xp;
72デフォルトの名無しさん
垢版 |
2026/05/06(水) 19:27:10.31ID:Oi8nJDg6
>>70
お前は>>66の内容を理解できてないんじゃないのか?
ズレてて議論になってない
2026/05/06(水) 19:47:04.16ID:AibCcjOg
変数の実体はポインタであってるよ
だから関数に渡して結果を入れてもらう時もポインタを渡さなければならない
74💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/06(水) 19:57:37.43ID:D9NyPKEC
>>73
おい、サル。

int x;   /* これが変数でなく */

int *xp;  /* これだけが変数だ */

と言いたいのか?
75デフォルトの名無しさん
垢版 |
2026/05/06(水) 20:07:27.37ID:frK1nPOq
>>74
小学生ですか?
変数(容れ物)と値の区別を学びましょう

コードの中でxと書いてもそれは値として取り扱われ変数としては取り扱われない
だから例えば関数にxを渡してもそれは変数を渡したことにならず値だけが渡る

変数とはアドレスのことです
そのため変数を受け渡すにはアドレスが必要
関数へ受け渡すときは&xなどになる
2026/05/06(水) 20:31:07.75ID:mBI68MGx
変数と変数の値と変数のアドレスが正しく理解できてない
2026/05/06(水) 20:45:06.04ID:mBI68MGx
MOV EAX, [0x12345678]
メモリの内容を 4バイト読み込んで EAX に入れるIA-32のニーモニックだけど
これをよく考えたら変数、変数の値、変数のアドレスの違いがわかる
78💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/06(水) 21:25:45.53ID:D9NyPKEC
>>75
読め、サル。

int x;   /* このアドレスにintを格納 */

int *xp;  /* このアドレスにintが書かれたアドレスを格納 */
79デフォルトの名無しさん
垢版 |
2026/05/07(木) 10:02:06.77ID:amqD74Kk
>>75
>>77 の宿題はやったか?
80デフォルトの名無しさん
垢版 |
2026/05/07(木) 10:15:21.67ID:4vHwfolo
ポインタとか要らねーだろ
遅くなる?関係ねーよ
CPUのパワーでぶん回しゃ良いだけだ
81デフォルトの名無しさん
垢版 |
2026/05/07(木) 10:43:12.99ID:amqD74Kk
無限ループですらCPUパワーで解決しそうな勢いだ
2026/05/07(木) 11:31:49.50ID:z4cyO/69
L[1-3]キャッシュに乗るとポインタでもレジスタでもなくなる
2026/05/07(木) 12:22:34.52ID:TMOwDbsl
>>80
パイソンやれよ
84💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/07(木) 12:24:52.05ID:qEvGZHut
Lispだろ。
85💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/07(木) 18:29:13.85ID:q4SIgGnv
ほれ。

https://www.gnu.org/software/emacs/manual/elisp.html
2026/05/07(木) 22:25:45.93ID:B9rL4/lJ
int a[4] = {};

a == &a[0];    ←意味わかる
(a+1) == &a[1];  ←微妙だが一応意味わかる
a == (void*)&a;  ←????
87💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/07(木) 22:57:42.45ID:q4SIgGnv
そのaという配列変数のアドレスは32ビットCPUなら32ビットの値、64ビットCPUなら64ビットの値だろ?
88💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/07(木) 23:00:47.69ID:q4SIgGnv
アドレスの値はchar*でもint*でも同じ。当然void*でも同じ。
89💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/07(木) 23:07:16.73ID:q4SIgGnv
互換性のないポインタ同士を比較するとウォーニングがでるからそれを抑制するためにvoid*にキャストしているだけだと思うよ。
90💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/07(木) 23:23:39.55ID:q4SIgGnv
本当はchar**とvoid**にも互換性があってほしいんだがないんだよ。void*としかない。
91デフォルトの名無しさん
垢版 |
2026/05/07(木) 23:45:06.14ID:amqD74Kk
a + 4 == (void *)(&a + 1)
92💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/07(木) 23:54:34.19ID:q4SIgGnv
sizeof(int)と書こう。
2026/05/08(金) 16:59:33.40ID:jFFlox80
俺はすごいじじいだけど
C言語を初めて見たときは画期的だと思ったよ。
まだ世の中がMS-DOSじゃなくてCP/Mのパソコンあたりがでていた時のことだ。

そのころやっていたのは、CNC装置そのもので、8086が5つ乗っていたと思う。
CNCのNCプログラム実行部は全部アセンブリ言語で書かれていて、UIだけ高級言語のPL/M86で
書かれていたよ。 このPL/MとCが全然違うんだな。
スタックの積み方が違う。いわゆる関数コールが PascalのABIだし
ポインタは Based変数というものがあるがポインタに対してBased でint配列や 構造体配列のポインタを定義する。
ポインタ+1しても中身は1しか増えないから、 +sizeof(struct KOZOTAN) を足してやらないといけないとかで
Cは+1するだけで勝手にサイズが足されるから合理的だと思ったけどな。
94デフォルトの名無しさん
垢版 |
2026/05/08(金) 17:02:55.94ID:jDCLnraE
アセンブラだってサイズ分インクリするけど
2026/05/09(土) 01:25:27.84ID:/SzbkRKm
>>75
その「変数とはアドレスのこと」というのは機械語で考えればわかりやすいよね
静的な変数なら絶対アドレス
動的な変数なら相対アドレスになる

キモじじみたいに機械語を知らないと
「変数とはアドレスのこと」を理解できない
96💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/09(土) 01:46:14.16ID:6d+vv6Vz
・静的な変数はヒープ上
・動的な変数はスタック上
どちらもメインメモリ上でありどちらもアドレスである点は同じ。

・任意のアドレスをフルビットで表すのが絶対アドレス
・任意のアドレスをあるアドレスからの相対位置で表すのが相対アドレス

俺はZ80の機械語でインベーダーゲームを書いたしm68kの機械語ではもっと山ほど色々書いた。

結論:サルには機械語は無理。
97💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/09(土) 01:50:11.28ID:6d+vv6Vz
あ、動的がヒープで静的はbssセクションとかだな。
98💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/09(土) 01:53:24.66ID:6d+vv6Vz
ん?動的なメモリでなく動的な変数って書いてあるから錯覚したけど動的な変数ってなんだ?やっぱりCのauto変数のことだよな?
2026/05/09(土) 04:07:45.96ID:+volYkQ2
>>96
マルキューでは書いていない若造かよ
100💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/09(土) 04:09:43.00ID:6d+vv6Vz
Z80って書いてあるだろ、サル。
2026/05/09(土) 04:12:46.78ID:+volYkQ2
ゼッパチだけ??
当時究極の8bit CPUと評されたマルキューでも書いていないなら若造か雑魚
102💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/09(土) 04:31:22.07ID:6d+vv6Vz
例えばシャープは200ラインと400ラインとテレビが3つとも映るディスプレイを作った。一方 FM-7 はテレビはおろか400ラインにすらGRAMの増設と共に専用ディスプレイが必要だった。ましてスーパーインポーズなんて望めるわけがない。

セルフリロケータブルコード以外に6809でしかできないことを言ってみろよサル。究極の8bit CPU以前に8bit CPU自体は知ってんのかサル。
2026/05/09(土) 04:42:14.75ID:+volYkQ2
>>102
FM-7ならデュアルCPUだな
YAMAUCHIコマンドによってサブCPUをメインCPUとは別に同時に動かせたろ
104💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/09(土) 04:47:39.90ID:6d+vv6Vz
CPU評価ボードなんてどのパソコンにも何枚でも挿せるがサルには理解できないかもな。
2026/05/09(土) 05:00:01.29ID:+volYkQ2
やっぱり当時の常識を知らない若造だったか
FM-8/FM-7は発売当初から6809二つのデュアルCPU搭載機種だ
106💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/09(土) 05:03:50.25ID:6d+vv6Vz
CPU評価ボードが理解を超えてるのかサル。当然Z80カードも理解を超えてるんだろうなサル。
2026/05/09(土) 05:13:53.06ID:+volYkQ2
>>102でFM-7の名前を出しておきながらデュアルCPU標準搭載という当時の常識を知らずに
>>104で「パソコンにも何枚でも挿せる」と書いてしまったことでキモじじいの無知がバレた
もはや取り繕えないぞ
108💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/09(土) 05:17:47.58ID:6d+vv6Vz
理論上X1にもPC-88にも6809カードを2枚挿すことはごく容易いはずだって言ってるんだがサルには難しいか?
109💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/09(土) 05:42:41.46ID:6d+vv6Vz
はい、論破。次のサル来い。

Z80だけでなく6809でも書かなければならないものって「売り物のゲーム」以外になにがあるの?
2026/05/09(土) 05:47:06.33ID:+volYkQ2
>>108
やはり分かっていないようだな
FM-8/7には現実にZ80カードが発売されていて挿して使えていた
しかしそんな話ではなくFM-8/7には6809CPUが2つ標準搭載されていた
だからデュアルCPUを活用したプログラムはそのまま標準環境で動いて誰もが使えていた
111💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/09(土) 05:56:40.92ID:6d+vv6Vz
標準環境でデュアルCPUなら標準環境用のソフトがそれを採用しやすいのはわかるよ?でもそれは商売の話。標準環境以外の話は?つまりコンピュータ工学は?サルには無理?
2026/05/09(土) 06:14:19.27ID:+volYkQ2
当時両方の機械語で書いていたならば
何もかも汚いZ80と何もかも美しい6809の格差も常識だろ
それ以前に当時の市販のマイコン状況すら知らなかったキモじじいは実際には若造だからそういう常識も理解できないのだろうが
113💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/09(土) 06:28:45.68ID:6d+vv6Vz
じゃあさ、こういう話はどうだ?俺は学生時代、6809のように美しい68000を搭載したシャープX68000に、自作のTMS320C25カードを挿して自作のアブソリュートアセンブラを作って、みたいな話。
2026/05/09(土) 06:50:23.78ID:d0g52L0e
>>95
>「変数とはアドレスのこと」を理解できない

まだ間違ったことを主張し続けているのか
変数と変数のアドレスを正しく理解できてない

変数とは値を保存するためのエリアであり、保存したい内容によってサイズがかわる
変数のアドレスとは変数の先頭アドレスを指すだけ

メモリの1000Hからはじまる2バイトの変数があったとする
変数は1000Hと1001H
変数の値は1000Hと1001Hに書かれた内容
変数のアドレスは1000H
115💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/09(土) 07:00:40.75ID:6d+vv6Vz
間違ってないけどアドレス4桁?
2026/05/09(土) 07:04:17.29ID:d0g52L0e
8ビット時代の人間にもわかりやすいだろう?
117💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/09(土) 07:05:02.24ID:6d+vv6Vz
うん。
2026/05/09(土) 07:15:53.64ID:+volYkQ2
>>114
不定型でない限り
型が定まればサイズは定まる
そして静的型付け言語ならば実行前に形は定まる
だから先頭アドレスさえあればよい
サイズをデータとして保つ必要はない
119💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/09(土) 07:24:28.06ID:6d+vv6Vz
>>118
実行時じゃなくてコンパイル時な。
2026/05/09(土) 08:02:59.98ID:+volYkQ2
>>119
目が悪いのかね?
121💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/09(土) 08:29:09.18ID:6d+vv6Vz
>>120
じゃあコンパイル時?リンク時?
2026/05/09(土) 09:09:18.92ID:d0g52L0e
>>118
まだ理解できてないなら
変数(容れ物)と変数の置いてある場所の区別を学びましょう
2026/05/09(土) 09:22:17.46ID:+volYkQ2
>>122
容れ物の種類は型で決まる
同じ型ならば同じ容れ物になる
各変数を区別するために容れ物のある場所(アドレス)で区別する
つまり各変数に対応するものはアドレス
2026/05/09(土) 09:55:37.01ID:d0g52L0e
>>123
変数のアドレスで変数が一意に決まるとしても
変数と変数のアドレスは違うものである

マイナンバーで日本での個人が一意に決まるとしても
個人とマイナンバーは違うもの

「変数とはアドレスのこと」というのは
「個人とはマイナンバーのこと」と同じぐらいに無理がある
125デフォルトの名無しさん
垢版 |
2026/05/09(土) 09:55:46.98ID:v4KHc9uZ
>>96
むしろ猿のほうが機械語楽でしょ
絶対アドレスと相対アドレスさえわかってりゃいいだけだしね

オブジェクト指向とか余計なこと考えずとも
全部メモリ空間だけを見てメモリ空間のデータを主役にしてプログラム組んでいけばいいからなぁ
126💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/09(土) 10:18:33.39ID:6d+vv6Vz
C++を英語の第1版で学んだ人間相手になに言ってんの?
127💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/09(土) 10:23:43.82ID:6d+vv6Vz
K島さん(現准教授)の主催した輪講だよ。今、憎悪が集中してるあいつもいたよ?他はK村さんとかA川さんとか。
128デフォルトの名無しさん
垢版 |
2026/05/09(土) 10:45:29.73ID:v4KHc9uZ
複数の変数名を用意して
それら全部同じアドレス参照してる組み方してれば、くだらない変数=アドレス論とかアホでしかないが
2026/05/09(土) 10:57:09.46ID:gb2wIFAe
老人しかいない・・・
130💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/09(土) 11:00:18.59ID:6d+vv6Vz
コンパイル時ではなくリンク時に決定されるものもある。グローバル変数やグローバル関数の実体だ。リンク時に見つからなければエラーになる。重複していてもエラーになる。
131💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/09(土) 11:06:19.74ID:6d+vv6Vz
>>128
それ、どうやってやんの?
132💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/09(土) 11:31:30.01ID:6d+vv6Vz
グローバル変数やグローバル関数の実体だけでなく構造体のメンバ変数のオフセットもリンク時に決定されるようになっていればOO言語でも修正を加えたファイルだけを再コンパイルすればいいようにできたはず。もちろんデニス・リッチーがあの時代にそんなことを心配してくれていたはずもない。
133💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/09(土) 11:34:27.08ID:6d+vv6Vz
>>128
ねえねえ、同じ値のポインタを沢山用意するの?
134デフォルトの名無しさん
垢版 |
2026/05/09(土) 12:46:27.64ID:Zy18Nh/Z
>>91-92
doubt
誤 a + sizeof(int) == (void *)(&a + 1)
正 a + 1 == (void *)&a + sizeof(int)
2026/05/09(土) 19:30:13.13ID:5Ty6Srkh
voidポインタに加減算はやめたほうがいいです
2026/05/09(土) 22:00:36.03ID:NBGqd586
a == (void*)&a;
の意味ほんとわからん
神がそう定めたからとしか説明できない
2026/05/09(土) 22:51:33.48ID:d0g52L0e
>>134
>>136
aと配列名を単独で書くとa[0]へのポインタ
&aは配列全体へのポインタでアドレスはaと同じ
(void*)はポインタの型が合わないと文句を言わせないようにするためのキャスト

int a[10] = {}; # 混乱しないように配列サイズを4から10にした

a + 10 == (void *)(&a + 1)
aはa[0]へのポインタになるので+1でint分のアドレスがずれる
&aは配列全体へのポインタになるので+1でint 10個分のアドレスがずれる
当然のことながらa + 10や&a + 1は配列から外れたアドレスになるが値を代入しなければ問題はない
2026/05/09(土) 23:50:16.41ID:GVIVSwJQ
>>76
>>124
変数の本質はアドレスにある
入ってる値なんかコロコロ変わるものであって変数と結びついてるものではない
2026/05/10(日) 00:07:32.66ID:Y8y1B3+/
変数のアドレスもコロコロ変わるものなんだよ
知らなかったの?
2026/05/10(日) 00:27:13.35ID:4u5Uf5a6
移動式GCをしない限り
変数のアドレスはその有効期間ずっと変わらない
2026/05/10(日) 00:47:42.91ID:5QP6GCUy
変数名は特定の番地につけられた名前の印象
スタックに置かれたローカル変数などは別だけど
2026/05/10(日) 00:48:54.60ID:tUpLoUZY
変数と変数名は
2026/05/10(日) 00:50:36.84ID:tUpLoUZY
ごめんなさい
途中で投稿してしまいました
変数というとかなり曖昧で、住所不定にも思える
2026/05/10(日) 00:51:18.70ID:9aOTzBVn
>>141
スタック上の変数は相対アドレスとして不変
2026/05/10(日) 00:54:05.85ID:tUpLoUZY
>>144
関数なんて、再帰的に呼び出されたりするじゃない
ベースポインタからの相対アドレスは不変かもしれないけど
誤解だったらごめんね
2026/05/10(日) 02:42:12.60ID:9aOTzBVn
>>145
いつ呼び出されても再帰的に呼び出されても常に同じ相対アドレスが使われて変化しない
変数は常に同じアドレス(絶対アドレスor相対アドレス)に結びついている
だからこそ同じコードで動く
147💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/10(日) 02:51:10.90ID:M7hm4HsA
sp相対がアドレスでないと思うのなんで?
148💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/10(日) 02:55:10.43ID:M7hm4HsA
関数が呼び出された瞬間に積まれるスタックフレーム内にスタックポインタからの相対アドレスとしてアクセスするんでしょ?それが「変数=アドレス」でないと思う人いるの?
2026/05/10(日) 03:35:00.53ID:sR74bWY+
C言語の言語仕様で定義されてないものは、動いているシステムで
たまたまそう実装されているだけ

register宣言された変数のアドレスはどうなるんだ?
最近の賢いコンパイラならregister宣言がなくてもレジスタに割り当てる
ことができる変数ならレジスタを使うだろう

変数=アドレスなんて馬鹿な考えはさっさと捨てましょう
2026/05/10(日) 03:53:01.14ID:sR74bWY+
そもそもC言語の仕様にスタックなんて概念はない
2026/05/10(日) 03:53:04.56ID:O5xWWWft
変数はアドレスで合ってる
一時的な変数で他からアクセスされない条件ならば
一度もメモリに戻すことなくレジスタ上だけで済ませられるだけの話
152💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/10(日) 03:57:38.46ID:M7hm4HsA
でもフォン・ノイマン・アーキテクチャ以外にC言語ってあるの?データフローってなにでプログラム書くの?
2026/05/10(日) 04:27:47.24ID:sR74bWY+
コンパイラがローカル変数をスタックに置くことが多いのは手軽で便利で速いからそうしているだけ
ヒープに置いて管理する実装があったとしても問題ない

そもそもIBMの往年のSystem370とかだとハードがサポートするスタックが存在しないが
それにもGCCが移植されているらしい
2026/05/10(日) 04:36:43.44ID:y8TXZMUb
スタックに置こうがビープに置こうがその変数の有効期間はアドレス固定で変わることがない
2026/05/10(日) 11:42:51.73ID:fh8OS9ra
>>140
変わりますよ
もう少し勉強しましょうねw

>>151
>変数はアドレスで合ってる
めちゃくちゃ間違ってますよ
もう少し勉強しましょうねww

>>154
変わりますよ
もう少し勉強しましょうねwww
156デフォルトの名無しさん
垢版 |
2026/05/10(日) 11:59:15.79ID:sdPo2w2T
>>154
変わるけど?
だからこそ、ポインタという機能を付けてアドレスで扱えるように工夫して作られてんだよ
それが無ければポインタを駆使して作られるプログラムの手法すら使えなくなる
2026/05/10(日) 12:14:31.88ID:chag2lR2
>>156
「変わる」という結論は同じでも
それは値のアドレスの話で
変数自体のアドレスの話とは違うのでは?
2026/05/10(日) 13:11:27.35ID:xEIKXTky
>>155
>>156
変数のアドレスが途中で変わることはありません
159デフォルトの名無しさん
垢版 |
2026/05/10(日) 13:18:01.25ID:QSOcTc++
ポインタなんてメモリに格納されている数値がアドレスかどうかの話だけなのに
2026/05/10(日) 13:20:44.26ID:LDF9Hgbz
馬鹿しかいない
161デフォルトの名無しさん
垢版 |
2026/05/10(日) 14:43:32.67ID:kzIu4TAJ
『変数のアドレスは途中で変わらない』
という常識を知らない人はコンパイラにアセンブリ出力させて見てみるといい
変数のアドレスはアセンブリコードの中のオペランドとして埋め込まれている
実行中に変わることはない
162デフォルトの名無しさん
垢版 |
2026/05/10(日) 14:48:25.63ID:ihfry+TW
自分で正当化してるところがキモい 5chで架空の像マウントが自分にとっての全てという姿勢が現実を生きていない
今時ハラスメントが当たり前みたいに言ってるやつは会社では絶滅してるのだが何十年も前に社会人だったという人間なのか
163デフォルトの名無しさん
垢版 |
2026/05/10(日) 14:54:20.33ID:4FzEqhBY
>>137
Rustは最悪ですね判ります
2026/05/10(日) 15:27:56.97ID:Jxl6VU1k
>>161
>『変数のアドレスは途中で変わらない』
『変数の本質はアドレス』や『変数はアドレス』からかなり後退したなw
『変数のアドレスは途中で変わらない場合がある』なら間違ってないよww

>変数のアドレスはアセンブリコードの中のオペランドとして埋め込まれている
必ずそうなるわけじゃないんだよ
2026/05/10(日) 18:13:31.79ID:q1uqJAP4
変数のアドレスは変わらない発言の件
私は正しいと思っている者ですが何を絡まれているのかがちょっとよく分からない。話題の次元が合ってない?

グローバル変数なら特定の絶対アドレスを対象に値を格納・取得する
ローカル変数なら呼ばれた関数用に確保されたスタックフレーム上の特定のオフセットアドレスを対象に値を格納・取得する(アドレスを必要としないレジスタ変数については今回議論の中心ではない様なので除外してます)
int変数ならintの値を、int*変数ならポインタ値を、特定のアドレスを対象に格納・取得。
Cのコードを翻訳した時に、これらの動作となる機械コードが出力されると思ってます。

一方、アドレスが途中で変わると言う主張は私には例がイメージができないです、、、
2026/05/10(日) 18:36:26.64ID:7nKR88AY
>>165
>アドレスを必要としないレジスタ変数については今回議論の中心ではない様なので除外してます
今回の議論の中心は「変数とはアドレスのこと」かどうかですよ
アドレスを必要としない変数があるということは「変数とはアドレスのことではない」という結論には同意済みなんですかね?
2026/05/10(日) 19:04:31.76ID:q1uqJAP4
ここまでの議論はレジスタ変数の言及ではないと思っているので(質の悪い質問に対する質の悪いAI回答のように)同意はできませんね
2026/05/10(日) 19:12:32.76ID:gKBzqDxA
>>165
それで正しい
ポインタを理解できていないと「変数のアドレスは変わる」と間違えてしまう
ポインタを正しく理解できていれば事実「変数のアドレスは変わらない」も理解できる
2026/05/10(日) 19:17:20.48ID:q1uqJAP4
>>166はレジスタ変数の事をどう思ってるの
170デフォルトの名無しさん
垢版 |
2026/05/10(日) 20:58:48.74ID:sdPo2w2T
アドレスを変動させる仕組みASLR
このせいで変数の配置場所がコロコロ変わる
変わってもOSが変わった場所を覚えてくれるので、ソフトはそれを考慮せずポインタで扱える

が、アドレスは明確に変動しているのだ
馬鹿がポインタ=アドレス=変数は不変と勘違いしている
171デフォルトの名無しさん
垢版 |
2026/05/10(日) 21:05:39.60ID:sdPo2w2T
他のアプリが割り込んだためにページングファイルに退避され
また戻った時に同じメモリ空間に戻されるわけもなく
絶対アドレスで指定したらおかしくなるわな

マイコンやってるならそう思ってもいいが
絶対アドレスでアクセスしていいならわざわざポインタも変数も使わず直接メモリ叩けばよいが
そんな時代ではない
2026/05/10(日) 22:38:55.27ID:bhoD44N2
おもしろい議論してるねぇ。
論理アドレスと物理アドレス(メモリやレジスタやネットワーク上のストレージなど)を考えるなら、
変数の論理アドレスは変わらないが物理アドレスは動的かもしれない。
そのC言語は、必ずしも物理マシン上だけに実装されているとは限らない。みたことないけど。
C言語が扱っているのは、そのC言語実装上の論理アドレスでしょう。
ちょっと、粘菌でできたCPUとメモリを考えてみたい。論理アドレスを維持できるのだろうか。
2026/05/10(日) 23:26:59.52ID:q1uqJAP4
>>170-171
OSが行うスワップイン・アウトなどで物理アドレスは変わるかもしれないけど論理アドレスは変わらないからC言語コードからは気にする必要ないよ
変数の論理アドレスは不変だ、変数を参照するポインタが扱うのは論理アドレスだからその点安心して使ってね
どちらかといえばローカル変数のアドレスを戻り値として返さない(関数終了時に変数は消滅するから)とかを気をつけてね

しかしASLRなんて技術があるんだね、すごいね。気にしたことがなかった
2026/05/10(日) 23:31:10.52ID:DGXyzFW8
>>170
ASLRも従来と同じでレジスタ相対アドレスを使うか実行前に解決されます
変数のアドレスが実行中に変わることはありません

>>171
それはまた別の大昔からの話です
各プロセスに専用の仮想論理アドレス空間があてられます
物理アドレスが変わっても変数のアドレスが変わることはありません
2026/05/10(日) 23:34:39.01ID:qr9klzI1
>>167
別にレジスタ変数じゃなくても対応するアドレスが存在しない変数なんていくらでもあるでしょ?
2026/05/10(日) 23:53:28.28ID:C4KpyFRF
>>175
変数には必ずアドレスがあることが保証される
だから&varnameで必ずアドレスを得られる
その上で、アドレスが使われていない場合、もしくは、最適化でアドレスが最終的に必要とされない場合、
メモリ上に置かれずにレジスタ上だけで済まるなどしてもよい自由も保証される
2026/05/10(日) 23:57:59.61ID:bhoD44N2
粘菌CPUはジョークではないが、C言語って高級言語ではなく高級アセンブラ言語なのだから、
物理ソースに(直接)アクセスできなければ意味はない。
なんらかの一般的なOS上で使うC言語ならともかく、
組み込み用のC言語になると、物理的なハードにアクセスするので、
変数とかポインタとか実行コードとかの動作は自分で保証しないといけない。
2026/05/11(月) 00:31:42.27ID:WWe4evK5
>>175
extern宣言だけされた定義もない参照箇所もない変数ならアドレスがないとか?良くないコードです
他はちょっと思いつかなかった。寝ますね、、、
2026/05/11(月) 00:59:12.70ID:2zfH/cwg
>>176
Cの抽象度から見た概念上のアドレスの話じゃなくて
実行時のメモリアドレスの話でしょ
>>161や>>165見れば分かると思うんだけど
2026/05/11(月) 01:14:09.98ID:TDpg2Hvx
>>179
変数の実行時のメモリアドレスは変わらない
実行途中で変化しない
だからこそ変数のアドレスをそのへんの配列や構造体その他にプログラムが勝手に保存してもよい
変数のアドレスは変わらないから後でそれを用いてもよい

もちろん関数内のstaticでない変数が関数を離脱すると無効になる件は本件とは独立した話として注意を要する
181デフォルトの名無しさん
垢版 |
2026/05/11(月) 04:00:48.33ID:UHoXqmUk
まとめるとこんな感じか

変数の有効期限内での変数のアドレスは原則として変更されない

ASLRはプロセス生成時にデータのアドレスをランダム化するだけで
変数の有効期限内でのアドレスは固定となる
ただしグローバル変数だとしてもvolatile宣言されてないものは
最適化により特定の部分でレジスタに割り当てられる可能性がある

仮想記憶で物理アドレスがかわることがあったとしても
プロセスから見える変数の有効期限内での論理アドレスは変更されない
182デフォルトの名無しさん
垢版 |
2026/05/11(月) 11:51:04.96ID:83zRqP8M
そういう理解の仕方はポインタのポインタでつまづくからやめれ
2026/05/11(月) 12:22:54.77ID:BjPsWtVC
わざとややこしくしてるヤツがいるなw
184デフォルトの名無しさん
垢版 |
2026/05/11(月) 13:48:36.16ID:VWseMxak
変数=アドレスっつってるやつだけが、自分の知ってる狭い世界だけ見て主張してるだけだからなぁ
マシン語もCも直接絶対アドレスを扱えてしまうんだから
いつのまにか物理アドレスと変数アドレスと分けて言いだして恥さらし
185デフォルトの名無しさん
垢版 |
2026/05/11(月) 13:51:20.13ID:VWseMxak
だからこそポインタという機能で、そういう危険な物理アドレス意識しないまま連続アドレスとして扱えるように工夫されてるのに、そういう土俵の上だけしか見えなくて、変数=アドレスなんか言ってるから間抜け
2026/05/11(月) 15:19:04.32ID:ozjQEcPs
>>185
無知すぎて話にならんな
よくそこまでデタラメを平然と言えるもんだ
187デフォルトの名無しさん
垢版 |
2026/05/11(月) 17:06:21.12ID:DaaryO5f
>>184
メモリに格納されている値を数値、文字コード、メモリの番地として扱うかどうかはOSとプログラム次第の話だが、C言語とUNIXはOSの仕様が先にある話だ。
188デフォルトの名無しさん
垢版 |
2026/05/11(月) 17:51:52.74ID:VWseMxak
C言語はUNIX専用でも何でもないけど?
PC-88や98 DOS/Vやwinやマイコンで使われてる
189デフォルトの名無しさん
垢版 |
2026/05/11(月) 18:00:30.99ID:Ox4sgKHR
>>188
C言語のこと何もわかってねえな
2026/05/11(月) 21:30:26.39ID:Nzb6NYIT
>>185
間違ってる
ポインタにそんな機能はない
それはOSの役目
仮想アドレス空間も持つOS環境ではそこで動くユーザプロセスは仮想アドレスのみで動く
物理アドレスを知ることもできず物理アドレスを意識することさえない
そこには仮想アドレスしかない
変数も仮想アドレスしか持たない
191デフォルトの名無しさん
垢版 |
2026/05/11(月) 21:51:14.45ID:+fatS4qB
頭悪そう
ポインタのポインタってのがある時点で、変数の場所のアドレスが変わることを示してるってのに
192デフォルトの名無しさん
垢版 |
2026/05/11(月) 22:37:13.63ID:EsnJ0dnK
ポインタのポインタのポインタのポインタのポインタのポインタ
2026/05/11(月) 23:13:01.37ID:a+RXV+Ng
>>191
それはポインタのポインタが何かを正しく理解できていない初心者が犯す誤解
皆が言うように変数のアドレスが変わることはない
194デフォルトの名無しさん
垢版 |
2026/05/11(月) 23:18:24.37ID:MKuUSvDq
愉快犯に付き合うのは時間を浪費するだけ
2026/05/11(月) 23:56:02.44ID:Gifj3ORT
ポインタ自体も変数だ
何かのアドレスを保持する変数
ポインタのポインタはその変数(ポインタ)のアドレスを保持する変数
196デフォルトの名無しさん
垢版 |
2026/05/12(火) 02:08:36.16ID:pJQZEhk+
時間の無駄
197デフォルトの名無しさん
垢版 |
2026/05/12(火) 12:05:15.78ID:hVHmjsCD
AIに、変数=アドレスですかって聞いてみなw
198デフォルトの名無しさん
垢版 |
2026/05/12(火) 15:18:18.19ID:k3W0pFRt
機械科のCの授業のテキストが要点をまとめたようなスライドで、それをノートに取って、演習をやるんだけどAIに聞かないと正解率がゼロとか15問中1とか。テストでできる気がしない。ダブルポインタでのlinked listの書き換えとか、関数のポインタを引数に渡すあたり。AIがなかった頃はみんな授業で理解してたのかな
199デフォルトの名無しさん
垢版 |
2026/05/12(火) 16:25:48.58ID:v7lo+dU+
C言語の要素だけで考えてるからパズルになる
メモリイメージを把握してたらなんてことはない
逆に言うとそういう感覚がないなら活用できないし危険
機械科ならさわりでいいからマシン語もいっしょに学習してみては
2026/05/12(火) 16:37:52.48ID:CQESEVeb
ノート取るよりもコード書いて動かす方がよさそうだけど
2026/05/12(火) 18:51:32.24ID:z/Qt2SIu
>>198
>ダブルポインタでのlinked listの書き換えとか、関数のポインタを引数に渡すあたり
前者は文法覚えたての初級者ができなくても全然問題ないが
後者は基礎なのでできないとまずい

高校ならともかく大学の話なら授業だけで理解できると思うのは間違い
一般的に偏差値の高い大学ほどその傾向が強い
2026/05/12(火) 19:45:58.38ID:UKUkkRNH
*p … ポインタ
**p … ポポインタ
***p … ポポポインタ
203デフォルトの名無しさん
垢版 |
2026/05/12(火) 20:33:17.59ID:hVHmjsCD
ボインと命名すればよかったのに
2026/05/13(水) 00:09:38.39ID:gffYywze
>>198
main関数のargvも実質ダブルポインタでchar *argv[]ではなくchar **argvとも書ける
K&R本の図がわかりやすかった思い出
https://imgur.com/a/l2qqJXK

先生やAIがいい図を描いてくれればいいんだけど
205デフォルトの名無しさん
垢版 |
2026/05/13(水) 09:40:14.84ID:gV574Y85
K&RはまさにCを設計した人の本ですね。アマゾンで見たら書評のpros & conがすごい極端。理解できるかどうかわからないけどkindleで1500円くらいで買えるので買ってみるです。ありがとうございます
2026/05/13(水) 11:58:22.99ID://o0RJ80
学習本を買うならできるなら実物を見ながら検討した方がいい
自分が理解している事、自分がわからない事を説明してあるページを見て
自分に合う本なのか確認すべし

大昔なら柴田望洋の本を買っておけば大体間違いなしという感じだったが
今はどうなのか知らない
207デフォルトの名無しさん
垢版 |
2026/05/13(水) 20:38:40.01ID:UpUyi1rI
>>205
ANSI Cが基本だ。
208デフォルトの名無しさん
垢版 |
2026/05/13(水) 20:46:57.06ID:o9u5JvGB
歳とると思い込みがコントロールできなくなるよね
205はそもそも2ndでしょ
209デフォルトの名無しさん
垢版 |
2026/05/14(木) 09:07:53.43ID:XV0UuxkJ
「ダブルポインタ」だれが言い始めたのか知らんがこの用語を使う香具師は判ってない香具師
判ってる香具師は正しくポインタノポインタと言う
210💾キモじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/14(木) 09:14:42.55ID:wRuFTQJM
https://i.imgur.com/AWm5ULD.mp4
211デフォルトの名無しさん
垢版 |
2026/05/14(木) 20:47:39.32ID:Zqzv4ota
>>209
それは本当にそう
C言語でウンザリすることベスト10に入る

・ダブルポインタと言い出す初心者
・ポインタの説明記事を書いちゃう初心者
・ポインタと配列を混同する初心者
  :
2026/05/14(木) 21:19:23.94ID:xRz71k34
元はといえばC言語の仕様が悪い
Rustなら
・生ポインタと参照の区別がある
・配列は静的固定サイズNを伴った型
・スライスは動的サイズを伴った型
なので
例えば文字列の配列への参照なら&[&str; N]型
文字列のスライスへの参照なら&[&str]型
それらの要素一つへの参照なら&&str型
これらがCでは**char型などに縮退されてしまうのが辛い
213デフォルトの名無しさん
垢版 |
2026/05/14(木) 22:09:20.90ID:Y81e4q3P
typedefやマクロ活用すれば分かりやすくはなるけど
型の互換があればそのままやりとりできるし
書けちゃうのがよくないってことだよね
でも16ビット機で開発できる高級アセンブラと考えたら十分かな
複雑なことはC++でという流れだし
214デフォルトの名無しさん
垢版 |
2026/05/14(木) 22:32:39.76ID:J0/3AA29
>>211
それはC言語の初心者にうんざりさせられることワースト10
2026/05/14(木) 23:04:30.23ID:nVJjyR+X
ダブルポインタって英語圏で確立された用語が輸入されただけやで
MITやスタンフォードのCS講義でも普通に使われてるんだがお前ら大丈夫か?
216デフォルトの名無しさん
垢版 |
2026/05/15(金) 08:34:22.66ID:SE3UM+4l
C言語でうんざりさせられる所
1. 宣言
void (*f[10])(int);
void (*f)(int)[10];
2. プリプロセッサ
馬鹿な使い方をすれば混乱の極み
3. 実装依存
f1() + f2()
関数内部で同じグローバル変数を使ってたりすると...
217デフォルトの名無しさん
垢版 |
2026/05/15(金) 08:45:19.72ID:SE3UM+4l
ああ、間違えているw
2026/05/15(金) 11:40:01.76ID:0MfJ9N7a
C言語の設計が悪いんじゃなくて、C言語を教える時にコンピュータについて教えないのが悪いだけ
C言語は隠ぺいしてないだけだよ
2026/05/15(金) 12:01:03.50ID:0MfJ9N7a
>>207
ANSI Cなんてもう時代遅れだぞ
C99以降が標準
2026/05/15(金) 12:01:49.61ID:0MfJ9N7a
>>206
今も柴田望洋でいいんじゃねえかな
C言語なんてそんな変わらないし
221デフォルトの名無しさん
垢版 |
2026/05/15(金) 22:58:48.13ID:0bPGiVOv
柴田望洋ってまだ生きてるの?
222💾キモバカじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/16(土) 03:41:14.36ID:dNhOVJjS
K&Rとこれ以外は全部サル用。

https://www.amazon.co.jp/dp/4774133345
223デフォルトの名無しさん
垢版 |
2026/05/16(土) 04:15:01.15ID:OxkUY+FM
Cの本はK&RとCプログラミング専門課程しか覚えてない
2026/05/16(土) 08:50:26.09ID:gpo9RdSK
自分はANSI C(C89)が最新の時期にK&R2ndその他を手に取り、その後の追加仕様はWebで補給する形を取っている
今新規で学ぶ人はどのような学習スタイルが最適なのだろう。最新C(C23)をカバーしながら言語自体と適用例を学べる本って無さそうだし、Webだけで学ぶのは常に資料が変容するイメージがあって学習達成感を得にくいと思うんだ
225デフォルトの名無しさん
垢版 |
2026/05/16(土) 09:08:17.04ID:M0okmgCq
機械語やってるとCは処理系の説明書だけで十分
2026/05/16(土) 09:09:06.52ID:ice6SjA9
C言語なんか、アセンブラをラップするだけの言語なんだから、設計も糞も無いだろ
2026/05/16(土) 11:03:25.86ID:9v1K/5l7
馬鹿ってそう感じてたのか
2026/05/16(土) 13:03:51.17ID:DqJBhPbG
Cで脆弱性だらけのプログラムを書くやつが多いのはK&Rのせい
今では非推奨の書き方も多用されてるから新規で学ぶ人用の本ではない
歴史的書物として経験者が読むもの
2026/05/16(土) 14:05:26.82ID:JbTEwvtj
今となっては特殊組み込み以外はC使わずにRustがいいよ
2026/05/16(土) 15:55:48.45ID:D4Up5ilO
カニ飯リッチ
231デフォルトの名無しさん
垢版 |
2026/05/16(土) 21:09:13.89ID:l+TnFtsR
Cは文法が糞

ザイログ形式のニモニックのまま高級言語化してほしい
2026/05/17(日) 00:21:38.18ID:sZl86DxD
>>231
76H
2026/05/17(日) 08:15:32.05ID:hzDNIoZ4
なぜかC9H(Ret)だけ覚えてる
初見の関数どこで関数が終るのか目星をつけるのは今でも変わらないね
234💾キモバカじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/18(月) 03:58:06.70ID:X5sfaAzO
🎯👈👈👈👈👈
🤜💥ABC💯🌴

↑PCG: Programmable
235💾キモバカじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/18(月) 04:00:32.21ID:X5sfaAzO
🎯👈👈👈👈👈
🤜💥ABC💯🌴

↑PCG: Programmable Character Generator
 ↑by X1シリーズ
236デフォルトの名無しさん
垢版 |
2026/05/18(月) 11:26:46.08ID:5A1Ebijf
>>224
https://www.amazon.co.jp/dp/477411328X
2026/05/18(月) 12:01:12.39ID:jQf+jbSy
voidさんの本か
読んでみたいような読みたくないような
2026/05/18(月) 21:43:34.88ID:GU18Es67
止めとけ
本がでた頃に2chに本人がきたけど本の内容酷評されたりおちょくられたりで撃退されてたw
2026/05/18(月) 22:44:51.38ID:3S4Q09d6
1. Effective C
2. Modern C
3. SEI CERT C Coding Standard

Effective Cは第2版がModern Cは第3版が出てる
SEI CERT C Coding StandardはWebで読める
2026/05/18(月) 23:47:15.86ID:zqbhNErD
おすすめ情報元紹介ありがとうございます。
英語文献はブラウザで翻訳できるところは読むようになりました。洋書を読む方は自分で翻訳ですか、すごいですね、、、
2026/05/20(水) 00:32:16.01ID:K4ijhElN
俺はCをやるにあたって「はじめての8086」を読めと言われた
「はじめての486」も併せて買ったけど積ん読した
2026/05/20(水) 00:39:25.62ID:7EfSCYUZ
6502がいちばんおもしろかったなぁ。
2026/05/20(水) 00:45:15.30ID:iGvoShit
初めて読むマシン語、8086、486ナツカシス
244💾キモバカじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/20(水) 01:23:44.91ID:aoS52wMR
4004で電卓戦争やってた人いますか?
245デフォルトの名無しさん
垢版 |
2026/05/20(水) 10:35:47.92ID:VmWwNsDH
これのひとかな
https://www.youtube.com/watch?v=Kx0pVrx2TRw
2026/05/20(水) 21:23:12.52ID:Z0u59BFL
>>242
だがCをインプリメントするとしたら最悪なCPUだよなあ
2026/05/20(水) 21:45:21.76ID:ZgHSF/QP
>>246
ゼロページが変数として使える最強やないか
248デフォルトの名無しさん
垢版 |
2026/05/23(土) 13:44:55.22ID:ULl5YR4s
09良いよね
http://www.st.rim.or.jp/~nkomatsu/mc680x/MC6809.html
2026/05/23(土) 19:04:49.27ID:p40Ic9M9
ざいろぐちゃん
もすちゃん
もとらちゃん
250デフォルトの名無しさん
垢版 |
2026/05/23(土) 21:41:01.42ID:skqHV7XZ
Abstract Data type(ADT)を使ってstackとqueueを、固定長配列、動的配列、linked listで書く演習をやっている。逆ポーランド記法の電卓とか括弧の対応が正しいかというやつ。コードを読めば一応わかるけど一から書けといわれたら無理。stackとqueueは3種類の方法で自在に書けないと試験合格は難しいらしい。もう、6パターンまる覚えするためにひたすら書いているけどいちいちmakeするのが面倒くさい。
来週からはビット演算。そのあとI/Oと標準/数学ライブラリとやって、これでCは一旦終わり。後期からはアセンブラ。どんどん難しくなるんだけど方向性が情報系とは逆な気がする。あっちはあっちで大変そうだけど。
2026/05/23(土) 21:57:34.46ID:TIyii4ui
へー、高度なことやってるねー。MIT系の教科書かなぁ。
2026/05/23(土) 22:13:45.25ID:fvZ+wgIe
なんか80年代の教育内容だね
Secure Codingについては学んでるんだろうか
253デフォルトの名無しさん
垢版 |
2026/05/23(土) 23:18:15.41ID:YY7E06NG
Securityについては、interface(ヘッダ)とimplematation(.cの実体)を使って、high cohesionとlow couplingを意識しろくらいことしか学んでないです。もっと高度なやり方があるんだと思いますが、今のところ応用まで手が出ないです。。。
2026/05/23(土) 23:29:27.66ID:j4Q0q/xv
それはまあCの普通の書き方というか昔々からのよくある設計の方針みたいな話で、セキュアコーディングとは何ら関係ない
本質的にはCに限った話でもないし、もっと言えばその回答は何も言ってないのと同じくらい内容がない
大体ヘッダとソース使ってってCならそらそうだろw
255デフォルトの名無しさん
垢版 |
2026/05/23(土) 23:41:36.02ID:mQjs53zr
セキュアコーディングという私の知らない概念かあるんですね。これから習う内容に入っていれば良いんだけど
256デフォルトの名無しさん
垢版 |
2026/05/23(土) 23:46:06.27ID:gde19rTM
メモリを直接操作できる故の話よね
いうてOSやマシン語の知見も必要だし人間が気をつけるにも限界があるから
現実的にはコンパイラや周辺ツールを活用するのが常套(いまならAIもある)
体系だって学ぶ以上に指摘くらって得るものが大きい
257💾キモバカじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/23(土) 23:52:28.24ID:cAwIaPoW
構造体型のtypedef宣言とそれを操作する関数のプロトタイプ群をヘッダで宣言してエクスポートする。実体はソースに書く。継承なしのカプセル化であり「データ抽象化」と呼ばれるものである。
258デフォルトの名無しさん
垢版 |
2026/05/23(土) 23:54:43.44ID:CG4aH5xK
error handlingて項目が今後の項目にあった。assert.hやsignal.hなど。これがセキュアコーディングの入り口かな? 今はここまで手を広げられないけど
259デフォルトの名無しさん
垢版 |
2026/05/24(日) 00:04:44.66ID:tzxvC/3+
いまはいったん忘れていいよ
後期でアセンブラ着手しだしたら
毎日のようにある脆弱性のニュースと頭の中でつながるから
260デフォルトの名無しさん
垢版 |
2026/05/24(日) 00:10:43.42ID:PG7LhSHM
>>257
ADTの前方宣言の構造体(incomplete)てやつですね。まさに写経中。freeするのがムズイ。別の関数でmallocしたのをきちんと順を追ってfreeしてやるのが難しい。意識せずにできなきゃいけないんだろうけど。パターンだからそのうち覚えられるかなあ
2026/05/24(日) 00:33:21.14ID:YAn8aOoG
解放を忘れたり解放して場所を指したまま使ってしまったり人間はミスをする
特に複雑化して込み合ってくると見落としてミスる
だから現実にセキュリティホールなどが知らぬ間に生じて発見されて悪用されてきた
今はメモリ管理など含めた多くの問題の安全性を言語レベルで保証してくれるRust言語が登場したから移行できるなら移行すべきだけどね
262💾キモバカじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/24(日) 01:53:35.07ID:fAG7NgfK
>>260
異なる型の2つの構造体が相互にリンクを持ち合う時、そして俺の知る限りその時にのみ、構造体のタグによる前方参照が必要。

他は別にtypedefした構造体を普通の型としてインスタンスを宣言するだけ。newは芋蔓式に次から次へと下請けのnewを呼ぶだろうしdeleteも同様。

頑張れ。
263💾キモバカじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/24(日) 02:31:18.42ID:fAG7NgfK
ある構造体を型としてtypedefしようと思えば、もしそのメンバーとして別の構造体型が用いられていればその構造体型もその時点でtypedefされていなければならない。それをするためにはその別の構造体型のtypedefが行われている別のヘッダをインクルードするのが普通で、それは芋蔓式のインクルードになる。ヘッダの多重インクルード対策は簡単なので問題は起こらないと思う。
264💾キモバカじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/24(日) 02:37:41.10ID:fAG7NgfK
ていうかC++もそうでしょ?
2026/05/24(日) 12:03:35.04ID:xUBIupda
typedef struct { A a; } B;
typedef struct { int i; } A;
266デフォルトの名無しさん
垢版 |
2026/05/24(日) 12:06:00.15ID:xUBIupda
struct A_;
typedef struct { struct A_ a; } B;
typedef struct A_ A;
2026/05/24(日) 13:09:36.52ID:s4jEs3HF
>>265 >>266
コンパイラがBのサイズを決めるために必要なAの定義を先にしてあげよう
2026/05/24(日) 13:22:13.47ID:Qix84Ywx
// とあるソース.c
#include "B.h" // Bを使いたい
  ┗#include "A.h" // BはAを使うのでB.h内部でA.hをインクルードする
#include "A.h" // すでにB.hのなかでA.hがインクルードされているのでインクルードガードにより重複よみこみされない
2026/05/24(日) 13:37:30.43ID:Qix84Ywx
// 相互参照はインクルードでは対応できないで前方宣言する
struct B;
struct A { …, B *b, … };
struct B { …, A *a, … };
270💾キモバカじじい ◆Rn9d66GbJRuf
垢版 |
2026/05/24(日) 13:46:03.43ID:fAG7NgfK
こんな感じにできない?(うろ覚え)

typedef struct tag_1
{
struct tag_2* ptr2;
} Type1;

typedef struct tag_2
{
struct tag_1* ptr1;
} Type2;
2026/05/24(日) 14:59:47.15ID:/jkmbLum
オンラインのコンパイラでしか試してないけどC++も
class A { class B *b; };
class B { class A *a; };
みたいな記法は許容されてるな
Cはtypedefしないと毎回structが必要になるから省略できるC++とは標準スタイルが違いそう
272デフォルトの名無しさん
垢版 |
2026/05/24(日) 22:21:11.99ID:h/YQfM5+
C言語が難しいなんて思うやつは、C++を少しでも知ったら発狂して自殺しそうw
273デフォルトの名無しさん
垢版 |
2026/05/25(月) 09:43:47.28ID:a1IT/WC2
>>270
こういう書き方大っ嫌い
2026/05/25(月) 12:27:59.47ID:ZVLpVWSF
後方参照を許さないC言語が時代遅れなことに気づかないとな
Cコンパイラしか提供されない組み込み環境なら仕方ないが
そうでないならC言語を今すぐ捨てるべきだ
275デフォルトの名無しさん
垢版 |
2026/05/26(火) 19:02:11.19ID:4AYldPgi
>>274
C言語はUNIX用のプログラミング言語なんだが?
276デフォルトの名無しさん
垢版 |
2026/05/26(火) 22:23:22.62ID:/r0Ypo2p
x 設計が悪い
o 設計がシンプル
2026/05/26(火) 23:21:22.65ID:GWUdZZ4M
設計が悪いも何も、ポータブルなアセンプラとして計算機に寄り添う形で設計してあって、それは今も変わらないのでは
今となっては古いと言われればそうかもしれないけど、古いことは別に何も悪いことじゃない
2026/05/27(水) 08:17:35.98ID:08gSGm1k
アセンブラはカッタルイからこんなん作ったよ
なレベルの言語に文句言ってもなぁ
2026/05/27(水) 09:54:13.42ID:sb5fUGY6
もともとのC言語はハードウェアの性能を100%出せることを前提に設計されているから
機種依存がわんさかとある言語
280デフォルトの名無しさん
垢版 |
2026/05/27(水) 10:10:20.11ID:088jDWOf
>>279
UNIXの仕様を想定して作られたC言語は、別のOSでは前提条件が違っていて勝手にC言語を移植されて問題になった。
281デフォルトの名無しさん
垢版 |
2026/05/27(水) 10:13:32.14ID:zw6fajFz
アセンブラがかったるいからと言って
{とか
}とか
=>とか醜い表現使うなっての
2026/05/27(水) 11:03:05.79ID:sb5fUGY6
自分の知らないC言語のようだ
2026/05/27(水) 11:13:41.19ID:vt0HUY+p
#define begin {
#define end }
2026/05/27(水) 13:28:13.51ID:B9J/OP7Y
ゲーッ。17章も参照のこと。
2026/05/30(土) 01:28:49.19ID:Jsn+beB5
begin/endをdefineするのは懐かしいなぁ。
やったよねぇ、Pascal風の言語にしちゃうやつ。
おれはstructuerにfunction入れてsmalltalk風に使ってた。C++できる以前。
2026/05/30(土) 07:01:10.70ID:m3T0RFG6
プリプロセッサの素晴らしく駄目な使い方だな
2026/05/30(土) 09:48:01.35ID:XQCyRiRg
comp.lang.cのFAQに載るくらいだから>>283とか>>285みたいのは昔から腐るほどいたんでしょ
バカというかセンスがないやつに道具使わせるとどう使うかっていうよくある例だわな
2026/05/30(土) 10:50:22.35ID:Jsn+beB5
pascal風の簡易DSLをヘッダーだけで作成して、
最上位の業務階層は、簡易DSLで保守。
pascal部隊もいたので。
2026/05/30(土) 11:01:27.30ID:Jsn+beB5
可読性の問題だよねぇ。C言語でも効率より可読性をとれば、わかりやすくはなる。
だけど高級アセンブラなので、効率がよく可読性の高い「設計と構築」が求められる。
2026/05/30(土) 11:10:01.49ID:Jsn+beB5
プリプリプロセッサを作らないならば、
プリプロセッサだけで効率と可読性を求める。
291デフォルトの名無しさん
垢版 |
2026/05/30(土) 11:17:37.55ID:lVeD90kH
ラダー回路が最高
292デフォルトの名無しさん
垢版 |
2026/05/30(土) 12:08:02.72ID:U80OJ//1
初期のC++がただのプリプロセッサだったというのは皮肉
293デフォルトの名無しさん
垢版 |
2026/05/30(土) 16:06:18.89ID:x3RS+DzD
ポインタと配列の違いとかまあ微妙だわな。全部ポインタでええやろとは思う
2026/05/30(土) 17:23:34.48ID:QKLBXZIC
さらにポインタはintの使い方の一つという扱いで補って、あれアセンブラのままがシンプルでよかったかな?
295デフォルトの名無しさん
垢版 |
2026/05/30(土) 19:05:09.28ID:fcUvegOR
intじゃ代替出来んわな
2026/05/30(土) 19:22:21.90ID:QKLBXZIC
ちょっと厳しかったですか
やっぱりポインタが持つ型というものは、生成コードに間接的にしか表れませんが偉大ですね
297デフォルトの名無しさん
垢版 |
2026/05/30(土) 20:00:52.87ID:OeNHKzAz
まあunsigned charとかintとか設計悪いよな
i8 <- 8bit符号あり整数
u64 <- 64bit符号なし整数
な感じで、i8/i16/i32/i64、u8/u16/u32/u64、f32/f64とかでええやろ
ポインタ型も最初からpi8/pvoidみたいなの使えるようにしとけ
構造体やクラス(C++)もあるから*は必要だが
298デフォルトの名無しさん
垢版 |
2026/05/30(土) 20:57:47.70ID:XFlMbqow
>>297
C言語はUNIXを作るために作ったと何度、言われればわかるのか?
2026/05/30(土) 21:34:36.66ID:m3T0RFG6
メモリが56KBとかのマシンで作られた言語だからな
仕様なんて必要最低限しかない
2026/05/30(土) 21:53:42.53ID:m3T0RFG6
もともとの仕様な
2026/05/30(土) 22:33:31.82ID:fcUvegOR
こういう>>297みたいな「dmrより俺の方が分かってる」みたいな手合いって世界中にいるんだろうな
誰かのやった仕事に対して何十年も経った立場からキャンキャン吠えるとかそんな恥知らずなマネよく出来るなw
2026/05/31(日) 00:13:03.27ID:A0lcmmAm
仕様の解釈に柔軟性を持たせたから今でも現役で残っているとも言える
2026/05/31(日) 11:59:55.21ID:iw1445Th
>ポインタ型も最初からpi8/pvoidみたいなの使えるようにしとけ
>構造体やクラス(C++)もあるから*は必要だが
矛盾してるな
構造体aのポインタをpaとするルールを入れろと言ってるようなもの
それなら*aと何も変わらん
304デフォルトの名無しさん
垢版 |
2026/06/01(月) 05:02:59.72ID:nDSJqHbn
結局上流の仕様を深く考えられる俺たちがC言語設計しとけばだいぶ世の中変わったよなあって話だな
ポインタ一つとってもvoid*でポイドポインタにキャストできる利便性と引き換えに本来の型情報喪失っていう致命的なミスしてるしメモリバグの要因になってる
当時の人は何を思ったのやら
2026/06/01(月) 07:31:28.81ID:HZwAN0EX
だから、アセンブラ直接使いたくなかっただけだから
変数の型なんてレジスタの延長としか考えて無いんだよ
2026/06/01(月) 07:36:06.85ID:RuL1T6Db
Cコンパイラしかない組み込み環境でないのならC言語を今すぐ捨てろ
ちゃんとした強い型付け言語を使え
307デフォルトの名無しさん
垢版 |
2026/06/01(月) 08:28:53.94ID:Um4FaBea
むかし某旧帝大の講義でヌルポインタを全ビットゼロのポインタのことだとか説明してるのを聴いたときは
所詮日本ってこの程度なんだなあとガッカリしたな
2026/06/01(月) 09:15:17.64ID:Y8Ze0X4r
>>307
初期のCの時代にはそれで合ってるよ
ヌルが特別な状態を示す様になったのは
最近だろ?
2026/06/01(月) 09:28:24.03ID:UpLtcaM+
>>307
当時は合ってる
全bitが0のバイトで文字列の終端もしくは文字がないことを表したり
全bitが0のアドレスでポインタ列の終端をもしくはアドレスがないことを表していた
2026/06/01(月) 09:43:30.17ID:2Fig2KkG
#define NULL ((void *)0)
だもんなあ

しかし、アドレス 0 が有効なアドレスであるシステムならまた違った値になっているだろう
2026/06/01(月) 10:53:28.39ID:zavtC8M7
#define break exit(-1)
2026/06/01(月) 12:41:39.70ID:z7Brjm4N
>>306
Rustと以外でおすすめある?
313デフォルトの名無しさん
垢版 |
2026/06/01(月) 12:43:04.75ID:orNocmRO
>>310
なんとあるんだよな
組み込みの場合な、RAMが先頭に配置とか
ブートモード設定でアドレス空間を選択できたりするんだが、その中で選べるから怖い
セクション割り当てなきゃいいんだけど
2026/06/01(月) 12:45:46.65ID:Y/faLFgX
CPUのアーキテクチャ次第だからヌルポは0じゃ無くて定義次第
315デフォルトの名無しさん
垢版 |
2026/06/01(月) 12:46:30.75ID:orNocmRO
>>314
なるへそ
316デフォルトの名無しさん
垢版 |
2026/06/01(月) 13:08:32.64ID:Um4FaBea
すごいな惨憺たる感じだな
>>308-310,314とバカばっかりじゃんかw
まじてFAQくらい読んだ方がいいよそんな知識なら
2026/06/01(月) 13:15:11.22ID:Ud3VbC+T
>>314
CPUのアーキテクチャは一切関係ありません
各プログラミング言語の取り決め次第です
使わないと決めたアドレス値を特別扱いして無効アドレスとみなして取り扱っているだけです
2026/06/01(月) 13:29:41.12ID:Gju4oLNk
>>317
あ?
どんなCPUで動かすコード吐くのかが一番大事だろw
机の上だけでニンマリするだけならいいけどなw
2026/06/01(月) 13:58:22.88ID:Ud3VbC+T
>>318
C言語の規格書 ISO/IEC9899 にて
NULLポインタは値0と定められています
CPUアーキテクチャとは一切無関係です
プログラミング言語Cが定めているためどのCPUアーキテクチャにおいても同じ値0です
320デフォルトの名無しさん
垢版 |
2026/06/01(月) 14:44:22.09ID:4HzhGRP/
>>319
これ
昔は不定で後に0として定義された
だから何人かは反対のこと書いてる
2026/06/01(月) 15:00:03.91ID:1czkfGd6
ゼロ番地にアクセス出来ないとかモトローラ系とかディスってる?
2026/06/01(月) 20:01:08.52ID:2Fig2KkG
>>319
どのCの規格書だ?C89、C99、C11のドラフトっぽいもので確認すると
stddef.h の所で以下のように記述されている

The macros are
NULL
which expands to an implementation-defined null pointer constant; and ...
323322
垢版 |
2026/06/01(月) 20:29:11.18ID:2Fig2KkG
すまぬ
C11の 6.3.2.3 Pointers の 3 に以下の詰があった
確かに 0、もしくは void * にキャストされた 0 だわ

An integer constant expression with the value 0, or such an expression cast to type
void *, is called a null pointer constant.
324デフォルトの名無しさん
垢版 |
2026/06/01(月) 20:41:19.52ID:zG8I8hLe
C11まだ導入してないな
C99には移行したけど
2026/06/01(月) 20:46:31.22ID:OMUIYmd4
>>308-310 >>314
まずポインタが現れるべきところに書かれた0が具体的な数値型の値やアドレスじゃなく、ただのシンボルってことは分かってる?
シンボルだから0でも1でも9999でもnilでもどう決めてもいいんだが、Cは0を選んだってだけの話なんだけどな
具体的なメモリの番地がどことかそれが番地を数値で表記できるアーキテクチャなのか、そうでない例えばタグ付きアーキテクチャみたいなのかとか内部表現はどうでもいい
これが分かってないなら悪いこと言わんからイチから勉強し直した方がいいよアタマ悪すぎて話がループして結局FAQと同じ結末だから
2026/06/01(月) 20:50:25.71ID:A/7+PPzR
>>325
数値0と定められている
2026/06/01(月) 22:32:22.49ID:zavtC8M7
ほんまかいな!?
2026/06/01(月) 22:49:47.77ID:2Fig2KkG
>>325
ただのシンボルだという事は知らなかったわ
実装依存の話だが、仮想記憶のあるモダンOSならユーザーアドレス空間の0ページ目は潰しておいて
ページフォールトが発生するようにしているから、内部でもNULLは0にしているのがほとんどだろう
2026/06/01(月) 23:43:43.01ID:J16IyJIp
null pointer constantとnull pointerは別のもの
2026/06/02(火) 00:24:25.45ID:LrQcnY0k
>>325
嘘つくなよ
シンボルではない
明確にinteger 0と決められている
ISO/IEC9899/1999の6.3.2.3を見ろ
331デフォルトの名無しさん
垢版 |
2026/06/02(火) 02:23:41.62ID:mtjv5G02
整数0をnullポインタとするがnullポインタのビット表現は全ビット0とは限らない
となっているけど今現在nullポインタのビット表現が全0でない処理系は一つも存在しない
332デフォルトの名無しさん
垢版 |
2026/06/02(火) 02:50:41.26ID:+gLw9u1V
>>325
nullポインタの内部実装が全0以外の現在も使われているCPUを教えてくれまいか
2026/06/02(火) 09:18:16.49ID:G0ij1AX5
ポインタをメタ情報+アドレス(いわゆるfat pointer)で表現する系とか想定してそう
メタ情報は型IDとかサイズを保持してvoid *だとメタ情報も含めて0になる
334デフォルトの名無しさん
垢版 |
2026/06/02(火) 12:11:29.47ID:pjjvj95o
c/c++って情報更新しなくて古い知識で語ってる場合がよくある
2026/06/03(水) 21:17:01.74ID:pyJ8HP8Y
c11を理解せずにc99ぐらいで止まってる老害は多い。ちょうどJavaのヌルポで老害があぶり出されるのと同じ。
昔から老害の不勉強は変わらない
2026/06/04(木) 00:04:22.85ID:m+R0LwSW
車載制御ソフト開発のときはマイコンメーカが提供するコンパイラの縛りはあったかも
2026/06/04(木) 00:55:02.05ID:BbHFCyvu
ワシはC89じゃ
いやマジで
338デフォルトの名無しさん
垢版 |
2026/06/04(木) 01:31:06.95ID:Ta60b9dy
実務じゃ環境指定もあるもんな
339デフォルトの名無しさん
垢版 |
2026/06/04(木) 11:42:33.60ID:GSMyaSRc
AIにどの規格で書いて欲しいか頼めば書いてくれるやろ。しょーもない。
340デフォルトの名無しさん
垢版 |
2026/06/05(金) 00:33:28.57ID:SwS5NgPl
俺はC99

構造体の変数初期化で
.member=true
使いたいためだけ

それを除けばAPIは89でもいいや
しかし、俺らの生まれる前の規格まだ使ってるのなんとも言えん
89年って、、、
341デフォルトの名無しさん
垢版 |
2026/06/05(金) 00:34:17.79ID:SwS5NgPl
>>336
車載ってテキサスインスツルメンツとかのecuのイメージだが
最近は中華でいいらしいな
2026/06/05(金) 06:28:59.17ID:bexxxAm9
当時自分の生息圏ではルネサスのNEC系32bit 16bitが多かった
今もC89対応コメント//等一部C99対応という状況みたい
日本企業だからJIS規格に追従なのかも、そしてJISのCは実質C99止まり

同じ車載といっても画面表示系という話になれば状況は全く異なるでしょうが
2026/06/05(金) 07:06:59.37ID:3SHpKq3x
仕事場で使われている処理系ってどこのやつが多いんだろ?
昔はGreen Hills一択だったが
2026/06/05(金) 07:14:42.79ID:3SHpKq3x
昔じゃなくて大昔か
345デフォルトの名無しさん
垢版 |
2026/06/07(日) 02:46:14.18ID:G31AiZvV
ちょっと興味深い話
https://note.com/sane_tulip3289/n/nd8f91c397479

「たまたま今まで動いていた」という話は耳が痛い人も多いはず
2026/06/07(日) 09:25:07.35ID:rVXMWcgY
>>345
出だしの内容は共感できたのだけど
いかんせん長文過ぎて引用箇所は分からず仕舞い
こういうのはテーマを注入してAIに書かせるテスト結果?
347デフォルトの名無しさん
垢版 |
2026/06/07(日) 12:28:46.24ID:S9aP1pou
Geminiに相談
2026/06/07(日) 14:12:21.08ID:4m4/B3eh
問題が起きたときに責任転嫁できる相手がいることが重要
2026/06/08(月) 06:22:21.19ID:gzPGpD/Z
だからいまだにファックス使ってるんだよな
2026/06/08(月) 23:02:38.62ID:a61iFu3f
Green Hillsのコンパイラの話とか詳しく聞きたいなあ。
もう5chの存在意義ってこういう話題くらいじゃない?
2026/06/09(火) 13:00:45.86ID:RY2x18eX
GHS懐かしい
コンパイラが変わる移植作業でビットフィールドの順序が逆になるから並べ替えを行った記憶がある
その時の片方のコンパイラがGHSだったかも
pragmaで変更できる場合もあるけどその時は無理で並び替えたんだと思う
352デフォルトの名無しさん
垢版 |
2026/06/09(火) 16:41:30.15ID:d6n81evb
Green Hills絶賛使用中だよ
車載だと多いんじゃないか
353デフォルトの名無しさん
垢版 |
2026/06/09(火) 18:14:34.00ID:0PE+fusR
グリーンヒルズ懐かしいな
昔、組み込みやってた頃に触ったっけ
354デフォルトの名無しさん
垢版 |
2026/06/09(火) 21:26:28.07ID:TNICk9r6
コンパイラの選定や環境設定は自分でやってないので特に覚えているような事はないかも
つまり印象に残るようなトラブルはゼロだったという意味ね
グリーンヒルズは下手な人がアセンブラで書くよりもいいコードを出すということは耳にしていた
2026/06/10(水) 12:14:20.63ID:JzwuglLS
>>345
典型的なAIで造った文に観えるが
2026/06/10(水) 15:43:52.98ID:Ly8k5LPa
ポインタを!ptrみたいに否定演算子でナル判定するのってお前ら的にはどう?
2026/06/10(水) 18:00:38.08ID:gQT8+tu+
株式会社アイ・エス・ビー
https://kizuna.5ch.io/test/read.cgi/infosys/1756826944/

https://special.nikkeibp.co.jp/atclh/ONB/24/isb0809/
358デフォルトの名無しさん
垢版 |
2026/06/10(水) 18:02:04.40ID:YY0HuvZT
別にどうも
2026/06/10(水) 18:17:21.69ID:Zdw9zzEn
>>356
個人的には有り
コールした関数が状況次第でXXX_NULLを返します、なんて仕様の場合の戻り値はXXX_NULLと比較。
2026/06/10(水) 18:44:09.01ID:MHpuHtRb
NULL安全でないC言語は使うのをやめるようにと米政府が表明してから脱Cを進めてるよね
2026/06/10(水) 19:23:16.14ID:8t/e6lAQ
>>356
普通に使われてるが個人的には無し
検索する時区別がつかなくて面倒
362デフォルトの名無しさん
垢版 |
2026/06/12(金) 20:43:39.95ID:sEpK+LU8
esp32とかマイコンベンダーもrust推してる
2026/06/12(金) 21:05:39.25ID:06UPCiPG
Cコンパイラしか使えない一部の組み込み環境があるけど
そうでないならRustを使った方が良いね
2026/06/12(金) 22:08:42.76ID:qQKLRWIu
なぜかRustは誰も使ってないからなあ
2026/06/12(金) 22:31:46.36ID:9rVj1NJY
周囲や知人で誰も!?
珍しい偏った環境だな
366デフォルトの名無しさん
垢版 |
2026/06/13(土) 16:27:37.02ID:CGZmbi53
5chのおっきいおともだちをのぞく
367デフォルトの名無しさん
垢版 |
2026/06/13(土) 18:17:05.96ID:6Z0SGq+Y
char*みたいにポインタなのにリテラルも入るとゆうガイジ仕様
2026/06/13(土) 21:15:51.71ID:vppH1Zg0
アセンブラを楽に使いたいって発想で作られた言語だから型と言う概念が曖昧なんだよ
369デフォルトの名無しさん
垢版 |
2026/06/13(土) 21:42:28.61ID:DArC+J4H
>>367
文字列リテラルchar[]を指すポインタを同時に定義できることからの誤解
アドレスとメモリのイメージができてない
2026/06/14(日) 07:44:35.26ID:4EJ924Q0
char*に文字列リテラルが入っているわけではなく
文字列リテラルへのポインタでしょ?
2026/06/14(日) 10:30:58.50ID:m8XTSxro
いや、アドレスサイズに収まるデータならリテラルだろうが入るだろw
2026/06/14(日) 11:07:50.71ID:UVmnEvyc
入るから入れちゃうおじさんにはちょっと難しい言語なんだと思う
373デフォルトの名無しさん
垢版 |
2026/06/14(日) 11:09:39.26ID:+misnZ54
配列もポインタとして機能するてそれじゃコード見ただけでコピーか参照を渡してるのかわからんやろ
さすがにゴミ仕様すぎ
cに関わってたケントンプンもgoでこのうんこ仕様使ってないしなんでこんなことになったんや
2026/06/14(日) 12:56:05.18ID:m8XTSxro
だから、アセンブラ面倒くさいでお気楽に作ったトランスレータだからだよw
375デフォルトの名無しさん
垢版 |
2026/06/14(日) 14:13:13.23ID:LMHlkHJq
それ
アセンブラすっ飛ばしてCやるにも相応の理解がいる
2026/06/14(日) 15:32:42.51ID:4EJ924Q0
>>371
斬新な考え方だなw

>>373
Cの関数への引数は全部が値渡し
参照渡しはなくて、それっぽいことはポインタを数値として値渡ししているだけ
2026/06/14(日) 16:47:36.04ID:LcBqA+Ud
C言語の開発に携わったケントンプンw
378デフォルトの名無しさん
垢版 |
2026/06/14(日) 17:47:46.47ID:60UGl0Dj
アセンブラをラダーのように進化させたうえで
構造化すりゃ最高なんだが
379デフォルトの名無しさん
垢版 |
2026/06/15(月) 09:35:44.11ID:f9fZDmww
もはやCがアセンブラみたいな扱いされとるわ
2026/06/15(月) 11:53:58.19ID:+eswDgG7
将来的にAIがアセンブラ吐き出すよりCを吐き出す方がいいよな
2026/06/15(月) 13:09:03.14ID:ytEbROtp
AI利用でC言語のコードを吐き出させるのはリスクが高すぎてほとんど行われていない
安全が保証されてほぼ同じ速さで動くRustが使われている
2026/06/15(月) 13:15:51.98ID:+eswDgG7
それがリスクなら最初からAIなんか使っちゃだめだよね
2026/06/15(月) 13:21:06.12ID:Kg9cUovC
AIにとっても人間にとっても強い型付け言語が書きやすい
Cのような弱い型付け言語は実行デバッグに陥りやすいため
2026/06/15(月) 13:42:16.29ID:Ts3qBACt
AIによる手抜きコーディングに対するプログラミング言語ごとの耐性が異なるってことは、AIコーディング時代を迎えるにあたっての知っておくべき現代プログラマーの基礎知識であり、リテラシーなんだよ。
385デフォルトの名無しさん
垢版 |
2026/06/15(月) 16:53:58.81ID:d20nqYsF
リーナスがc以外に唯一認めた言語だしesp32とかマイコンもrust向けツールチェーン出してるから組込もどんどんrust移行が増えてる
386デフォルトの名無しさん
垢版 |
2026/06/15(月) 17:25:11.40ID:pvgjMWMI
ここにまでRust応援隊が来てるw
2026/06/15(月) 18:59:23.76ID:9C6xlFtz
そもそもrustはC言語の代替として作られたものであるから速やかに移行することが望ましい
懐古趣味でもないかぎりわざわざ質の低い骨董品に固執する理由がない
2026/06/15(月) 19:24:35.51ID:w/g/uR42
Rustを使いこなせるようになった人は100%がCに戻りたくないけど
Rustの抽象的なコーディングのしやすさを会得できない人と食わず嫌いな人が残ってるよ
2026/06/15(月) 23:47:14.40ID:XkTC9+Vi
Rustの学習コストはCプログラマにはかなり高いそうだねえ
2026/06/15(月) 23:59:25.80ID:9PXYcxLc
>>389
普通のモダンな言語を理解してる人たちはRustを難なく理解して使えてるから
C言語しか理解できない人は普通の言語に慣れていないのかあるいは
391デフォルトの名無しさん
垢版 |
2026/06/16(火) 01:10:32.72ID:oLagFGp9
rustは自動型推論もあるからcと比べたらだいぶ楽よな
式で返せるのもなんかかっこいいし
392デフォルトの名無しさん
垢版 |
2026/06/16(火) 08:21:53.13ID:53U3iy+w
ドットネットに慣れたらRustもちょい使いにくいけどな
派生、継承、オーバーライドをトレイトベースで書くことになる
でも、組み込みやってるとドットネット使えんからCかRustでええや!となる不思議

案件によって言語の得手不得手があって苦手だわ
適材適所な言語選ぶんじゃなくて一個で済ませたい
393デフォルトの名無しさん
垢版 |
2026/06/16(火) 09:14:58.18ID:PDaa9uHw
includeでまずつまずく

じゃぁ何をincludeすりゃ足りるのか
それで疲れ果てて終わる
最近の開発環境も拡張機能の巣窟で、そこでめんどくせーってなる
394デフォルトの名無しさん
垢版 |
2026/06/16(火) 09:58:09.71ID:JPJ54/AT
いいこと思いついた!
Rustでウェブブラウザとか作ったら安心安全じゃね?
2026/06/16(火) 09:58:58.78ID:cUp8nnj3
>>392
クラスの派生、継承、オーバーライドは現在は悪設計とされている
だからモダンな言語Go・Rust・Nim・Zigなどにはクラスが存在しない
言語仕様からクラスを排除することで良い言語になってる
2026/06/16(火) 11:00:51.24ID:gSxq/Hmp
FireFoxがRustですんごいことになるからもう少し待て
397デフォルトの名無しさん
垢版 |
2026/06/16(火) 11:24:57.63ID:JPJ54/AT
>>396
マジか!
これから作り始めるの?
2026/06/16(火) 11:33:43.05ID:OvWs1uo5
>>396
FireFoxのメモリ管理はC++
ソースが公開されてるのだから見てみろ
399デフォルトの名無しさん
垢版 |
2026/06/16(火) 11:45:37.85ID:Ej06GfG5
Servoを使ったVersoというのがあったはず
2026/06/16(火) 11:51:29.16ID:7u4fMq6Y
ChromeもEdgeもFireFoxいずれも部分的にRust化を進めている
新たな機能や改善のため作り直す機能から順に進めてる
どのWebブラウザも長期間にわたってハイブリッド状態が続くだろう
2026/06/16(火) 12:29:30.21ID:FYq/akyN
Rustの話題はRustスレでやれば、興味をもってくれる人が多いのに
ここではスレ違いなだけなんだぜ
2026/06/16(火) 17:22:49.57ID:51B0Lg7r
オブジェクト指向はオワコンみたいな事言う奴に限って
なぜオワコンなのか説明出来ない
2026/06/16(火) 17:40:00.90ID:HIkC1MzW
オブジェクト指向は重要だからRustなどモダンな言語でも採用している
オワコンはクラス継承があるクラス
2026/06/16(火) 21:48:54.37ID:r4r2eM1y
とりあえずrustのことは忘れような
ここはCのスレだ
rustの話をするならCの話を巻き込んでしよう
405デフォルトの名無しさん
垢版 |
2026/06/16(火) 22:19:33.69ID:FO3SxX/N
^^
2026/06/18(木) 01:06:12.05ID:2jzoAy97
>>393
関数名で検索すれば出るだろアホか
2026/06/18(木) 01:08:01.07ID:2jzoAy97
>>389-390
それはない
むしろRustはCと感覚が近いから他の言語より親和性高い
2026/06/18(木) 08:41:15.73ID:GdAiJdcw
Rust応援隊の書き込みを真に受けちゃダメ
2026/06/18(木) 12:16:49.52ID:tb3qMF6M
スクリプト言語から来た人たちですらRustはメモリが自動解放されるからCと違って楽と言ってるもんな
2026/06/18(木) 12:57:23.50ID:3VnC9rE9
>>393
>>406
今は検索すればそこそこ出て来るが
昔は関数のreferenceを観ても何をincludeすれば良いか描いてないあほなreferenceもザラにあった
2026/06/18(木) 13:15:41.42ID:K0evV8DH
まともな言語は関数や型を使う時
その名前空間を宣言する
Cだと名前空間とは別のヘッダー名でインクルードの怪奇
412デフォルトの名無しさん
垢版 |
2026/06/18(木) 14:13:15.56ID:wiB36zBv
何かをしたいって時に、なぜあるかどうかもわからん関数名を知ることが出来るってんだね?
頭悪い馬鹿がいるもんだ
2026/06/18(木) 14:22:06.36ID:hmMEYxJt
>>411
C言語は名前空間がないから仕方ない
全てグローバル直下
こんな時代遅れの言語を使うべきでない
414デフォルトの名無しさん
垢版 |
2026/06/18(木) 14:25:01.15ID:9cwoZf6Y
makefileとかゆううんこどうにかならんの
2026/06/18(木) 14:44:57.42ID:SVVqmSVU
ならない
それはCに限ったもんじゃないし
2026/06/18(木) 14:51:23.22ID:FwVJv7Xn
今のプログラミング言語はライブラリなどの依存関係を自動的に正しく解決するからmakefileのようなものは不要
2026/06/18(木) 16:12:33.98ID:sOUMtDS+
漢は黙ってコンパイラ直接起動
2026/06/18(木) 20:14:50.81ID:OUo0Uc8m
パイ直
2026/06/19(金) 15:59:03.97ID:wvohrjnQ
autoconfだっけmakefileつくるやつ
2026/06/19(金) 16:19:30.86ID:1YSLjldX
autoconfがconfigure作ってconfigureがmakefile作るはず

./configure
,/make
./make install

最後にこれやったのいつだろう
421デフォルトの名無しさん
垢版 |
2026/06/19(金) 16:19:54.99ID:Itp1SF9t
そう
新規プロジェクトならCMake使いまっし
2026/06/19(金) 17:03:36.27ID:SV4DyR21
最初はアセンブラで長ったらしく書いてたことをまとめて書けるようになって感動したな
それでいて滅多に余計なこともしないから、効率面でも申し分なかった
423デフォルトの名無しさん
垢版 |
2026/06/20(土) 12:29:38.21ID:QVDBf7mS
アセンブラ使ってた感覚があると
while(*dst++ = *src++);
最強よね
424デフォルトの名無しさん
垢版 |
2026/06/21(日) 09:28:53.05ID:qfN6AuxN
volatileないと最適化されてバイトアクセスでなくなる罠
2026/06/21(日) 09:29:32.07ID:wYdgkh3W
俺がUNIX作るためにCを設計するなら所有権システムとビルドシステムは作り込むと思うね
ちなみに、人間を作るなら盲腸は削除するし歯は生え変わるように設計すると思うよ
426デフォルトの名無しさん
垢版 |
2026/06/21(日) 09:29:46.55ID:qfN6AuxN
スマン勝手にcharだと空目したわ
2026/06/21(日) 09:56:16.17ID:QIdUqy6R
>>425
C言語誕生当初のメモリ搭載容量は約32KB。貴方の気概に感服します
2026/06/21(日) 11:44:27.36ID:sXbVer3A
ていうかそもそもUNIXを書くため作られたとかじゃないよね
2026/06/21(日) 12:13:15.56ID:Q2mR8a67
もともとはワードマシンであるPDP-7で使っていた型無し言語であったB言語があり
バイトマシンのPDP-11のためにcharやintなどの型が産まれNewB言語になり
更に構造体などが追加されてC言語になったと理解している
2026/06/21(日) 12:18:44.67ID:Q2mR8a67
もともとB言語もNewB言語もC言語もどれもUNIXのために作られた言語でもある
2026/06/21(日) 18:02:47.48ID:OQp7GUn5
最初はスクリプト言語だったよね?
432デフォルトの名無しさん
垢版 |
2026/06/21(日) 19:20:55.04ID:j0p+y8i+
>>304
現代の価値観最高!
この頭の悪い発想しかできない想像力でなにいってんだ?
433デフォルトの名無しさん
垢版 |
2026/06/21(日) 19:23:44.05ID:j0p+y8i+
>>318
日本語おかしくね?
434デフォルトの名無しさん
垢版 |
2026/06/21(日) 19:33:05.56ID:aOp6LZRx
unix自体金の亡者でうんこ
435デフォルトの名無しさん
垢版 |
2026/06/25(木) 16:18:07.85ID:wlWeKQvT
赤帽
2026/06/25(木) 18:59:45.86ID:2/zplXnE
C言語一極集中はよくない
437デフォルトの名無しさん
垢版 |
2026/06/26(金) 15:03:51.31ID:eLb+uMzH
赤い旗募金横領
2026/06/27(土) 07:05:04.17ID:65kHVXtG
>>437
スレチ
死んどけ
439デフォルトの名無しさん
垢版 |
2026/06/27(土) 18:27:51.14ID:YNxNTHEk
初めてJSに触れたときクラスなくてビビったけど今はあるんだよな
クラスないとかマジでJS以下じゃん
つまり女子幼稚園児。かわいい。
440デフォルトの名無しさん
垢版 |
2026/06/27(土) 19:35:14.62ID:xemxRbmp
zig rust goも幼稚園児
441デフォルトの名無しさん
垢版 |
2026/06/27(土) 22:49:55.18ID:XVxBbNIh
>>439
クラスは継承が密結合になるため悪手とされている
そのため>>440などのモダンなプログラミング言語では言語仕様からクラスが排除されている
442デフォルトの名無しさん
垢版 |
2026/06/28(日) 00:35:33.38ID:llZHv8Q+
>>441
sealed classにしといたらいいと思うけれども
2026/06/28(日) 03:11:37.04ID:QF2WBXy4
豚の耳に真珠
444デフォルトの名無しさん
垢版 |
2026/06/28(日) 03:35:41.22ID:/7kRm4wN
>>442
おっしゃる通りクラス継承を完全に禁止するsealed classやfinal classのみ使うのが正しい
しかしそれはclass自体が完全に不要であることを意味する
なぜならクラス継承以外の必要なオブジェクト指向プログラミングの機能はclass以外も備えているからだ
GoやNimやRustやZigなど新たな言語がclassのみ採用しなかった理由がそれ
2026/06/28(日) 07:34:21.80ID:yH7Apu6o
classを継承できなかったら存在価値がない。
単純に抽象化の設計ミスだと思いますね。
446デフォルトの名無しさん
垢版 |
2026/06/28(日) 07:53:42.45ID:2VTQVmsl
クラスとかゆううんこが採用されたのも今や黒歴史
447デフォルトの名無しさん
垢版 |
2026/06/28(日) 08:06:46.53ID:ZGnDkuNH
>>445
class継承は汚い密結合になるため使ってはいけない
Javaの生みの親ジェームズ・ゴスリンもJavaを再設計できるならclass継承を削除すると言っている
2026/06/28(日) 10:39:49.96ID:7lywShnK
新しいの発見した
https://www.youtube.com/watch?v=36x5uzlyQTU
2026/06/28(日) 15:44:04.19ID:yH7Apu6o
継承できないと、統一した処理ができなくなるなー。
objectiveC/C++/C#/Javaといろいろ使ってきたけど、
継承がメインだなぁ。俺の設計はね。
意味によってまとめた抽象化ね。
450デフォルトの名無しさん
垢版 |
2026/06/28(日) 15:50:16.11ID:KgdYT8h9
インターフェースの継承と実装の継承の区別という語り尽くされた話
初心者じゃないのにこれわかってない奴は引退したほうがいい
2026/06/28(日) 16:06:46.39ID:hbVepLi7
>>449 
クラス継承ではなくインターフェース継承を使いなさい
2026/06/28(日) 16:40:07.30ID:yH7Apu6o
基本はinterfaceのimplementとabstract classの実装だが、
速さや利便性が必要で、実装を継承せざるを得ないところもあるしねぇ。
40年もOOPSやってると特に密結合だからって困るようなことにはならない。
触られて困るところはprivateにしてるし。
というか、作業用class以外はimmutableだし。
453デフォルトの名無しさん
垢版 |
2026/06/28(日) 16:44:29.81ID:2VTQVmsl
サンクコストと老化で新しいものが受けつけなくなる
454デフォルトの名無しさん
垢版 |
2026/06/28(日) 17:00:27.10ID:d78YP/10
どうせひとりでしょぼいクラスライブラリ作ってるだけで大規模プロジェクトで開発した経験ないだろ
あと40年前ってJava登場前でデザインパターンの概念もない
ほんとにその当時からOOPやってたんなら先進的だが、そこから進化できなかった化石ジジイ
2026/06/28(日) 17:49:17.50ID:rR1NkrT7
事実としてメジャーOSのネイティブGUIはすべて実装継承ベース
実装継承が悪なんじゃなく実装継承を適切に使いこなせない開発者が悪
2026/06/28(日) 18:02:27.43ID:7RIIBmwV
>>455
それ逆
GUIなどの巨大なクラス継承ピラミッドの雁字搦めな状況こそ失敗例の象徴
457デフォルトの名無しさん
垢版 |
2026/06/28(日) 20:46:07.70ID:agDjI1je
GUIはもちろんインターフェース継承が好ましい
クラス継承とは異なりインターフェース継承は各GUIが備える様々な機能ごとに個別に問題なく多重継承できる
2026/06/28(日) 22:52:26.03ID:yH7Apu6o
Why extends is evil を読んでみたけど、
そりゃ、設計がおかしい。あたりまえな話。
extendsの問題ではなく、extendsを正しく扱えないプログラマの問題だった。
そりゃただのバグですって。
javaは初心者でもバグを出さないように使えるのが基本だから、extendsを禁止してもよいだろう。
c/c++は、メモリ管理からなにから自己責任だから、
c言語を通ってきたプログラマなら何使っても大丈夫なほどに鍛えられる笑。
はずなのだが、とんでもないCプログラムをよくみかける。
そんなシステムで生活しとるわけですね。こわいね。
2026/06/28(日) 23:46:54.34ID:T2mV/HCF
>>456
実装継承は悪という教えが流布されるようになってから既に30年以上経過しているが
君の言うところの失敗例の象徴以上のものがただの一つも実用化されないのがなぜだか考えたことはないのかな?
460デフォルトの名無しさん
垢版 |
2026/06/29(月) 00:41:38.91ID:n43HoUbf
既存言語の後継言語を除くと
新たなプログラミング言語全てでclassが言語仕様にない
class継承のない世界は既に実現されている
2026/06/29(月) 01:00:52.09ID:/SBoD75G
クラスがないとプログラミングできないダメな人は古い言語しか使ったことのない老害だけだよ
2026/06/29(月) 03:47:27.26ID:XgZrefaR
別に難しくないし
2026/06/29(月) 03:57:43.07ID:nEovP2UU
頭が固くなってしまって難しいと思い込んでるから邪悪なクラス継承を捨てられないんだろうね
464デフォルトの名無しさん
垢版 |
2026/06/29(月) 13:11:26.03ID:I5uS6m71
>>445-451
ほんそれ
クラス継承はもう古い
Traitが正義
465デフォルトの名無しさん
垢版 |
2026/06/29(月) 13:15:51.61ID:mUiv8gBt
そもそもC言語なんで言語機能として継承はない
話しても無駄
2026/06/29(月) 13:27:32.28ID:N3v0aa5l
時代はScalaだな
467デフォルトの名無しさん
垢版 |
2026/06/29(月) 15:18:19.76ID:CNmS1g/x
Scratchとかイイよね
2026/06/29(月) 16:16:42.46ID:1LuJ74DJ
マクロがあれば何でもできる
469デフォルトの名無しさん
垢版 |
2026/06/29(月) 16:52:53.62ID:mUiv8gBt
​C言語のマクロはチューリング完全ではないのでなんでもは出来ない
2026/06/29(月) 19:23:22.41ID:t6ntXMKU
ま、classの継承すらまともに書けないのは問題だ。
初心者には邪悪にみえるのだろうが、C言語を超える邪悪な言語はない。
悪魔のような言語で、ほぼほぼメモリを壊しながら気づかれずに動いてるものしかみたことがない笑。
2026/06/29(月) 20:12:55.40ID:qm5pWlId
初歩的なアセンブラへのトランスレータに多くを求め過ぎ
2026/06/29(月) 20:50:05.90ID:UDMQjyXB
>>470
classの継承は密結合になるから使うべきでない
「俺は熟練プログラマーだから密結合でも使いこなせる!」と言う人がいたら頭がおかしい
2026/06/29(月) 22:06:28.13ID:qVQDnaJf
>>460
君の主張は実装継承が問題なのではなくclassの存在だけが問題ということなのか?
実装継承の有無にclassの有無は関係ない

それとも旗色が悪くなったから単純な論点ずらしを試みてるだけ?
2026/06/29(月) 22:13:15.16ID:qVQDnaJf
>>472
比較的新しいメジャーなGUIフレームワークもすべて内部実装はゴリゴリの実装継承で実現されてる
FlutterしかりReactNaiveしかりSwiftUIしかりWinUIしかりAPLしかり
GAFAMが揃って君が頭がおかしいと思ってる考え方で一致している

現実を見よう
475デフォルトの名無しさん
垢版 |
2026/06/29(月) 22:21:10.28ID:mUiv8gBt
goto便利と言ってんのと同じレベル
2026/06/29(月) 22:21:29.11ID:9Jord0g1
classのある言語を列挙してclassを使っていると言ってるようなもので意味なし
477デフォルトの名無しさん
垢版 |
2026/06/29(月) 23:59:55.21ID:cS3SyDHy
文書化されたフレームワークの作法内でつかう分にはそう変なことにはならなくない?
2026/06/30(火) 11:53:48.99ID:QDK5gu9C
MFCとかいう最悪のオブジェクト指向ライブラリが数十年にわたって底辺プログラマーのお手本だったのが原因
2026/06/30(火) 14:01:12.06ID:4ZM6ROmX
gotoは便利だと思うがw
480デフォルトの名無しさん
垢版 |
2026/06/30(火) 14:06:38.18ID:djxuMZVO
MFCは悪い見本だから
2026/06/30(火) 18:10:45.61ID:ZMd/WaY6
>>478
何の原因?
2026/06/30(火) 18:52:16.67ID:aFbT+Id3
>>478
だよなー
年収3,000万程度の底辺プログラマーが
GoogleやAppleみたいな底辺企業でGUIフレームワーク書いてるのが原因だよなー
俺等みたいに真っ昼間から5chやってる上級プログラマーから見れば馬鹿げた作り方だよなー
2026/06/30(火) 19:01:12.23ID:vZaXidUJ
プログラミング言語の言語仕様の問題だろ
当時はクラスを排除した現在のモダンな言語が無かった
GUIフレームワークなどクラス継承で作ることになりそれが広まった
2026/06/30(火) 22:48:50.69ID:5z4t7vy/
そもそもC言語に元からクラスなんてないのになぜクラスの話をしているんだw
2026/06/30(火) 22:59:15.56ID:UtZjeWQa
>>484
今では失敗作となったクラスをCに無理やり導入したC++があるからでしょ
2026/07/01(水) 00:27:42.86ID:x5hm259/
スレチが通じない悪寒
2026/07/01(水) 07:40:08.32ID:Uf0SnY9C
もうねCの話してね
2026/07/01(水) 09:16:49.66ID:3AIrBaIB
そうだね
はじめてのCは持っているだけで白い目で見られていたような気がする
489デフォルトの名無しさん
垢版 |
2026/07/01(水) 10:43:45.22ID:tWNMGkRp
ハードウェア動かす言語なのでめっちゃ高い自由度
組み込み系、デバドラ、低レベルライブラリ以外はもはや使われない
2026/07/01(水) 10:53:33.28ID:UJyxOvK/
Cコンパイラしか提供されない組み込み環境を除くと、
それらの分野もRustへ移行しつつある
491デフォルトの名無しさん
垢版 |
2026/07/01(水) 15:38:07.16ID:ZZqLB/LX
でもコンパイル遅いのはまじで開発回らないから採用できない
492デフォルトの名無しさん
垢版 |
2026/07/01(水) 15:41:45.63ID:Bfy85+Be
そう考えるとwebフロントバックから組込まで使われてるrustてすごいわ
2026/07/01(水) 16:13:32.18ID:aTcTIKau
Rust!Rust!
2026/07/01(水) 16:33:38.91ID:QvZFAvUv
rustとc++ってどっちがコンパイル時間長いの?
2026/07/01(水) 19:03:16.25ID://YObUqY
リンク時間まで含めると同じくらい
2026/07/01(水) 19:06:08.22ID:3OcXaJ0q
で、C言語の話は?
2026/07/01(水) 21:22:03.06ID:xfe/unY1
C言語の設計が悪いわけじゃなくてコンピュータとメモリモデルを理解してない >>1 が悪いだけ
2026/07/02(木) 00:02:58.33ID:DdXzOkSf
>>484
言語要素にクラスと命名されたものがないというだけで概念としてのクラスはCでも一般的に使われている
Cで書かれた有名なソフトウェアやライブラリであればほぼ100%と言っていい
2026/07/02(木) 00:14:36.96ID:bbwDIcek
>>498
クラスは言語機能じゃい、「概念としてのクラス」なんてものはない
クラスはオブジェクト指向・コード再利用・名前空間などを全部一機能でやろうとした結果生まれた怪物に過ぎない
2026/07/02(木) 00:21:48.27ID:bbwDIcek
C言語はクラスがないのでオブジェクト指向がわかりやすい
オブジェクト指向をクラスを使うことと勘違いしている人が「C言語ではオブジェクト指向はできない」などと騒ぐがむしろ逆で、それを言っている奴ほどオブジェクト指向がわかってない

「データ構造とそのデータ構造を必要とするロジックを一体として扱い、内部では密結合させつつ外部に対しては隠蔽することで、外部との疎結合を実現して利用やメンテナンスを容易にする」のがオブジェクト指向の目的で、カプセル化・ポリモーフィズム・合成もこのための機能にすぎない

ただ、実装継承はコード再利用のためにカプセル化を破壊し、外部と内部を密結合させる技術なので、真面目にオブジェクト指向をしたければ用いてはならず別の用途で使う機能だと考える必要がある
クラスはここを曖昧に混ぜてしまっているので、オブジェクト指向を学ぶ上では邪魔になる

C言語ほど必要な機能だけが揃い、混乱のもととなる余計な機能がない言語も珍しい
真面目にオブジェクト指向やクラスを語りたければ、まずCをしっかりやるべきだ
2026/07/02(木) 01:17:01.08ID:eC6kBeIA
#define C言語 Rust
2026/07/02(木) 02:31:46.28ID:0aKEOzTQ
>>499
クラスという概念を説明できないのかな?
それだとクラスを理解してるとは言えないよ
503デフォルトの名無しさん
垢版 |
2026/07/02(木) 03:43:40.31ID:4sqxhRzV
このスレッドはポインタがわからないレベルの素人スレッドか
2026/07/02(木) 10:04:11.24ID:zGfDfspf
C++などは機能単位に変数や関数アドレスを構造体に押し込めただけだから
Cでもオブジェクト指向プログラミングは出来るよ
2026/07/02(木) 14:08:41.65ID:/AOAVSgf
>>502
ないものは説明できないよw
「C言語という概念」みたいなこと言ってるのと同じだから
2026/07/02(木) 14:09:51.17ID:/AOAVSgf
>>503
C言語の設計が悪いとか言ってる奴はまず そうやろな
2026/07/02(木) 14:12:40.61ID:/AOAVSgf
>>504
まあ、クラスなんてのはオブジェクト指向(カプセル化・ポリモーフィズム・合成)、コード再利用(実装継承)、名前空間などの機能をまとめただけの糖衣構文の塊だからね
508デフォルトの名無しさん
垢版 |
2026/07/02(木) 14:40:35.23ID:4sqxhRzV
>>504
OSのいろんなシグナルやメッセージで動きを変えるネイティブアプリだとC言語は現実的ではく、C++にするしかない。

C言語やC++を使わなくて済むなら、もっと高水準言語を使うべきだな。
2026/07/02(木) 15:16:18.33ID:/AOAVSgf
>>508
別にC言語でも書けるが……
510デフォルトの名無しさん
垢版 |
2026/07/02(木) 16:48:51.86ID:4sqxhRzV
>>509
Windows App SDK開発を知らないだろ?
511デフォルトの名無しさん
垢版 |
2026/07/02(木) 16:49:38.59ID:4sqxhRzV
>>509
ミドルウェアのソースコードがC言語のことはあまりない
2026/07/02(木) 18:05:04.47ID:AbUl+4TM
>>505
構造体という概念もない?
インターフェースという概念もない?
メソッドという概念もない?

全部本気でイエスなら「概念」自体を理解できてないのでそこからはじめてくれ
まあ説明できないからないと言ってるだけだと思うけど
513デフォルトの名無しさん
垢版 |
2026/07/02(木) 18:08:25.02ID:4sqxhRzV
オブジェクト指向プログラミングとオブジェクト指向プログラミング言語は別だからな
514デフォルトの名無しさん
垢版 |
2026/07/02(木) 18:57:09.25ID:MpyLaV4P
scratchはオブジェクト指向プログラミング言語
2026/07/02(木) 19:21:38.47ID:kPjcw+Hr
どう頑張っても1バイトが7ビットになることはないからw
2026/07/02(木) 21:50:58.52ID:HSaR3Nya
古のコンピューターでは1バイト6bitや7bitなんて事もあったらしいぞ
その名残か?
517デフォルトの名無しさん
垢版 |
2026/07/02(木) 22:59:15.70ID:4sqxhRzV
ネットワークの世界だと8ビットのうち、7ビットしか使っていない機器はいまだに存在する。
2026/07/02(木) 23:59:59.18ID:OoDmJP07
7bitで残り1bitはパリティ。
さすがに6bitはみかけない。まだどこかで動いているんだろうけど。
2026/07/03(金) 00:22:51.37ID:OL7baTSG
通信のビットストリームとレジスタのビット幅を同列に考えるのは無理がある
520デフォルトの名無しさん
垢版 |
2026/07/03(金) 01:43:07.22ID:zLCCyepo
しつこいな
2026/07/03(金) 07:29:33.28ID:2t9Z1Cme
c++も最初は一旦c言語に変換してからビルドしていたから
cで書けない事は無いんだよね
2026/07/03(金) 12:23:56.67ID:zLAnH+LU
Cで書けないことはアセンブラで書けないこと
2026/07/03(金) 12:39:37.48ID:eKNx318E
>>522
それは無い
524デフォルトの名無しさん
垢版 |
2026/07/03(金) 17:49:57.25ID:zLCCyepo
>>521
そういう話ではないし、OSやCPUの進化のよってC言語ではコードを大量に書かないといけなくなっただけ
525デフォルトの名無しさん
垢版 |
2026/07/03(金) 17:50:52.85ID:zLCCyepo
>>522
いまどきそのアーキテクチャのアセンブラがわかるなんて言わない方がいい
526デフォルトの名無しさん
垢版 |
2026/07/04(土) 13:30:15.68ID:C/MUGRLI
このスレの要点はFILE構造体がclassだと言われて納得するかしないか
2026/07/04(土) 14:22:25.95ID:q0Ja9598
クラスなんて実際に構造体だろ
528デフォルトの名無しさん
垢版 |
2026/07/04(土) 14:23:22.03ID:YYWloYLh
>>526
C言語はポインタで関数を呼び出せるから、クラスのようなものとも言えるが、オブジェクト指向プログラミング言語と言い切るのは無理がある。
2026/07/04(土) 14:47:45.38ID:rUN7HlfP
オブジェクト指向「言語」ではありませんね。
オブジェクト指向な設計はできますが、それを支援したりかえって邪悪だったり、
とかすることもありません。
構造体やunionつかってクラスのようにまとめたりしてましたが、c++は邪悪さも強い笑。
C言語はポインタ指向と考えて割り切ってつかってた。ポインタとtypedefとconstさえあれば。
530デフォルトの名無しさん
垢版 |
2026/07/04(土) 20:55:53.53ID:uPRjt9BI
逆にオブジェクト指向言語はオブジェクト指向プログラムしか組めないってのかね?
531デフォルトの名無しさん
垢版 |
2026/07/04(土) 21:08:22.77ID:YYWloYLh
>>530
Javaはそれに振り切って普及した
532デフォルトの名無しさん
垢版 |
2026/07/05(日) 10:40:26.92ID:wH3543Zu
>>531
classつくれや!って強制するから巨大クラスが出来上がった
2026/07/05(日) 12:31:43.93ID:on55uTyB
まあでもね
クラスを悪者にしたところで
じゃあ関数はどうなのか
関数レベルではちゃんと設計されてるのかっていうと
それも結構怪しい

さらに下位の構造を考えて
ループや変数の使い方はちゃんと書けてるのか?
っていうとこれも怪しい
見通し悪かったり変数名がヘンだったり

ここら辺に至っては意識すらされていない
2026/07/05(日) 14:55:40.95ID:hU9WxTPH
すごいのよ、バッファからはみ出ないようにサイズをチェックするんだけど、
実行して溢れさせてからサイズチェックしてエラー返すとか普通に行われているんだ。
それで動いてるんだ。
想定していないデータが来ると簡単にクラッシュするようなロジックが多いし、
そんなロジックでも通ってしまっておかしなデータが紛れ込んで、
一年後ぐらいに壮大にシステムがクラッシュするんだよ。
2026/07/05(日) 15:20:44.61ID:evQt+ptr
>>532
別にクラス特有の理由があるわけではないよね?
ファイルでもモジュールでもクラスでも分割方法を知らなければ
巨大ファイル・巨大モジュール・巨大クラスができる
536デフォルトの名無しさん
垢版 |
2026/07/05(日) 16:35:06.98ID:KM58W1HO
グラフィカルなUI作れるんだし
エクセルのセル空間みたいので配列作ったり関数つくりゃ何でもありじゃん
537デフォルトの名無しさん
垢版 |
2026/07/05(日) 16:44:26.13ID:23XfPMOq
cもまあまあうんこだけどエンプラしか使ってないjava c#よりはまだましだと思える
538デフォルトの名無しさん
垢版 |
2026/07/05(日) 16:46:34.09ID:mGbnQmHn
過度なカプセル化は融通が利かずに逆にコードが肥大化、分散化して理解を妨げるというだけの話
一方で不特定多数に使われ、互換性維持が重要なインターフェースでは依然カプセル化は重要
適材適所というつまらない結論
539デフォルトの名無しさん
垢版 |
2026/07/05(日) 19:55:56.45ID:JhYHiF9x
>>533
どういうレベルの話なんだよw
540デフォルトの名無しさん
垢版 |
2026/07/05(日) 19:56:55.85ID:JhYHiF9x
>>536
C言語にはグラフィック機能はしない
541デフォルトの名無しさん
垢版 |
2026/07/05(日) 19:57:26.52ID:JhYHiF9x
>>536
C言語にグラフィック機能が標準でついていると思っているのか?
542デフォルトの名無しさん
垢版 |
2026/07/05(日) 19:58:37.64ID:JhYHiF9x
>>538
カプセル化の定義から話せよ
543デフォルトの名無しさん
垢版 |
2026/07/05(日) 20:07:37.14ID:mGbnQmHn
>>542
それぐらい教科書読め
小学生が線形代数に文句言ってるようなもんだぞカス
544デフォルトの名無しさん
垢版 |
2026/07/05(日) 20:18:56.48ID:JhYHiF9x
こだわりすぎのカプセル化は間違いだったと結露が出ている
545デフォルトの名無しさん
垢版 |
2026/07/05(日) 20:19:26.46ID:JhYHiF9x
こだわりすぎのカプセル化は間違いだったと結論が出ている
2026/07/05(日) 20:55:19.97ID:kBCXJVVb
>>541
グラフィック機能どころか、I/O自体が言語仕様に入ってないし
547デフォルトの名無しさん
垢版 |
2026/07/05(日) 22:56:28.71ID:JhYHiF9x
>>546
stdio.h
2026/07/05(日) 23:01:10.17ID:8owe5rgJ
>>543
教科書通りの「カプセル化」の定義だと>>538の1行目はイミフ
AIが合成した文章によく見られる特徴
2026/07/05(日) 23:05:39.46ID:8owe5rgJ
カプセル化の定義というより「過度なカプセル化」の定義の問題だろうな
2026/07/06(月) 00:22:47.72ID:Rup27YHc
過度なカプセル化なんて存在しないよ
必ずカプセル化する
そして必要なインターフェースのみ公開する
551デフォルトの名無しさん
垢版 |
2026/07/06(月) 04:58:22.81ID:FszdM9Rh
>>550
お前がどんな言語使ってるか知らんがPythonやJavaのような広く使われているいわゆるOO言語でも別にカプセル化は強制されない
意味がわからなかったらAIにでも聞いとけ
2026/07/06(月) 07:01:04.59ID:cq75L6yS
PythonもJavaもカプセル化する
余分な邪悪な機能付きとはいえクラスがある
2026/07/06(月) 11:55:32.57ID:kqeCanSu
オレも昨日マチアプでカプセル化してきた
インターフェースの相性良かったから密結合になりそう
2026/07/06(月) 12:53:24.29ID:Om8f/tp9
553がバイド化するぞ気をつけろ
2026/07/06(月) 13:06:58.16ID:uYMeLnpf
>>538のカプセル化はモジュール化の意味っぽいね
「過度なカプセル化」は必要以上にモジュール/クラスを細分化した状態のことなんだろう
過度なモジュール化とか過度なクラス細分化とでも言えば通じただろうけど
モジュール化と違ってカプセル化には分割するという意味はない「過度なカプセル化」では通じない

高凝集・疎結合という線形代数どころか逆に小学生レベルの話でしたというオチ
2026/07/06(月) 14:21:59.24ID:wKirmoVj
>>511
ミドルウェアが何を指してるのかにもよるけど、普通にC言語でも開発されてるケースが多いけどね

>>512
君は概念と言語仕様の区別がついてないね
メソッドやインターフェースは概念と言語仕様を同じ言葉で語ることがあるから、そこが混乱のもとなのはわかるけど、イキるなら切り分けられるようになってからでないと恥ずかしい
クラスや構造体は単なる言語仕様で、概念ではないね
2026/07/06(月) 14:22:58.70ID:wKirmoVj
>>522
それはない
2026/07/06(月) 14:25:08.28ID:wKirmoVj
Cはハードウェア毎の最適化ではなく抽象マシンに基づく汎用化が行われた言語なので、アセンブリにできてCにできない処理は山ほどある
C++やJavaにできてCにできない処理はないけどね
低レイヤと高レイヤは一方的だよ
2026/07/06(月) 14:29:18.46ID:wKirmoVj
>>526
結局これなんだよな
FILE は間違いなく「オブジェクト指向」なので、オブジェクト指向 = クラスが必要という主張なら、FILEは クラスになる
まあ実際はそんなわけがないんだが

>>533
もちろん道具は使い方だけど、悪い使い方がベースになってしまうような道具の設計には問題があるという話
クラスは用途がオブジェクト指向、コード再利用、名前空間など多岐に渡っていて、特にオブジェクト指向とコード再利用という矛盾する概念を一つの道具にまとめたので、悪いコードを生みやすくなった
AEDのパッドの内側に刃を取り付けるくらい意味のわからない設計になっている
2026/07/06(月) 14:30:39.83ID:wKirmoVj
>>547
勘違いされがちだが標準ライブラリは言語仕様ではないぞ
2026/07/06(月) 14:54:49.86ID:wKirmoVj
>>531
Javaが普及したのはクラスを強制したからではなく、JVMが優秀だったからだよ

>>535
ファイルやモジュールにおいて複数の矛盾する設計が同居するのは基本的に悪だけど、クラスは最初からそうなっているのが問題
2026/07/06(月) 14:57:44.59ID:wKirmoVj
>>528
オブジェクト指向とオブジェクト指向型言語は違うよ

>>510
Windows App SDK自体がOSの直接のAPIじゃないこと知らなそう
2026/07/06(月) 15:01:32.94ID:wKirmoVj
>>521
>>524
それはそうで、C++で出来ることはCで書ける
書く量が多くなるのもそうで、書く量を減らして見通しのいいコードを実現するために、既存の構文に変換できる新規構文を追加するものを、糖衣構文と言ったりする

>>527
これもそうだね
クラスなんて結局内部的には構造体と関数ポインタの組み合わせの糖衣構文に過ぎない
564デフォルトの名無しさん
垢版 |
2026/07/06(月) 17:00:38.47ID:kOXweps4
>>563
それはを拡大解釈しすぎ
便利レベルの単純な置き換えで還元できるものが糖衣構文であって
パラダイムの違いを生み出す大掛かりもののことではない
2026/07/06(月) 17:47:07.93ID:Keq3NWrV
Rustの構造体によるオブジェクト指向対応例がわかりやすいんじゃないか
struct foo {
 フィールド一覧
}
これだけでカプセル化は終わりだが付随するメソッドの関数ポインタでは分かりにくいので
impl foo {
 関数など一覧
}
これがC言語と比べて加わってる
問題児のクラス継承(=実装継承)の機能はないためclassと名乗っていない
2026/07/06(月) 18:00:29.57ID:wI0686t9
またカプセル化の定義からやり直しww
草すぎる
2026/07/06(月) 18:13:39.96ID:rWeA+Q0G
Rustの構造体はそれ自身も各フィールドもデフォルトではモジュール外からアクセスできないためカプセル化は完了してる
ちなみにRustのモジュールはコードファイル内に1つ~複数のモジュールを書く小規模
568デフォルトの名無しさん
垢版 |
2026/07/06(月) 19:06:10.40ID:FszdM9Rh
>>555
モジュールを細かくわけることが過度なカプセル化ではない
メッセージパッシングのパラダイムをどこまで厳格に適用するかにはグラデーションがあるということ
教科書読め
なおOOの三大原則はカプセル化、継承、多相性と書いてある本は捨ててよい
2026/07/06(月) 23:34:25.80ID:22Ur03I7
>>568
「過度なカプセル化とはメッセージパッシングのパラダイムを厳格に適用し過ぎること」と書いてある教科書の名前を教えてくれよw
2026/07/07(火) 07:10:44.49ID:Nai4K22c
まあ、本物のオブジェクト指向プログラミング言語ならメッセージ交換だからなぁ
571デフォルトの名無しさん
垢版 |
2026/07/07(火) 09:02:42.42ID:rMBPaQ/g
究極はAIにおまかせオブジェクト指向
なんじゃ…
2026/07/07(火) 10:55:12.37ID:timGrpSA
>メッセージパッシングのパラダイムを厳格に適用し過ぎると
>融通が利かずに逆にコードが肥大化、分散化して理解を妨げる

言い方を変えてみたところで過度な分割だよね
2026/07/07(火) 12:07:13.68ID:WzC1h6at
フィールドをprivateにすることがカプセル化だと思い込んでるやつ多いんだよな
Javaの試験ではそれが正解らしい
2026/07/07(火) 13:21:51.41ID:+ppS3IjF
内部データ構造を隠蔽して必要な公開インターフェースのみ公開することがカプセル化
だからフィールドをprivateにすることは必須
まともな言語仕様ならデフォルトでprivate宣言することなくそうなっているべきところ
2026/07/07(火) 13:31:26.33ID:EWePSppT
ソフトウェア設計思想の中で最も有名とも言えるオブジェクト指向の定義が明確にされていないというのは不思議なことだな
AIに質問しても例の4つを挙げてくるし
哲学とか抽象化とか得意そうな連中がたくさんいそうなのにな
2026/07/07(火) 13:44:25.82ID:5/WAAUAU
実体継承については、all deny機能が欲しいねぇ。
577デフォルトの名無しさん
垢版 |
2026/07/07(火) 17:30:33.70ID:9e2dG6i+
>>572
分割だけが問題ならC言語でも関数型言語でも起こる問題になるだろ
日本はCSの教養がないヘボエンジニア多すぎが問題だな
2026/07/07(火) 20:35:28.06ID:7NfqkUTf
順番が逆なんよね
変数ありきでそれを隠そうって考えたら
全部の変数をprivateにすべきかどうか
全部の変数にget/setを準備すべきかどうか
ってことになりかねないけど

クラスってもんを内部から考えずに
他のクラスとの関係
クラス間の協調というレベルで定義していくと
そっち側からインタフェースが徐々に決まってくるわけで
そんで
インタフェースじゃないものはpublicにはならない
すなわち、実装のための変数や関数は結果的にはprivateにしておくだけ
2026/07/07(火) 21:03:13.69ID:3hrGCGb+
>>578
>>変数にget/setを準備

それは一番愚かな禁忌
本当にその必要がある時はパブリックにする
580デフォルトの名無しさん
垢版 |
2026/07/07(火) 21:08:10.04ID:r5uulGXp
C言語だと過度な抽象化はありえない
基本void*ポインター使って構造体や関数を呼び出すだけっていうシンプルな作りが逆に功を奏してるいい例だな

delegateみたいな関数の呼び替え機構をいちいち作ったりしなくてもポインターで呼び出せば足りることが多い印象
2026/07/07(火) 21:23:55.68ID:1bE5tFoQ
>>564
だったらC言語でもオブジェクト指向はできるから糖衣構文で合っている
C言語にはクラスが存在しないだけであって、構造体と不透明なポインタ、それを受け取る関数を作り、あるいは構造体に関数ポインタとして埋め込めばよいだけである
パラダイムレベルの差が言語仕様で生まれている事実はない

>>575
上記の通り、クラスとオブジェクト指向を区別出来ていない奴が多いから、本来のオブジェクト指向のこととクラスのこと、両方がオブジェクト指向と呼ばれてしまっている
クラスはあくまでオブジェクト指向を便利にするための糖衣構文であり、オブジェクト指向そのものではないのだが、有名になりすぎて混同されている
2026/07/07(火) 21:25:13.03ID:7jJqe0KH
>>580
C言語で作っても他の言語と同様にvtable相当のものが必要になる局面がある
C言語以外ではそんな内部構造は自動的に作られて見えないまま気にすることなく抽象的に使える
C言語だけは自分でvtableを作って使う世界
そんな世界に戻りたい人はいない
2026/07/07(火) 21:25:28.23ID:1bE5tFoQ
>>579
それなんだよな
「クラスにすること」が目的になってるからそんなバカげた設計になるのであって、読み書き両方を自由にやらせるならその変数自体を公開すればいい
クラスなんか必要ないのよ
2026/07/07(火) 21:35:55.18ID:b1KeL0bB
本来は読み書きは自由にしてもらっていい情報でも非公開にしてget/setにした方がいい場合あるでしょ
2026/07/07(火) 21:45:25.29ID:Lf4GBCqM
言語によって違うんだろうけど何をget/setするの?値?参照やポインタ?
例えばインクリメントが二度手間になるとか
配列やハッシュテーブルとか部分書き換えする時にget/setでは困るでしょ?
2026/07/07(火) 21:50:16.00ID:1bE5tFoQ
>>584
それは既に矛盾している
読み書き両方が自由なら変数を直で触るのと何も変わらない
どちらかが制限されているならともかく
2026/07/07(火) 21:51:13.55ID:1bE5tFoQ
ただ使いにくいUIをつけているだけで、それはブルシット・ジョブの代表例と言える
2026/07/07(火) 23:14:24.85ID:PXHZb0Ch
>>574
必須ということにしたところで
それは必要条件であって十分条件にはなり得ない
カプセル化を勘違いしている典型的なパターン
2026/07/08(水) 01:58:19.95ID:VDOYf8Fx
setter/getterはcontextを切り替えてアクセスするような場合に便利。
具体物へのアクセスではなく抽象的アクセス。
単体の具体物は存在しないかもしれない。
590デフォルトの名無しさん
垢版 |
2026/07/08(水) 03:01:17.64ID:77Md5LVX
便利さでいえばモック作ったり処理注入が素直にできる
2026/07/08(水) 03:17:29.77ID:n/AiM/7+
それは間違いでそのためにクラスなどのメソッドを直接生やしてはいけない
まず最初にその前提となる依存性逆転もモックもクラスなどから完全に独立したインターフェースなどの抽象のみに依存する形で構築することで達成される
つまり「インターフェースのみ使う側」と「実装してインターフェースのみ公開する側」を全ての階層や関係性で達成する
モックは互いに片方をダミーにして入れ替える
2026/07/08(水) 07:29:02.17ID:YUnnK2DK
まあ、UT考えたらインターフェースの方が楽だからなぁ
なんて邪道かなぁ?
2026/07/08(水) 10:10:12.31ID:032zapuD
そこは全ての言語で同じ結論になってる
古い言語は仕方ないが新たな言語Go Nim Rust Zigなどはクラスを完全に捨てて言語仕様から外した
そして言語毎に異なるがインターフェース相当を用いる
つまりクラスは不要なもの
2026/07/08(水) 11:17:21.84ID:2VwKSqwX
>>593
全然同じ結論じゃねーよ
Nimはクラス相当あるしクラス相当からクラス相当への実装継承もある
Zigはクラス相当どころかインターフェース相当も捨ててる
嘘も大概しろな
2026/07/08(水) 11:30:41.94ID:IfhGTTfA
>>594
Zigは構造的インターフェース
型が異なっても同じインターフェースなら使える点で同じ
596デフォルトの名無しさん
垢版 |
2026/07/08(水) 11:37:11.60ID:3P4UxoLe
classではないものを便宜上classと呼んでclassだと思い込んでるだけの共同幻想
597デフォルトの名無しさん
垢版 |
2026/07/08(水) 11:38:40.14ID:3P4UxoLe
RustのTraitは実質interface
2026/07/08(水) 11:40:32.73ID:FFwmK7p4
>>589-590
別にそんなものがなくてもプログラミング言語の大前提として、変数への書き込みと変数からの書き出しは逆の構文になるわけだから、他のメソッドがないのにクラスに格納してsetter/getterを設ける必要はないし、そうでないと区別がつかないならそちらの方が問題
2026/07/08(水) 11:41:16.67ID:XRhwYd5D
>>594
Nimに実装継承はないよ
Nimのオブジェクト継承は実装継承ではない
実装継承になりうるメソッド継承がそもそも存在しないんだよ
全く別実装のオーバーロードになる
フィールド継承はあるけどこれも実装継承ではない
2026/07/08(水) 11:43:39.54ID:FFwmK7p4
>>593
Nim は他より生まれた時期も少し古いし、立ち位置や思想も違う
Go / Rust / Zig は C / C++ の影響を強く受けているが、Nim は Python の影響を強く受けている
2026/07/08(水) 11:54:07.02ID:3kNQZQgh
>>600
そのモダンな4つの言語は背景も思想も言語仕様も全くバラバラなんだけど
「クラスがない」
「実装継承がない」
という点だけは完全に一致してるんだよ
つまりクラスと実装継承は悪手であることが判明した共通の認識がプログラミング言語界にある
Javaの産みの親のジェームズ・ゴスリンでさえもJavaを再設計できるなら実装継承つまりクラス継承を外すと言ってるくらい共通の認識
2026/07/08(水) 11:55:51.78ID:FFwmK7p4
ただ、設計思想としては最近の言語はどれも
合成/委譲 >>>>> 実装継承
であることは共通している

そもそも >>500 にもあるように実装継承はオブジェクト指向の邪魔になることが多い
2026/07/08(水) 11:56:47.59ID:FFwmK7p4
>>601
クラスがないことが共通点というのは少し言い過ぎ
他は >>602 に書いたけど
2026/07/08(水) 11:59:37.14ID:FFwmK7p4
強いて言えばクラスという名称はないけど、そこはあまり重要じゃなくてその後の設計がどうかって部分が大きい
2026/07/08(水) 12:04:54.37ID:FFwmK7p4
>>568
正しい意味でメッセージパッシングをしているなら、それは厳格に適用された方がいいし、適用できないならそのやり方自体があっていない
オブジェクト指向について一番重要なことは、何にでも使える万能薬ではなく、特定の構造を改善する特効薬だということ
2026/07/08(水) 12:07:55.88ID:SErvtKUw
今どきクラス継承(実装継承)を常用してるプログラマーは下手プログラマー
インターフェース継承を用いた方が疎結合の良いプログラムになる
2026/07/08(水) 12:42:51.19ID:DzG1nXb9
>>593
GoやRustではメソッド生やせる構造体がクラス相当
つまりクラスは必要なもの
2026/07/08(水) 12:43:52.52ID:DzG1nXb9
>>597
RustのTraitをインターフェース相当と呼べるなら
メソッドを生やせる構造体は間違いなくクラス相当と呼べる
2026/07/08(水) 12:50:11.72ID:DzG1nXb9
>>606
今はインターフェースのデフォルト実装という形で実装継承が常用されている
つまりインターフェース継承は実装継承批判者が言うところの「密結合」になっている
2026/07/08(水) 12:51:25.67ID:lLJlQgVi
>>607
バカだな
クラスと命名されてるものにはクラス継承すなわち悪の実装継承があるだろ
クラスと命名されてないものには悪の実装継承がない
明確な区別がある
2026/07/08(水) 12:55:47.00ID:+Q+JwoGf
>>609
インターフェースのみを用いるデフォルト実装は実装継承ではないです
なぜなら親は具体的な型ではないからです
つまりそのインターフェース継承する子たちに共通の内部構造は存在しません
つまり実装継承でない明瞭な証拠です
2026/07/08(水) 16:42:00.00ID:dyZTLEHZ
>>609
実装継承の意味を理解してないじゃん
2026/07/08(水) 17:26:57.87ID:dyZTLEHZ
>>609
内部の実装がどうだろうが関係ないのにどこが密結合なんですかねw
2026/07/08(水) 21:50:50.65ID:z7ALT/iC
>>609
インターフェース継承もそのインターフェースで作られているデフォルト継承も疎結合

まずインターフェース継承がなぜ密結合にならないのか?
それはインターフェースを継承する各型は互いに関係がないためだ
それぞれ各型の内部構造は自由に変えてもよく他の機能を付加しても自由で疎結合
継承したインターフェースのみ提供すれば他は何をしても自由だ

それらを使う外部から見てもインターフェースにのみ依存するため互いに疎結合
じゃあそのインターフェースで作られたデフォルト実装はなぜ密結合にならないのか?
それはデフォルト実装が先ほどの外部と全く同じ立場だからだ
デフォルト実装はインターフェースにのみ依存している
特定の型には一切依存していない
だからデフォルト実装は実装継承ではなく疎結合になっている
615デフォルトの名無しさん
垢版 |
2026/07/08(水) 22:18:58.94ID:Gtm6u5sh
もっと簡潔に書け無能
2026/07/08(水) 23:33:28.39ID:/qBCa+c/
デフォルト実装が疎結合になることは実例コードがわかりやすいのかなー
例えばRustでイテレータのインターフェース(Rustではトレイトと呼ぶ)は

type Item;
fn next(&mut self) -> Option<Self::Item>;

これだけ
つまりイテレータに対して「next()」を実行して
まだ返す値(Item型)があれば「Some(値)」を返して尽きていれば「None」を返す
※ ちなみに上記のOption型はSomeかNoneを返すenum型(列挙型)
どんな内部構造のイテレータでもこのインターフェースのみに依存するためこれを用いても疎結合

このイテレータのインターフェースnext()を使って
「3番目を返す」デフォルト実装third()を作ってみる

fn third(&mut self) -> Option<Self::Item> {
 match self.next() {
  Some(_first) => match self.next() {
   Some(_second) => self.next(),
   None => None,
  }
  None => None,
 }
}

まず最初のnext()で取り出して_firstが存在すれば
さらにnext()で取り出して_secondが存在すれば
さらにnext()で取り出したものがthirdになるのでそれを返している

この関数は公開されているインターフェースnext()しか用いていない
どんな内部構造のイテレータに対しても依存せずに動く点は外部からnext()を使った場合と同じ
このようにデフォルト実装を用いたものも疎結合になる
2026/07/08(水) 23:45:33.91ID:s8cjfAu5
同様に最後の要素を得るデフォルト実装はこうなる

fn last(&mut self) -> Option<Self::Item> {
 let mut cur = None;
  while let Some(x) = self.next() {
   cur = Some(x);
  }
 cur
}

引数の関数「f(要素)->Output型」で写像する「map(f)」はこうなる

fn map<Output>(&mut self, mut f: impl FnMut(Self::Item) -> Output) -> Option<Output> {
 match self.next() {
  Some(x) => Some(f(x)),
  None => None,
 }
}

イテレータの要素列を計算して一つの要素にまとめるfold(これはreduceと呼ぶことも)はこうなる
引数の初期値initと関数fを変えるだけで和も積もどんな演算も動く

fn fold<Output>(&mut self, init: Output, mut f: impl FnMut(Output, Self::Item) -> Output) -> Output {
 let mut cur = init;
 while let Some(x) = self.next() {
  cur = f(cur, x);
 }
 cur
}

以上これらは全てがジェネリックに任意のの型で動作する点にも注目
インターフェース継承によるデフォルト実装は、密結合の実装継承ではなく、疎結合だからそれを実現できている
618デフォルトの名無しさん
垢版 |
2026/07/08(水) 23:46:30.87ID:qowFydfb
>>586
値が読み書きされた時に何かしたいケースもあるでしょ
読み出しではあまりないかもしれないが書き込みの時とか
自身じゃなくてもコールバックでよそに通知したり
619デフォルトの名無しさん
垢版 |
2026/07/09(木) 01:02:35.75ID:kO6vcTLE
変な人来てるな
2026/07/09(木) 07:30:30.38ID:GQejlCGu
オブジェクト指向は、オブジェクトにメッセージを送るということ、だけである。
設計もそれでやって、設計のままに実装する。
オブジェクトやメッセージをどのように作るかは言語や設計者しだい。
言語にふりまわされずにオブジェクト指向をやれるのはC言語だけかもしれない。
C言語は最強のオブジェクト指向ポインタ言語だ。
2026/07/09(木) 07:31:24.91ID:73gnTkLm
また1バイトは7ビットとか言い出しそう
2026/07/09(木) 07:40:41.72ID:GQejlCGu
なわけあるかいー。と最後に叫ぶつもりだったが、ほんとうに最強言語のように思えてきた。
オブジェクトはポインタであり、メッセージもポインタだ。オブジェクトのポインタの先に
メッセージポインタを処理する機構だけあればよい。
しかも、オブジェクトとメッセージは同じであり、どちらか一方だけの概念でよく、
メッセージにオブジェクトも送れる。
ポインタにポインタを送る機構だけ。ポインタの継承。なんだかワクワクしてきた。
ポインタにどのような意味を与えるか、それだけ。本格的にポインタ指向を設計してみたい。
2026/07/09(木) 07:43:37.93ID:2ALpHPNW
>>616の例も任意のイテレータオブジェクトに対して共通のメッセージnext()がインターフェースとして定められてるたけだよ
そのメッセージnext()を用いるだけで>>617の例のようにlast()やmap(f)やfold(init, f)など多様なイテレータメソッド群をジェネリックに型依存なく構築できるという話
これが実装継承にならずに望ましい疎結合になるインターフェース継承のデフォルト実装
624デフォルトの名無しさん
垢版 |
2026/07/09(木) 08:48:10.41ID:nKCytAFu
>>623
メッセージ?
メソッドでいいじゃん
C言語の用語使おうよ
2026/07/09(木) 10:05:04.26ID:P5con6YV
後のObjective-Cである
626デフォルトの名無しさん
垢版 |
2026/07/09(木) 15:56:38.38ID:xJ9qw/+T
>>624
メッセージとメソッドは異なる概念
メソッドで同期的メッセージパッシングをエミュレートしてるといえるのがJavaなどのオブジェクト指向言語
あとc言語でメソッドという用語は定義されていない
いろいろ理解が浅いぞお前
2026/07/09(木) 22:06:30.95ID:t5kHx157
>>618
別の機能を持たせておいて何もしてないかのように振る舞うのはあまりよろしくない設計だな
2026/07/09(木) 22:25:03.49ID:3rcW7tMX
>>612
実装を継承したら実装継承ですよ

>>613
実装を継承していると内部の実装が関係してくるのですよ
関係してくることがないと勘違いしていることに対して警鐘を鳴らしているのですよ
継承だけに
629デフォルトの名無しさん
垢版 |
2026/07/09(木) 22:33:41.10ID:h5n0vn9W
インターフェース継承は疎結合だよ
インターフェースを継承したAとBの間に内部構造も実装も共有するところがないため

クラス継承は密結合だよ
クラスを継承したAとBの間に親と同じ内部構造と実装があるため
630デフォルトの名無しさん
垢版 |
2026/07/09(木) 22:35:43.05ID:h5n0vn9W
インターフェース継承のデフォルト実装は疎結合だよ
インターフェースのみ用いるデフォルト実装は外部からインターフェースを用いるときと全く同じ
密結合部分がありません
2026/07/09(木) 22:43:13.86ID:t5kHx157
>>628
じゃあインターフェース継承は実装を継承してないから実装継承じゃないし、実装を継承していないから内部の実装が関係してくることがないじゃん
自分で何を言ってるかくらい理解してから発言しろよアホ
2026/07/09(木) 23:15:50.58ID:3rcW7tMX
>>631
デフォルト実装の話をしてるのがわからないのかい?
文脈読んでから発言してねアホw
633デフォルトの名無しさん
垢版 |
2026/07/09(木) 23:20:45.19ID:y4v6/mDI
>>632
公開されているインターフェースのみを用いて実装されるデフォルト実装は、実装継承になりません
公開されているインターフェースのみを用いて実装される他のモジュールやアプリと同じで疎結合になります
2026/07/09(木) 23:22:23.19ID:t5kHx157
>>632
デフォルト実装がどの構造と密結合してるのか示してからイキれよ
デフォルトって言葉の意味くらい調べてこいタコ助
2026/07/09(木) 23:52:54.90ID:3rcW7tMX
>>633と>>634は同じ人かな?
知能レベルも同じっぽいし

インターフェースのデフォルト実装の実装内容を変更したときにそのインターフェースを継承している型やその型を利用しているコードの動作には一切影響がないと保証できるのと思ってるのかな?
保証するために何が必要か考えれば疎結合でないことくらいわかるでしょ?

にしてもこんなことでイキってる感じちゃうんだなwww
636デフォルトの名無しさん
垢版 |
2026/07/10(金) 00:00:59.72ID:DkL04O3s
>>635
そこは確実に独立性が保証できる
デフォルト実装はインターフェース利用側のモジュールやアプリで使うときと全く同じ
実装継承にはならなぬて疎結合になる
2026/07/10(金) 00:03:13.15ID:bAT5n0dl
>>635
保証できるが……
デフォルト実装は内部構造に触れないから定義できるもので、触れるなら定義できんのだわ
2026/07/11(土) 14:38:59.33ID:EKW8EhdF
>>635
どうやって決まってもいない内部構造に依存するんだよ
その時点で矛盾しとる
2026/07/11(土) 14:40:51.16ID:EKW8EhdF
>>2
そもそもK&Rなんか読んで仕様批判してる時点で頭が足りない
40年前の仕様の話を今持ち出してるんだから
640デフォルトの名無しさん
垢版 |
2026/07/11(土) 14:48:46.42ID:bYeImHYG
Rubyはやりすぎて遅くなった
2026/07/12(日) 00:30:03.05ID:QHkOJTN+
C言語意味わからん
642デフォルトの名無しさん
垢版 |
2026/07/12(日) 03:18:37.11ID:MVcsLvMp
>>641
それはちょっとコンピュータの知識が不足しすぎてるかな
2026/07/12(日) 03:21:06.20ID:MVcsLvMp
C言語が安全性の面で欠点を抱えてるって話ならともかく、わからないのはシンプルに知識不足
ポインタって明言しないってことはメモリモデルまでたどり着けてないんだろうし
2026/07/12(日) 09:15:11.21ID:fRLexhLH
安全面? C言語にそのようなものがあったっけ? あったかなぁ。うーん?
645デフォルトの名無しさん
垢版 |
2026/07/12(日) 10:01:59.36ID:1YRlnD0x
バグが全く出ない言語はない
逆にデバッグちゃんとすれば、バグゼロにできない言語もない
あとは得意、不得意、好き嫌い
2026/07/12(日) 11:18:08.83ID:d9T09QJO
常に現場猫案件なのがC言語
647デフォルトの名無しさん
垢版 |
2026/07/12(日) 11:34:35.92ID:o1zfMS4T
cmakeとかゆううんこがある時点で論外
2026/07/12(日) 11:46:08.11ID:5TOI8Q7g
Cで出来ることは全てRustで出来るようになった
不便なCを捨てられる
2026/07/12(日) 12:23:37.71ID:QHkOJTN+
>>643
ポインタはゴミだろ
そんなもんはわかってる
リファレンスでリファレンスすりゃいいだけ
650デフォルトの名無しさん
垢版 |
2026/07/12(日) 13:11:50.20ID:uOgU7Bc5
nullポインタもリファレンスにできるから意味なし
2026/07/12(日) 20:35:55.72ID:MVcsLvMp
>>644
もしかして: 日本語が読めない

>>645
それは違って、バグをゼロにすることは机上の空論として以外ではできない
なので防げるものは仕組みで防ぐ必要がある

>>647
あんなもん使わんでええやん、Makefileでよくね
2026/07/12(日) 20:36:42.30ID:MVcsLvMp
>>648
Cのコードを複雑な所有権管理なしに取り込む機能がまだない
2026/07/12(日) 20:37:15.53ID:MVcsLvMp
まあ、Rustの設計を考えたらそんな機能が搭載されるわけはないし、それがないのが正しいが、Cを使う意味はあるね
2026/07/12(日) 20:38:40.46ID:MVcsLvMp
>>649-650
やっぱりわかってないやんw
ポインタを全部参照に置き換えられるなんて誰も思ってない
2026/07/12(日) 21:01:30.98ID:g+JxuU8t
>>652
ところで複雑な所有権管理って何かね?
Rustのシンプルイズベストな所有権しか知らないので
2026/07/12(日) 22:10:55.31ID:fRLexhLH
>>651
安全面に欠陥などなくて、安全性など最初からないと思うので悩んだ。
欠陥ではなくC言語の仕様だろうね。
2026/07/13(月) 01:40:47.12ID:5sH5Cvg8
>>655
実はC言語のプログラムをRustから使うには、Rust側の所有権管理にこれを組み入れる必要があって面倒くさい

>>656
安全性が最初からないというのは違う
あくまでCとRustの思想の差はプログラマが保証するか、コンパイラが保証するかという話であって、Cで書かれたプログラムはいくらでもメモリを破壊していいなんて前提は最初からなかった
658デフォルトの名無しさん
垢版 |
2026/07/13(月) 03:22:03.44ID:FeZNYgWf
>>654
ID:MVcsLvMp
自称わかってるおじさん

やべえw
2026/07/13(月) 04:21:33.09ID:Tg3ECvd+
>>657
FFIは楽しいが世界中で誰かがすれば終わりの作業に過ぎない
もし自作Cコードを呼び出すならRustへ書き換えてしまいC言語を捨てるほうが有益だ
660デフォルトの名無しさん
垢版 |
2026/07/13(月) 04:26:28.05ID:20QlYRrh
まずcは文法が終わってるから書いてて単純に楽しくない
2026/07/13(月) 04:48:37.06ID:5sH5Cvg8
>>658
結局悪口言ってるだけで何も技術の話してないのオモロイ
2026/07/13(月) 04:49:04.95ID:5sH5Cvg8
>>659
世界にどれだけCのコードがあるか知らなそう
2026/07/13(月) 04:49:36.04ID:5sH5Cvg8
>>660
どこが終わってるんだ?
むしろ文法だけならめっちゃシンプルで美しいが
2026/07/13(月) 06:30:04.01ID:iQv4LHB/
Rustを使うようになって未定義動作まみれのC言語を使う愚かさを理解できるようになった
文法についてもC言語は必要なものが揃っていない不便な言語だと実感できた
665デフォルトの名無しさん
垢版 |
2026/07/13(月) 07:00:57.45ID:EcNhnU2g
プログラムで楽しいのはラダー回路だな
2026/07/13(月) 15:03:17.82ID:5sH5Cvg8
>>664
必要なものは揃ってるよ
足りないと思ってるのは何の構文がどんな処理をしてるか考える癖がなく、自分が今書いたコードがどういう処理なのか把握してないからだね
2026/07/13(月) 15:04:00.79ID:5sH5Cvg8
>>665
あれ楽しいよな
668デフォルトの名無しさん
垢版 |
2026/07/13(月) 21:14:01.23ID:hr+PUhdx
ラダーみたいに、いきなり回路書けて、めんどくせー初期設定も要らず
マルチタスクなことを簡単に実現できるのはツールのおかげ

高級言語もそうなってほしい
669デフォルトの名無しさん
垢版 |
2026/07/13(月) 22:21:52.26ID:5B+YKcIA
>>668
ラダーってあれのハードウェアやソフトウェアをキーエンスの天才とか三菱の秀才が作ってるから誤動作しないのであって、安いラダーはまともに動かないよ
互換品とか描かれてるの間違いだよ
高いキーエンス買わないとラインが止まる
2026/07/13(月) 22:23:00.59ID:7hQsQB5I
>>666
C言語に必要なものは揃っていない
671デフォルトの名無しさん
垢版 |
2026/07/13(月) 22:23:57.88ID:5B+YKcIA
>>665
ラダーだけは勉強しなくても書ける
恐らくどんな高級言語よりも安全で高速
俺はラダー使って文字列パーサーを作ってjsonで返すような装置作ったことがある
楽しかったなあ。jsonがまだ出始めた頃だから結構昔かも
それまではxmlが多かったから勇気が必要だった
672デフォルトの名無しさん
垢版 |
2026/07/14(火) 07:36:26.44ID:s3VvyQ+p
>>665
XとYとDしか覚えてません!😭
2026/07/14(火) 14:14:42.83ID:/b2uC2Vr
>>670
揃ってるよ
これで書けないのは単に君がエンジニアとして無能だからってだけ
674デフォルトの名無しさん
垢版 |
2026/07/14(火) 15:23:39.67ID:fUlNz5yr
>>669
別にラダーって日本発祥でもなんでもねーし
トップシェアはシーメンスだぞ
2026/07/14(火) 17:11:07.80ID:/b2uC2Vr
>>674
誰も言ってないことに勝手にキレて反論してて草
2026/07/14(火) 20:46:15.25ID:ZouZKZ4B
>>673
C言語は機能がなさすぎて開発効率悪すぎ
677デフォルトの名無しさん
垢版 |
2026/07/14(火) 21:10:51.16ID:pfNIWFfv
なんでも日本すごいすごいって考える馬鹿って
生きてて恥ずかしいとは思わんのかねぇ?

井の中の蛙だから恥も無いか
678デフォルトの名無しさん
垢版 |
2026/07/14(火) 22:11:03.52ID:PDnGUZsx
スペイン: 31600ユーロ(1ユーロ185円換算 約580万)
イタリア: 34000ユーロ(1ユーロ185円換算 約600万)
日本: 450万

過去の栄光であって今ではスペインイタリアより安くなったわーくに
679デフォルトの名無しさん
垢版 |
2026/07/14(火) 22:14:02.14ID:PDnGUZsx
じゃっぷさん、いったいなっぜ。。。
2026/07/14(火) 22:48:22.19ID:/b2uC2Vr
>>676
君がエンジニアとして大したことないってことはもうわかってるから、どの機能がないのか言えよ
2026/07/14(火) 22:49:10.51ID:/b2uC2Vr
>>677-679
通貨のレートなんか金利でいくらでも変わるだろ
何かの指標になると思ってるのが笑えるわ
ついでに言えばここでいう話でもないし
2026/07/15(水) 00:05:24.83ID:w2t1XS6N
>通貨のレートなんか金利でいくらでも変わるだろ
バカ丸出しだなw
2026/07/15(水) 00:18:49.58ID:osKDIn21
>>666
Cは機能足りないだらけで効率悪いけど特に欲しいものは構造パターンマッチング分解
2026/07/15(水) 02:04:58.40ID:PFPK0g3k
>>682
バカ丸出しと言いながら理由も言えなければ反例も出せないというw
これこそバカ丸出しというもの
2026/07/15(水) 02:06:42.62ID:PFPK0g3k
>>683
やっぱり自分の書いてるコードの意味わかってないだろお前w
構造体返せばいいだけのことやんけ
2026/07/15(水) 02:12:14.73ID:PFPK0g3k
返された構造体の中身を取り出すコードも書けないのか、それとも「1文字増えたから非効率だ」みたいな揚げ足取りがしたいだけのゴミなのか知らないが、どちらにしろ「C言語は必要なものが揃っていない」「機能がなさすぎて開発効率悪すぎ」とか言ってイキってるお前が無能ってだけ
2026/07/15(水) 02:29:47.23ID:PFPK0g3k
わざわざご苦労なことに時間をかけてC言語にない機能を探したらしいが、そんなことをやってる暇があるなら少しでも勉強したらどうか
だから「C言語は必要なものが揃っていない」なんて妄言を垂れ流してイキっちゃうんだよw
2026/07/16(木) 06:01:41.32ID:bPM+4Drw
>>685
自分で一つずつ比較していくってこと?
プログラマーは奴隷じゃないんだからそれはプログラミング言語がやって欲しいね
689デフォルトの名無しさん
垢版 |
2026/07/16(木) 07:23:18.69ID:308qAObq
構造体の先頭メンバをディスパッチ先の関数テーブルのindexにでもしとけばいいんでは
あとは使ったことないけど_Genericで書くか
2026/07/16(木) 09:22:33.32ID:ZkOVjd6x
>>689
構造体だけでなくタプルやスライスや代数的データ型など全てののデータ構造に対するパターンマッチングによる分解と条件分岐代入の話
2026/07/16(木) 11:58:30.39ID:tqJQMSog
>>688
お前がサボりたいって話とプログラミング言語の優劣をくっつけるなよw
サボりたいならScratchでもやってなさい
2026/07/16(木) 13:59:44.69ID:o6Y18Fu4
ハッシュにしてアバウトに比較してたら盛大にバグった事あるなぁw
2026/07/16(木) 15:55:42.78ID:Wb6p8Q0G
ハッシュは衝突するから信じてはいけない(n敗)
2026/07/18(土) 13:34:02.54ID:bkfHP1lV
>>664
C言語は機能が揃っていない!僕が楽できないからだ!w
2026/07/18(土) 15:13:01.24ID:E0kdCJg0
シンプルでいいじゃない
2026/07/18(土) 16:23:02.34ID:A6B3MJbl
シンプルさは大事よね
JavaもC++比較だとクソクソシンプルだしな
整数のunsigned無くすとか
テンプレート無くすとか(のちにジェネリクスは導入されたけど)
出始めのころのシンプルさは
C++に苦しめられてた民を多く救ったと思う

同じようにC++に対して今Odinとかいうのあるよね
ちょっとだけ興味あり
2026/07/18(土) 17:40:08.87ID:QdDdex+f
JavaはJavaで意味のないクラスをボンボン作るのがなあ
個人的にはZigくらいシンプルなのがいいわ
2026/07/18(土) 17:44:53.53ID:0qtIPJUu
ZigはZigで無駄にコンパイラがお世話する設計だからなあ
結局Cでいい
699デフォルトの名無しさん
垢版 |
2026/07/18(土) 21:12:26.47ID:gPQnod69
結局Cの設計が悪いとか言ってる奴はコンピュータを知らないだけ
700デフォルトの名無しさん
垢版 |
2026/07/18(土) 21:29:46.75ID:K0BstTVI
>>699
これはガチ
2026/07/18(土) 21:33:38.29ID:GSqQ1Zft
リスペクトがないよな
タダで食わせてもらってるオカンの飯に文句言うような不毛さを感じる
偉大なるオカンの、偉大なる飯に文句言う前に、たぶんねぎらって感謝したほうがいい
702デフォルトの名無しさん
垢版 |
2026/07/18(土) 21:55:27.09ID:CbpxQI9y
C書いたことない奴がCに文句言ってる感
703デフォルトの名無しさん
垢版 |
2026/07/18(土) 21:58:01.66ID:YobfqA/v
当時のリソースでうごく移植性を念頭にした高級アセンブラ
奇跡のような出来だとおもう
2026/07/18(土) 22:21:32.41ID:vDnM1zrJ
本気で言ってんのか?w
705デフォルトの名無しさん
垢版 |
2026/07/18(土) 23:38:35.53ID:nTJRgtmh
>>703
高級アセンブラってのは違う
抽象化の有無を理解してない

>>704
C言語の設計が悪いとほざいてる奴ほど、何がいいのか言えないじゃんw
2026/07/18(土) 23:53:20.58ID:oPx2d6CG
みんなは「高級なアセンブリ言語」ではなく「ポータブルなソレ」と言っているんじゃないのかな
抽象化を含めて
2026/07/18(土) 23:57:08.12ID:vDnM1zrJ
>>705
何を言ってんのかよく分からんが、奇跡のようだって誰に言ってんのよデニスリッチーに失礼すぎるだろうよってことよ?
708デフォルトの名無しさん
垢版 |
2026/07/19(日) 00:16:02.26ID:4p1MCYaf
>>707
日本語でおk
709デフォルトの名無しさん
垢版 |
2026/07/19(日) 01:27:16.42ID:ug8pyziv
>>658
ポインタを全て参照に置き換えられると思ってるとか、アホだろお前w
2026/07/19(日) 02:22:25.80ID:h3fKQK3M
>>699
アセンブラ→Cの順に覚えたので、ポインタの何が難しいのか逆に分からなくて、自分が何か間違って理解してるんじゃないかとずっと悩んでたわ
711デフォルトの名無しさん
垢版 |
2026/07/19(日) 06:45:41.54ID:/J2anG91
それはそれでアドレスとポインタの混同をしないように注意は必要だけどな
ポインタはアドレスと違って元の型にも影響されるから
712デフォルトの名無しさん
垢版 |
2026/07/19(日) 09:55:18.29ID:iX0BwzkM
だから移植性高めるためのポインタでしょ
CPUやPC違っても、アドレスどうなってるかわかんねー
intが何ビットかよくわかんねーっつっても意識しなくても済むからな
713デフォルトの名無しさん
垢版 |
2026/07/19(日) 14:42:42.27ID:ENA0EAch
>>712
せやな
まあ、型のサイズは結局違うんだが
2026/07/19(日) 14:50:44.11ID:8OVcsKAH
> アセンブラ→Cの順に覚えたので、ポインタの何が難しいのか逆に分からなくて、

指す型によってポインタの構造が異なることをCは許容してるが↑みたいなこと言う人はわかってなさそう
2026/07/19(日) 17:42:52.61ID:4z2EHgPj
ポインタの構造は変わらないぞw
型によって扱う単位が変わるだけだらか
2026/07/19(日) 18:11:21.40ID:Mg7i6RoG
> ポインタの構造は変わらないぞw

バイトアドレッシングが存在しないアーキテクチャで普通に存在しうるんだよなあw
717デフォルトの名無しさん
垢版 |
2026/07/19(日) 19:43:12.85ID:9jryM8w6
>>715
普通に変わるんですが
2026/07/20(月) 14:04:34.42ID:I+7cA9WF
ポインターの論理的な構造は変わらない
変わるのは実現方法だけ
2026/07/20(月) 15:34:20.03ID:vQLyd2Up
ポインタや
far nearは遠く
なりにけり
720デフォルトの名無しさん
垢版 |
2026/07/20(月) 17:44:16.62ID:Owomh3Oa
>>718
変わるから void* という変換用の型があるんだわ
2026/07/20(月) 22:30:42.95ID:I+7cA9WF
だから、ポインターの型はコロコロ変わらないだろw
722デフォルトの名無しさん
垢版 |
2026/07/20(月) 22:44:29.99ID:gNVhgtfF
>>721
もしかしてC書いたことない?
723デフォルトの名無しさん
垢版 |
2026/07/20(月) 22:54:26.21ID:tn2iMjTm
>>721 C書いてから来てね
724デフォルトの名無しさん
垢版 |
2026/07/20(月) 22:58:54.14ID:mXMC13EQ
void*は単に型を無視して使えるってだけであって
ポインタの型が勝手にコロコロするわけでも何でもない
2026/07/20(月) 23:58:29.68ID:1ctg6k6r
> だから、ポインターの型はコロコロ変わらないだろw

コロコロ変わる可能性があるからprintfで%pでポインタ値を出力したい場合はvoid*にキャストすんだゾw
726デフォルトの名無しさん
垢版 |
2026/07/21(火) 02:45:35.90ID:AUNABxJR
>>724
わかってなくて草
void* はどのポインタの型とも変換可能だというのは、逆に言えばポインタはデータ型によって中身が変わることがあるってことなんだぞ
そうじゃなかったら void* なんかなくても自由に相互変換できるわけで
727デフォルトの名無しさん
垢版 |
2026/07/21(火) 03:03:47.78ID:0GTCT915
中身が変わるってどういう意味でいってんの?
2026/07/21(火) 03:07:50.45ID:6WHlUxtM
調べてみたらわかるけど、メモリ上のアドレスの表現手法が1パターンになると決まっているわけではない
729デフォルトの名無しさん
垢版 |
2026/07/21(火) 09:33:06.34ID:fsFgOEUQ
自分で理解して型をコロコロして使うってことと
勝手に型がコロコロするのとは違うんだが
2026/07/21(火) 10:29:05.76ID:SRnA7Xqg
>>715=>>721は
まず、charポインタとintポインタで挙動が違うことをどう捉えているのか
次に、一部の環境にあるfarポインタとnearポインタについて知っているのか
2026/07/21(火) 10:33:28.96ID:oSzwQYDy
farとかnearとか、MS独自やん?
2026/07/21(火) 10:34:55.72ID:xJziDexB
中身は変わらないんだがw
勝手に使う側が区切り方を変えるだけ
2026/07/21(火) 12:36:08.24ID:4fRfjc8V
よく分かってない奴が分かったつもりになってるのがC言語の難しさを証明している
2026/07/21(火) 13:32:16.21ID:nQl1Kkh2
C言語って難しいから設計が悪く感じるだけ
2026/07/21(火) 13:59:08.08ID:SRnA7Xqg
ここはスレタイあるいは>>734に乗じて分からない振りをするためのスレだったのか、、、
2026/07/21(火) 14:19:44.78ID:LLAWIT51
>>732
> 中身は変わらないんだが
変わる場合があります
仕様に記載されているので確認しましょう
2026/07/21(火) 14:22:57.46ID:oSzwQYDy
実装で変わるもんをイチイチ語るなよ
2026/07/21(火) 15:10:52.78ID:4fRfjc8V
> 実装で変わるもんをイチイチ語るなよ

特定環境前提の話しかできないならC言語語るなよ
2026/07/21(火) 15:13:01.25ID:oSzwQYDy
話が通じない奴らばかりだw
740デフォルトの名無しさん
垢版 |
2026/07/21(火) 15:48:53.56ID:MJ34erXT
話が通じないんじゃなくて、お前の知識が足りないだけw
2026/07/21(火) 15:49:29.45ID:Ck8hjeFc
>>738
それな
仕様にも処理系定義の話とかちゃんと書いてるのにな
2026/07/21(火) 15:51:56.00ID:xJziDexB
おまえみたいな学問としてのC言語なんて誰も目指して無いんだが
あくまでもターゲットありきの実用C言語の話しをしようぜ
743デフォルトの名無しさん
垢版 |
2026/07/21(火) 16:23:12.71ID:cd91NMFz
>>742
お前の知識のどこが実用なんだww
2026/07/21(火) 17:10:07.51ID:oSzwQYDy
おまえよりマシだろw
2026/07/21(火) 17:22:31.12ID:3FVz/WrX
バカには実用の意味がわからないらしい
仕様も理解せずにたまたま動くコードを書いて実用と言い張るのは他人や将来に負債を残してるだけの無能
2026/07/21(火) 17:27:05.54ID:oSzwQYDy
どんなに仕様を突き詰めても
たまたま動くコードしか書けないんだがw
2026/07/21(火) 17:28:49.16ID:Rn4WfGDM
アセンブラならポインタの構造なんてコロコロ変わるのが自明なのに

; nearポインタによるアクセス
mov BX, 0x1234 ; オフセットのみ指定(16bit)
mov AL, [BX] ; DS:BX を読み込み
mov [BX], AL ; DS:BX に書き込み

; farポインタによるアクセス
mov AX, 0xA000 ; セグメント部分
mov ES, AX ; セグメントレジスタにロード
mov BX, 0x1234 ; オフセット部分
mov AL, [ES:BX] ; 物理アドレスを読み込み(ES*16 + BX)
mov [ES:BX], AL ; 物理アドレスに書き込み(ES*16 + BX)
2026/07/21(火) 17:30:26.88ID:ALCocViV
far nearかぁ。そんな時代もあったよなぁ。
Cのポインタは抽象的な存在だね。longにアドレス入れて無理やり飛ばしたおぼえもあるなぁ。
2026/07/21(火) 17:32:44.19ID:oSzwQYDy
それはIntel系の話
2026/07/21(火) 19:33:10.77ID:28j0dMrv
>>746
お前「C言語なら俺に聞け」スレで暴れてた f9fa-K2DK だろ
その

仕様通りに実装できていない(バグがある)コンパイラもある
↓
だからコンパイラにかかわらずたまたま動くコードしか書けない
↓
だから仕様に意味はない

ってゼロヒャク理論の三段論法何回も見たぞ
いい加減バグと仕様がないことの区別くらいつけられるようにならないと話にならない
2026/07/21(火) 19:35:17.49ID:oSzwQYDy
>>750
関係ない人と同一人物だと決め付けるのは頭の病気ですか?
2026/07/21(火) 21:55:39.32ID:PsDVu0+l
>>751
全く同じバカ理論を持ち出してるってことだろ
別人なら同レベルのバカってだけ
753デフォルトの名無しさん
垢版 |
2026/07/21(火) 21:56:31.93ID:c45Ngnht
>>750
バカってゼロヒャク理論大好きだからな
前もバグが1つあるからRustはメモリ安全じゃないって言ってる奴いたわ
2026/07/21(火) 22:09:26.31ID:rsJRMFhV
アホらしい
こんな所で俺様理論で悦に浸ってる無能だらけw
755デフォルトの名無しさん
垢版 |
2026/07/21(火) 22:13:37.73ID:DpazwsnA
>>750
ゼロヒャク論法を2回重ねてるのヤバすぎて草
756デフォルトの名無しさん
垢版 |
2026/07/21(火) 22:28:56.67ID:ADBZCODt
>>749
じゃあ「C言語のポインタの中身は変わらない」の主張は「intel系のマシンでC言語は使えない」みたいな条件でないと成り立たないよね
757デフォルトの名無しさん
垢版 |
2026/07/21(火) 22:48:39.34ID:0GTCT915
現在では起こらない問題をネチネチ議論して役に立たんよね
2026/07/21(火) 23:19:33.02ID:prLGQ+o1
>>757
> 現在では起こらない問題
そんなことは全くなくて、C言語はPCとスマホでしか使われないリッチな言語じゃないんですよ
2026/07/21(火) 23:21:06.55ID:d4/GCGHg
今でもそんなハードウェアいっぱいあるし、C言語の仕様もそれが起こりうることを前提に void* を用意し続けてるんだよなあ
2026/07/22(水) 00:00:42.64ID:ZXc80T15
> 現在では起こらない問題を

C言語の仕様にある未定義動作が多様なプラットホール対応を前提として定義されてることを理解してない予感
2026/07/22(水) 00:02:53.47ID:ZXc80T15
プラットホール→プラットホーム
762デフォルトの名無しさん
垢版 |
2026/07/22(水) 00:15:58.15ID:2xVLlMAv
>>758
具体的にどのような環境?
過去の事例じゃなくて今現役のもので
763デフォルトの名無しさん
垢版 |
2026/07/22(水) 01:07:29.19ID:c812nDXB
そもそも過去の事例だと思っているらしいが、この時代のプロセッサの互換品は今でも普通に組み込まれまくってるぞ
2026/07/22(水) 01:09:06.06ID:iL1PKXjH
Z80もまだ流通してるからなあ
765デフォルトの名無しさん
垢版 |
2026/07/22(水) 07:08:02.64ID:2xVLlMAv
>>763
普通で誤魔化さず教えてくれよ
2026/07/22(水) 07:22:30.99ID:HW7hv8MA
ワンチップマイコンなんか独自Cコンパイラだからローカルルール満載だぜ
2026/07/22(水) 09:04:51.94ID:8XOkqCi+
>>765
空の青さを知る人よ
車載OSのAUTOSARなんかはブート部とOSがアセンブラとCで提供され、内作になる下層、ミドル層、アプリ層はCが主流だよ
ディスプレイ表示周りに近いほど高級な言語になっていくけどね
768デフォルトの名無しさん
垢版 |
2026/07/22(水) 11:00:48.13ID:2xVLlMAv
>>767
ん?
でどのプロセッサならポインタのキャストで表現が変わるんだい?
話見えてる?
2026/07/22(水) 11:18:09.90ID:zza340Xx
「C言語はポインタ型の指す型の違いによりポインタのサイズや構造に違いがあることを許容していますが現代で使用されるアーキテクチャでこの条件に該当するものはありますか」

↑をGemini様に質問しただけですらすら答えてくれたがこの程度のこともできない無能か。
770デフォルトの名無しさん
垢版 |
2026/07/22(水) 11:39:46.49ID:2xVLlMAv
>>769
ないと言われた場合、それがハルシネーションかどうかどうやって判定するんだい?
2026/07/22(水) 11:51:28.83ID:zza340Xx
> ないと言われた場合、

質問公開して晒せば良いんじゃね
2026/07/22(水) 12:28:34.60ID:DfcpeMH8
変わりうるニッチな例は提示されてるけどコロコロは変わらんよね
773デフォルトの名無しさん
垢版 |
2026/07/22(水) 13:34:24.85ID:8rH8F2Vz
結局「勝手にコロコロ」ってのは間違い

使う側が同じアドレス内のデータ構造を自在に使い分けることが出来るってだけのために
わざわざそういう機能を残したのがvoid*

そういう特殊なことをするつもりが無ければ一生関わらなくてよい
774デフォルトの名無しさん
垢版 |
2026/07/22(水) 15:36:19.85ID:9kaHeq4d
勝手にコロコロに置き換えてて草
構造は変わらんって言ってたのが元だろ
2026/07/22(水) 17:36:25.24ID:NgIV8orL
データ構造は変わらないよ
取り出し方が変わるだけ
776デフォルトの名無しさん
垢版 |
2026/07/22(水) 20:11:22.76ID:vzkzflMn
>>725で言ってるじゃないか

コロコロ変わるってな
実際は使う側がコロコロ変えてるだけであって、勝手に変わらない
2026/07/22(水) 20:38:46.25ID:HW7hv8MA
使う側が用途によって変える事があるだけで、データ構造は変わらない
2026/07/22(水) 21:53:22.30ID:sqxapXzQ
>>775
ダウト
変わる時は変わる
間接参照先のデータの話じゃなくてポインタ自体の内部表現の話だからな
2026/07/22(水) 21:54:32.06ID:LxLIXIUP
>>776-777
> 使う側がコロコロ変えてるだけであって
> 使う側が用途によって変える事があるだけで
勘違いしてる
型を使う側が変えるという話ではなくて、ポインタ自体の内部表現はデータ型が違う場合同じではないという話
2026/07/22(水) 22:20:46.55ID:S6d1Ft1m
最初からポインタの構造の話をしてるのに、データ型が勝手に変わることはないとか言ってる奴は何を幻視してるんだ
781デフォルトの名無しさん
垢版 |
2026/07/22(水) 22:21:35.42ID:eD14gaG0
>>780
ポインタというものが何かちゃんとわかってないんじゃね
2026/07/22(水) 23:17:28.73ID:oFVQWNWE
>>778
「変わる時は変わる」と「コロコロ変わる」は君の中では同じことなの?
783デフォルトの名無しさん
垢版 |
2026/07/22(水) 23:21:16.64ID:2xVLlMAv
具体例で話せばすぐ終わる話をいつまでグダグダやってんの?
2026/07/23(木) 02:55:40.74ID:7LGj3TN+
>>782
何言ってんだこいつ
お前が言い出した妄想と一緒かどうかなんざお前しか知らんだろ

>>783
もう出てるでしょ
聞かないアホには何を言っても無駄
785デフォルトの名無しさん
垢版 |
2026/07/23(木) 06:59:42.05ID:Yz6A3cq+
>>779
頭悪そう
データ型をどうするか決めて使うのは使う側の都合でしかない
仮に初期配置のデータ型と違うデータ型でも読み書きしたいときがあるから使う裏技のようなものだ

ポインタの「内部表現」って何よ?
ポインタを何だと思ってやがる
2026/07/23(木) 07:25:49.53ID:SJijDEhg
ポインターは単なるアドレスだろ
それ以上でもそれ以下でも無い
後はコンパイラが指定した型に見合ったサイズで処理するだけだ
まさかC#みたいに型まで持ってる変数だとでも思ってるんだろうか?
2026/07/23(木) 09:46:23.53ID:XWH+I+Dd
*val=123;
*pi=3.1415;
2026/07/23(木) 13:17:39.14ID:cxrYFfJU
>>785
実はポインタって内部にはアドレスを保管してる変数なんですよ、ご存じありませんでしたかw
2026/07/23(木) 13:19:46.51ID:cxrYFfJU
>>786
実はC言語のポインタにはデータ型というものがあります
詳しくは仕様を参照すればわかりますが、このデータ型とは間接参照先のデータの型を指すもので、この型によってアドレスの表現方式が変わることがあります
なぜなら、メモリ上のデータの大きさがアドレスの指定方法に変更を与えるアーキテクチャがあるからです
790デフォルトの名無しさん
垢版 |
2026/07/23(木) 13:25:11.47ID:Yz6A3cq+
すげー馬鹿だな
2026/07/23(木) 13:27:23.49ID:cxrYFfJU
バカなのはアドレスの表現は決して変わらないと言ってる奴だけどな
もしそうだとしたら、void* をわざわざ用意して各ポインタ型と相互変換できる型として提供してるC言語の仕様を作った奴は、全員頭が腐りきって1ミリも思考ができないゴミクソ野郎だと言ってるに等しいってことに気付かない
792デフォルトの名無しさん
垢版 |
2026/07/23(木) 13:49:59.56ID:cxrYFfJU
人をそこまでバカにしたことを言うなら、ちゃんと思い込み以外の根拠がないとダメだよね
まあ、モノ考えてないから自分が何言ってるかわかってないんだろうけど
2026/07/23(木) 14:10:07.17ID:X9t4imoU
だからさ、C言語はコンパイル時に型が固定されるから、実行時には変わらないんだよ?
型変換がなんであるかって、コンパイラにこの型でアセンブラコード書いてねって教えてるだけだから
794デフォルトの名無しさん
垢版 |
2026/07/23(木) 14:11:01.80ID:Iv6Waiid
仕様だし789が正なのはみんなわかってるからスルーでええのに
795デフォルトの名無しさん
垢版 |
2026/07/23(木) 15:54:02.52ID:Yz6A3cq+
アドレスの表現w
メモリ空間のアドレスって何ビットかってハードで決まってんだよw
796デフォルトの名無しさん
垢版 |
2026/07/23(木) 16:00:19.59ID:cxrYFfJU
>>793
型のサイズが事前に決まってるなんてことは話してねえよバカ
誰が実行時に定まるなんて言ったんだw

>>795
まあ、知識がないくせにイキりたがるバカは単一のアドレス表現手法しかない単純なアーキテクチャしか知らんわなw
797デフォルトの名無しさん
垢版 |
2026/07/23(木) 16:00:38.63ID:Yz6A3cq+
それをインクリメント掛けたときにどれだけずらすかってのを
予め設定する方法と、自在に変えられるってだけの話であって
それは使う側の都合よ

勝手にコロコロ変わったらバグだっての
なんで固定じゃない方法を残したか?変動させて使う方法が使われててそれもCで実現しなきゃならんからだ

なにがポインタの内部表現だよw
798デフォルトの名無しさん
垢版 |
2026/07/23(木) 16:02:13.92ID:Yz6A3cq+
アドレス値が32ビット表現だったり64ビット表現だったり変わるってのか?
笑える
2026/07/23(木) 16:04:23.41ID:cxrYFfJU
>>798
そもそもビット数しか見れない時点で思考が足りない
同じビット数でもどこの値をどう読むかで意味が変わることくらい、真面目にCをやっていれば理解していること
2026/07/23(木) 16:05:46.68ID:cxrYFfJU
>>797
誰も言ってないことに反論する藁人形論法だねw
勝手にコロコロ変わるんじゃなくて、データ型によって変わるとはっきり言ってる
データ型はソースコードに書いてるだろ

あ、そっか
ごめん、C書いたことないからわかんないよねw
2026/07/23(木) 16:09:31.37ID:cxrYFfJU
まあ、そもそもこんなこと言ってるあたり、まともに型というものの意味を考えたこともないんだろうな
型はビット列の解釈ルールなんだが、それがわかってない奴はビット数が同じなら同じなんていうバカげた間違いをする
本当にそうだったら、一般的なPCにおけるintとfloatはともに32bitだから同じってことになっちゃうけどなw
考えないというのはおそろしいね
2026/07/23(木) 16:10:17.39ID:0V79cNzW
C言語は静的に型が決まるからね
2026/07/23(木) 16:16:30.74ID:aZujWR+i
結局「何が」コロコロ変わると言ってたんだっけ?
2026/07/23(木) 19:09:41.27ID:wNrO/bIp
>>801
それどころか、同じビット数の符号付き整数と符号なし整数は同じということに……w
805デフォルトの名無しさん
垢版 |
2026/07/23(木) 19:23:59.68ID:0AKlWdde
最大値も最小値も挙動もまるっきり変わってきちゃうのに……
806デフォルトの名無しさん
垢版 |
2026/07/23(木) 20:30:01.44ID:oQTw6V3g
斜め読みしてたけど
型変換で変わるという話なんか
型によってインクリメントされるサイズが違うという話なんか

前者ならCとかは緩い型制限言語じゃないから「自分でvoid*」を使わなきゃならないし

インクリメントのサイズなら
intのi++とか型によってインクリメントしてくれるし

何がコロコロ勝手に変わるかってのがよくわからん
807デフォルトの名無しさん
垢版 |
2026/07/23(木) 21:27:50.46ID:m1QCADSd
いろいろなコンピュータアーキテクチャ知ってるかに帰着するけど
仕様でも言及してんだから井の中の蛙にはなりたかないな
808デフォルトの名無しさん
垢版 |
2026/07/23(木) 22:05:32.34ID:Yz6A3cq+
データ型と、自分で言い始めたアドレス値の違いもわかってないバカか
809デフォルトの名無しさん
垢版 |
2026/07/23(木) 22:10:59.94ID:Yz6A3cq+
>>800
やっぱ意味わかってなかったか
データアドレスに書き込んだデータ型と違うデータ型に切り替えて使う場合があるから
こういう機能がC言語でも禁止されずに残されてんだよ

それはポインタの型がデータアドレスのデータ型に縛られないことを示す
で、それは勝手にコロコロするんじゃなくて、使う側が明確に決めて使うものだ
2026/07/23(木) 22:20:14.08ID:jagJtLgx
ワード単位でアドレスが振られるワードマシンで8ビットや9ビットのcharを指すポインタを実現するにはアドレス格納するだけじゃ無理って分かりそうなもんだがな、馬鹿なのかな。
https://ja.wikipedia.org/wiki/%E3%83%AF%E3%83%BC%E3%83%89%E3%83%9E%E3%82%B7%E3%83%B3
2026/07/23(木) 22:25:14.79ID:tHFNuHdE
最近はメタデータもポインタ内にあるしねぇ。
(仮想)アドレスというよりハンドルという認識が正しいのだとか。
812デフォルトの名無しさん
垢版 |
2026/07/23(木) 23:02:52.89ID:CGQfoS8K
806だけど今までスレに書いてる人とは別人で
コロコロ変わるの「対象」が型の話なのか環境によるbit数の違いの話なのかがよくわからんって意味で
型の話ならint*からchar*に変えれないし、void*で使うにも「自分で行う」事だから勝手にコロコロではないし
bit数の話ならコンパイル時決まる事だし
何が「勝手にコロコロ変わる」のかがよくわからん
2026/07/23(木) 23:20:44.32ID:+LHIhy3G
>>798
そういえばnearポインタでは届かないとfarポインタを使うアーキテクチャが普及していたな
もちろんそのfarポインタをnearポインタに変換は無理だから2種類のポインタがあることになる
2026/07/23(木) 23:38:59.87ID:ZRx3Yqcq
>>809
未定義動作が放置されてるのはコンパイラの実装都合であって、禁止されてないからそれを使っていいというお許しではないぞ
というかお前また
2026/07/23(木) 23:40:10.70ID:ZRx3Yqcq
途中送信してしまった、以下続き

f9fa-K2DKじゃないよな?

仕様通りに実装できていない(バグがある)コンパイラもある
↓
だからコンパイラにかかわらずたまたま動くコードしか書けない
↓
だから仕様に意味はないし、未定義動作をいくら書いてもいい

みたいなトンデモ理論を展開する気なら勘弁してくれよ
2026/07/23(木) 23:47:13.29ID:UCJ3kLlg
>>809は知識が決定的に足りてない

> ポインタの型がデータアドレスのデータ型に縛られないことを示す

もうこれだけではっきりしている

> ポインタの型

これはまだわかる
int* や void* のようなポインタ全般とみなして、「整数型」みたいな集合体と解釈できる

> データアドレスのデータ型

そんなものはない
データ型があるのはあくまでポインタであって、データアドレスはデータを格納したメモリ領域の先頭アドレスのことに過ぎない

メモリアドレスにはデータ型は存在せず、そのアーキテクチャで扱える表現法だけが存在する
その表現法が1つであることをC言語は保証しないし、アーキテクチャの設計において複数用意されることは珍しくない

これをポインタではデータ型によって使い分ける
なぜならデータ型によって指しているデータの大きさが異なるために、アラインメントが変わることになるから
アーキテクチャによっては、アラインメントによって表現手法を使い分ける必要に迫られるためである
2026/07/23(木) 23:49:09.55ID:UCJ3kLlg
根本的に君は、C言語の抽象であり実装は機能の提供を実現するコンパイラに委ねられる「型」と、メモリアドレスというその実装がマイクロアーキテクチャに委ねられる「アドレスの表現手法」を混同しているために、この議論に必要な前提を共有できていない
818デフォルトの名無しさん
垢版 |
2026/07/23(木) 23:53:45.31ID:pbIpmPNY
>>816
データアドレスって表現初めて見たけど、メモリアドレスのうちデータを指すものをデータアドレスって言うのね
逆にコードを指すものはコードアドレスと
まあ、知識をひけらかす時くらいしか使えなそうな表現だが
2026/07/24(金) 00:29:11.40ID:nGzJ9gdF
>>817
で、結局何が「コロコロ変わる」と言ってるんだっけ?

C言語の抽象であり実装は機能の提供を実現するコンパイラに委ねられる「型」?
メモリアドレスというその実装がマイクロアーキテクチャに委ねられる「アドレスの表現手法」 ?
どっち?
2026/07/24(金) 04:46:28.00ID:GK3Txn0n
>>819
話をまぜっかえして自分の失点を隠したいのはわかるけど、あからさますぎてバレているよ

で、アドレスの表現手法は型によってコロコロ変わるってどう見ても書いてるんだよね、元の文を見ると
だから型が同じでも変わるのかとバカにしたり、実行するたびに変わるのかとバカにしたり、型は勝手に変わらないなどと講釈を垂れ出したりした君は、ずっとバカにしか見えていなかったよ
821デフォルトの名無しさん
垢版 |
2026/07/24(金) 05:01:28.62ID:tl1Ks4By
結局Cの仕様も理解できないほどコンピュータの基礎的な知識が足りないから、どうでもいい擬音にこだわるようなバカげたことになる
そんな文章を1文字でも書いてる暇があるなら、Cの使用を読んでこいやアホンダラ
2026/07/24(金) 07:39:03.46ID:rDuh/7gs
悪態つきたいだけのスレに成り下がってて草
823デフォルトの名無しさん
垢版 |
2026/07/24(金) 08:43:26.94ID:UPXfZ3FT
つまり、最初にコロコロ変わるって言ったやつが必死に論点変えたり造語駆使して掻きまわしてんだよ

意図せずコロコロ変わるのはバグって言うんだ
そんなのは仕様ではない
void*ってのを完全に履き違えて解釈しちゃった恥ずかしい馬鹿
2026/07/24(金) 15:08:12.73ID:WIK69ucb
>>823
> 意図せずコロコロ変わる
複おじはずっとこの自分で作った言葉を相手が言ったと主張して藁人形してるけど、そんなこと複おじしか言ってないんだよな
2026/07/24(金) 15:22:12.02ID:v2sV6Qj0
>>823
> 必死に論点変えたり造語駆使して掻きまわしてんだよ
それやってるのはいつもお前だよww
2026/07/24(金) 15:24:26.75ID:a9K4NXHg
>>要するに、文脈や構造を見ず文中の単語だけをつまみ食いして、「〜って言ってる!」と脳内変換してしまう、いわゆる**機能的文脈文盲**(単語は読めても構造が理解できない状態)ですね。
827デフォルトの名無しさん
垢版 |
2026/07/24(金) 20:40:29.13ID:7DhEL1jI
>>823
自分で作った妄言に自分で反論して楽しい?w
828デフォルトの名無しさん
垢版 |
2026/07/24(金) 23:01:22.10ID:Zaz5W8AG
C言語が難しいと思う理由がわからない
829デフォルトの名無しさん
垢版 |
2026/07/24(金) 23:12:06.56ID:jY4oLc0F
確かに
小学生の頃に覚えたくらいだから簡単な方だと思う
830デフォルトの名無しさん
垢版 |
2026/07/24(金) 23:12:49.07ID:yvjTOwn+
言語自体はかんたんな部類よな
プリミティブすぎてなにやるにも積み重ねが必要なだけで
2026/07/24(金) 23:34:41.33ID:POPcJYCH
>>820
>で、アドレスの表現手法は型によってコロコロ変わるってどう見ても書いてるんだよね、元の文を見ると

それなら普通はコロコロは変わらないよね
型の違いによってアドレスの表現手法が変わるのは特殊なアーキテクチャで特殊な型変換を行った場合だけ
例えばnearポインタをfarポインタに変換すれば変わる

でも今のメジャーなアーキテクチャでint*をchar*に変換したりint*をvoid*に変換したところで内部のアドレスの表現手法は変わらない
変わるような実装があったとしてもCの仕様に反するわけじゃないが無駄なので誰もやらない

「アドレスの表現手法は型によって変わる場合がある」くらいのなら納得してくれる人はいると思うが普通は変わらないものを「コロコロ変わる」と言われて納得する人は少ないんじゃないかな
それこそ現役でnearポインタをfarポインタに変換してる人くらいには少ないと思う
832デフォルトの名無しさん
垢版 |
2026/07/24(金) 23:35:27.67ID:95VkoHHg
>>828
strict aliasing ruleをそらで説明してみ?
833デフォルトの名無しさん
垢版 |
2026/07/25(土) 00:03:46.89ID:ffZgHXT7
複おじって頭が悪いからC言語を難しく感じるだけ
2026/07/25(土) 00:17:38.93ID:CTDQAdTW
>>831
お前がたまたま変わらないアーキテクチャを触ってきたことを「普通は変わらない」とは言わないんだぜw
2026/07/25(土) 00:19:14.70ID:srZ691AN
>>832
異なる型を通して同じメモリにアクセスしてはいけないってやつ
これやると未定義動作だからよくコンパイラに消される
ちょうど>>831がそれわかってない好例
2026/07/25(土) 00:21:06.04ID:yONvHxKM
>>831
> 変わるような実装があったとしてもCの仕様に反するわけじゃないが無駄なので誰もやらない
お前の頭が足りないから思いつかないだけ
アドレスを分割することで指す場所を変えるようなアーキテクチャであれば、その表現を変えることで効率よく異なるサイズのデータ型を扱える
837デフォルトの名無しさん
垢版 |
2026/07/25(土) 00:42:41.42ID:+sd0sCI1
>>832
その現象の通称がわかってるかどうかは重要じゃなくて、中身が重要なんだぞ
しかもその中身を知らない前提で話しかけているのが、もうこいつC言語初心者なんだなという感じしかないわけだが
838デフォルトの名無しさん
垢版 |
2026/07/25(土) 01:00:04.49ID:amT5lUF4
コンピューターがどう動いているかを知らずにC言語を理解しようとしているのが間違い。
839デフォルトの名無しさん
垢版 |
2026/07/25(土) 01:09:45.90ID:D9WHljYz
>>837
はい雑魚
840デフォルトの名無しさん
垢版 |
2026/07/25(土) 06:06:48.20ID:8RNGdrDH
アドレスの表現方法ってハードで決まってるじゃん
16進数16桁とか8桁とか

型がどうのこうの関係ない
型はその中身のデータに関係あるだけよ
841デフォルトの名無しさん
垢版 |
2026/07/25(土) 06:09:53.11ID:8RNGdrDH
>>835
それは高級言語の都合でしかない
アセンブラでは自由だ
その自由を残したのがvoid*
842デフォルトの名無しさん
垢版 |
2026/07/25(土) 08:52:27.66ID:amT5lUF4
>>840
ポインタのデータ型はポインタが指しているアドレスから始まる連続するデータを指定したデータ型として扱うという意味がわからないんだろうな。

配列とごっちゃになってるんだろう。
843デフォルトの名無しさん
垢版 |
2026/07/25(土) 08:54:59.66ID:amT5lUF4
>>835
それはそのコンパイラの警告にすぎない。
2026/07/25(土) 09:43:23.17ID:AMT22xeK
何この無意味なのの知り合い
お前らもっと有益なことに時間使いなよ
盆栽育てるとか
845デフォルトの名無しさん
垢版 |
2026/07/25(土) 09:51:08.79ID:D9WHljYz
>>843
それ致命的な失言ね
カスCプログラマーであることを自白したのと同じ
846デフォルトの名無しさん
垢版 |
2026/07/25(土) 13:07:13.38ID:rj86s94m
>>840
>>842
お前らの知識が足りないだけなw
アドレスの表現方法は一意じゃないってもう100回言われてる
バカには日本語が通じないだけ

>>837
君は通称を知って威張れれば中身は知らなくても立派なCプログラマだと思うんだね!
頭の悪い人の考えることは面白いなあ!w

>>843
なんでコンパイラが警告するか考えたことないんだろうな
頭を使わない知性の欠片もない奴がC言語書くなよw
847デフォルトの名無しさん
垢版 |
2026/07/25(土) 13:12:15.32ID:YNkzbLWE
>>839-842
複おじの自演だということがあまりにも見え透いてる
全部とんでもバカ発言で、ここまでの内容をまともに読んでいない
2026/07/25(土) 13:26:27.57ID:hNS4eADZ
スレタイが悪いからアレるだけw
849デフォルトの名無しさん
垢版 |
2026/07/25(土) 13:36:59.57ID:8K/I600o
バカにはアドレスの表現手法が複数あり得るという事実だけでも理解できないらしい
2026/07/25(土) 13:37:39.15ID:Jak9H4Dv
>>839-842
知性欠乏症
2026/07/25(土) 13:38:00.81ID:Jak9H4Dv
>>839
君は通称を知って威張れれば中身は知らなくても立派なCプログラマだと思うんだね!
頭の悪い人の考えることは面白いなあ!w
2026/07/25(土) 15:56:24.11ID:CjX3PYjT
以下、コロコロ禁句な
意味が曖昧になるから
853デフォルトの名無しさん
垢版 |
2026/07/25(土) 16:30:57.90ID:681Rgf4Y
うるせぇニコ動ぶつけんぞ

   \  /
┏━━━\/━━━┓
┃┏━━━━━━┓┃
┃┃       ●  ┃┃
┃┃  ●       ┃┃
┃┃    ▲     ┃┃
┃┗━━━━━━┛┃
┗━∪━━━━∪━┛
  ヽ(´・ω・)ノ
    |  /
    UU
2026/07/25(土) 16:44:51.67ID:Tg0K2GA7
('ω')三( ε: )三(.ω.)三( :3 )三('ω')コロコロ
855デフォルトの名無しさん
垢版 |
2026/07/25(土) 19:57:51.89ID:M2f/GW/a
なんか >>839-842 が人気だが
よほどこのレスが刺さったようだなw
2026/07/25(土) 21:24:13.93ID:PIcGPZbW
>>811
いわゆるfatポインタはアドレス以外の情報も含むもんな
色んな言語にあるスライスポインタは対象アドレスと対象サイズを含んでたり
この種のポインタを持たない言語は対象サイズを自分で管理することになってリスクが高い
857デフォルトの名無しさん
垢版 |
2026/07/25(土) 21:55:13.16ID:b0kFPMYU
サイズ情報を伴わないアドレスだけのポインタでアクセスする駄目なプログラミング言語はCだけ
2026/07/25(土) 22:05:23.56ID:CtWfPMss
初心者とか頭がちょっと弱い人はお断り言語なんだよ
2026/07/25(土) 22:13:58.25ID:PBkLlQlk
そういう今時のスマートポインタを使いこなせない頭の弱い人がC言語に取り残された
860デフォルトの名無しさん
垢版 |
2026/07/25(土) 22:27:20.66ID:amT5lUF4
>>857
メモリ領域を自分が何に使っているのかわからずにアクセスするのが間違い

C言語の構造体なんてアドレスでアクセスするのが前提みたいなもんだしな。
言語仕様で決まっていることをわかりにくいというのはおかしい。
2026/07/25(土) 22:34:29.99ID:/tJ02Iia
>>860
それは無知なだけではないかい

まともな言語の場合
固定サイズの型ならアドレスのみのポインタでアクセスして安全
可変サイズの型ならアドレスとサイズによるポインタでアクセスして安全
2026/07/25(土) 22:42:24.86ID:CtWfPMss
ただポインタの中身を参照するだけなのに速度的な問題で毎回サイズチェックしたくない時ってあるだろ
2026/07/25(土) 22:48:59.73ID:lAnhPPCR
>>862
既に確認されてれば、あるいは、静的に確認されてれば、サイズやインデックスのチェックは最適化で消えるんだよ
だから速さと安全性を両立できる
864デフォルトの名無しさん
垢版 |
2026/07/25(土) 23:16:13.90ID:8Tw1AyhK
静的解析する周辺ツールはごまんとあるから
C自体はこのままでいい
2026/07/25(土) 23:21:25.75ID:hKnGjYCT
Cの言語仕様だと静的解析だけでは限界があることが判明している
焼け石に水
2026/07/25(土) 23:56:15.07ID:CtWfPMss
>>863
「最適化で消える」じゃなくて「消える場合もある」じゃね?
867デフォルトの名無しさん
垢版 |
2026/07/26(日) 00:24:06.60ID:yMPyo20Z
「チェックしなくても明らかだからそこはチェックを略してもいい」
これはC言語でプログラマーがよくやる形
であるとともに
他の言語のコンパイル最適化シーンで行なわれる形
つまり実は同じなのだ!

プログラマーがやると稀に判断ミスをしてバグやセキュリティホール
だからコンパイラの最適化に任せた方が良いとの結論になった
2026/07/26(日) 01:20:49.65ID:QRU6fadK
>>867
「最適化で消える」じゃなくて「消える場合もある」じゃね?
869デフォルトの名無しさん
垢版 |
2026/07/26(日) 01:54:10.67ID:wjPgi1P5
Cプログラマとコンピュータどちらがミスせずに安全に省略/最適化できるかの勝負
これまでCプログラマが敗北してきた歴史
870デフォルトの名無しさん
垢版 |
2026/07/26(日) 13:38:29.40ID:Nv+cg7Cq
void*使わなきゃ済むだけの話なのに、それだけでC言語を悪にしたがるアホ
2026/07/26(日) 13:43:36.85ID:8JCXnrVE
そもそもアクセス不可エリアなんて今時のOSが勝手に監視してるだけだからな
昔はそんなものなかったから、通り過ぎたコードエリアをデータエリアとして再利用したり自己書き換えプログラムなんていうテクニックが使えた
余計なお世話チェックが増えたことで危険なことにされたプログラムが増えてしまうという皮肉
872デフォルトの名無しさん
垢版 |
2026/07/26(日) 16:40:18.89ID:CvyKZXEP
>>871
CPUレベルでもやっている。
しかし、自分のプロセス内でやらかすダメプログラマーはいまも存在する。
873デフォルトの名無しさん
垢版 |
2026/07/26(日) 20:53:39.64ID:3pozJc96
>>871
セキュリティ的にもパイプラインを効率的に流すために必須
余計とか脳みそ16ビットかよ
874デフォルトの名無しさん
垢版 |
2026/08/01(土) 02:47:06.92ID:as1Gx3U4
* C言語は言語仕様に欠陥があるから危ない ←仕様を理解してないバカ
* C言語は言語仕様を守らずに書いていいから価値がある ←迷惑無能バカ
2026/08/01(土) 06:46:24.61ID:S8J83+8u
> 通り過ぎたコードエリアをデータエリアとして再利用したり自己書き換えプログラムなんていうテクニックが使えた

↑UBをテクニックと称するアホw
2026/08/01(土) 07:39:23.55ID:yiUouMRh
JITコンパイラ「・・・
877デフォルトの名無しさん
垢版 |
2026/08/01(土) 07:42:04.42ID:SJID3+jN
JITが自己書き換えしてると思ってるバカ発見
2026/08/01(土) 08:01:33.95ID:yiUouMRh
JITは自己書換えというより、読み込んだ中間コードからネイティブコードを生成だよ
その分野でCは今でも主戦力だろう
879デフォルトの名無しさん
垢版 |
2026/08/01(土) 08:30:37.94ID:SJID3+jN
>>878
じゃあ876の意図を説明してみろカス
2026/08/01(土) 09:47:25.46ID:XM5AkVUf
どんだけ罵り合っても情報量が全く増えない老人ホームスレ
881デフォルトの名無しさん
垢版 |
2026/08/01(土) 10:03:58.57ID:w4EEgzdz
>>874-875
結局これ
2026/08/01(土) 10:56:04.95ID:0oozcBJR
そのとおりだな
C言語なんて出来て当たり前だが
今どき使うのは問題山積みかつ非効率すぎて使うべきでない言語
2026/08/01(土) 16:32:21.53ID:xsRJEHTN
まあ使えるひとだっているんだしその辺は断定せずともひとはひと、自分は自分でいいじゃない
2026/08/01(土) 18:03:17.81ID:fT3Cj9Cj
>>882
まあ使ってないとそう感じるやろな
Cが必要ない分野しかやってないんだから
2026/08/01(土) 18:20:26.11ID:XyaPEWez
>>884
Cが必要な分野ってCコンパイラしか動かない環境くらいだろ
それ以外の普通の環境でC言語は必要ない
2026/08/01(土) 18:49:30.94ID:xsRJEHTN
なんだかんだなくはないんじゃない
データベースとか圧縮ライブラリみたいのはC多いでしょ
映像コーデックなんかもリファレンス実装はCが多いんじゃない
あとOpenSSLはCだったと思うよ違ったかな
2026/08/01(土) 21:49:38.53ID:rl6L8uaI
>>885
保守性が必要で実装の高速性が必要なプログラムはCでないといけない場合も多い
特にGCでの停止が許されない、ハードウェアの制御やリアルタイム性が必要ならその傾向が強くなる
組み込みやドライバはCでないと難しいことが多いし、重厚なライブラリも同様
2026/08/01(土) 22:10:44.96ID:RE9jJDcx
>>887
それら全てRustでいい
既にRustが使われている分野
2026/08/02(日) 02:33:32.81ID:UZ8yL7UT
>>888
現実的にはRustでいいということにはならない
なぜならRustはLLVMに依存するからで、LLVMの移植コストはとてつもなく高いからだ
890デフォルトの名無しさん
垢版 |
2026/08/02(日) 06:31:44.74ID:ZaBXwtmP
>>889
このスレにいる時点でおそらく9割の人はまだ業務でC使ってると思うよ
俺もそうだが組み込みの世界は絶対にCのまま
俺も趣味だと色々5種類ぐらい別言語使うけど、、、Cは不滅だわ
891デフォルトの名無しさん
垢版 |
2026/08/02(日) 09:57:04.26ID:6Hci8DEs
余計な構文増やしてもらわなくていいんだよな
新たな機能はdllで増やして、それらをわかりやすくUIで表示してほしい
2026/08/02(日) 10:06:47.77ID:m/vxb191
えっ
2026/08/02(日) 10:27:47.36ID:kqI0p28o
>>890
むしろ組み込みのしかもその中の一部でしかCは生き残れなかった敗北言語
894デフォルトの名無しさん
垢版 |
2026/08/02(日) 10:49:51.17ID:6Hci8DEs
CPUの命令は変わってないくせに、構文だけ俺様が考えた最強の~って増やしまくるから糞化すんだよ
895デフォルトの名無しさん
垢版 |
2026/08/02(日) 11:14:14.34ID:mudyKTZZ
男は俺含めて古い言語使って細部までコード最適化してこだわり持って仕事してる
女は新しい言語に飛びついてすぐにマスターして乗り換えてしまう、、、

こういうのはよく見るけどやっぱ男の方が正しいスタイルだと思う。レガシーでさぁ
2026/08/02(日) 11:39:18.28ID:WsXpU128
男はCしか使えないところはCで
Rust使えるところは効率いいRust使ってるよ
897デフォルトの名無しさん
垢版 |
2026/08/02(日) 11:54:01.09ID:wqhrvL/S
すぐマスターできるなら素養がある
男と同じことしないのは最適解じゃない判断では
仮に品質同じでもモダンな開発してると営業も有利だし
業務なら男がダメ
898デフォルトの名無しさん
垢版 |
2026/08/05(水) 06:56:52.65ID:NPyOsQTp
Cって、ホンバンのコトだったっけ?
2026/08/05(水) 09:11:14.22ID:NYuFYqVO
>>891 >>893
流石にイチャモンが意味不明
2026/08/05(水) 09:14:08.50ID:M5hHFLD4
Cをディスってる奴はだいたいバカ
頭が悪いとうまく書けないからな
901デフォルトの名無しさん
垢版 |
2026/08/05(水) 12:38:59.53ID:vthT5gAM
Aがチウ、Bがモミ、Cがセクース、Dがオギャー、だっけ?
2026/08/06(木) 23:16:16.01ID:mUt88UoU
C++は2人?3人?
903デフォルトの名無しさん
垢版 |
2026/08/11(火) 12:30:09.09ID:b+zr61Ap
Cはカミソリであるから
安全カミソリと違って
使っていて問題が無い間は問題が無い
2026/08/13(木) 23:14:51.55ID:4dN5xrJd
無意味な言葉遊び
905デフォルトの名無しさん
垢版 |
2026/08/15(土) 19:32:02.32ID:s6WQwXEi
機械語に近かろうが遠かろうが、機械語の塊であるAIには関係ないんだよなぁ
仕事取られてオシマイなのさ
2026/08/24(月) 15:52:07.85ID:FITgzI9F
log off と log out は似たような意味なのに take off と take out は全然違うのはなぜ?
907デフォルトの名無しさん
垢版 |
2026/09/02(水) 20:06:31.33ID:steWYX//
にゃー
2026/09/10(木) 12:47:29.54ID:o4xVpobH
何だかんだ言われているが、C言語は生き残っている。

C言語が生まれた'70年代初頭、並び立つ低級言語・・・言い換えると高級アセンブラって他の選択肢、あったの?
使った事無いのだけど、PASCALって低級言語だったの?
2026/09/10(木) 12:52:06.12ID:tuxScWJy
米ホワイトハウス「ソフトウェアはメモリ安全でなければならない」との声明を発表:「C」「C++」よりも「Rust」などのプログラミング言語を推奨
https://atmarkit.itmedia.co.jp/ait/articles/2403/18/news045.html
2026/09/10(木) 12:53:01.58ID:Qgzx5uFe
むしろC言語はポインタが使えたから流行ったんだ
ユルい型も良かった、中身知ってる人だけが使えた便利なハックツールだった
2026/09/10(木) 13:01:13.14ID:FGNrdFLx
それならRustがさらに便利
2026/09/13(日) 23:31:13.02ID:AA6MmwxQ
Cはプログラマの責任において何でもできるっていうのが基本思想だしね

Node-RED的なインスタンスの並列動作+データ駆動みたいなやり方も好きだけど、GUI化せずに結合関係を文字だけで表すとなるとちと書きにくいかな
2026/09/14(月) 11:23:50.84ID:E8a/N3fV
>>910
アセンブラよりマシだったから流行った
2026/09/14(月) 18:47:02.88ID:BjpjLAAY
組み込みでアセンブラ以外が普通に使われるようになるまでは結構時間かかったけどね
インテルがPL/Mとかやってたけどなかなか…
2026/09/15(火) 13:06:44.33ID:HmH+mmC/
アセンブラで条件分岐をマクロ化して不等号で記述出来る様になったから
それだけで充分だったんだよなぁ
916デフォルトの名無しさん
垢版 |
2026/09/24(木) 08:26:44.57ID:ZRS02iRy
もはや言語の善し悪しを語る意味もなくなった
AIがすべてを過去にした
917デフォルトの名無しさん
垢版 |
2026/09/24(木) 10:43:32.23ID:/bbRHFyV
「言語」って表現がおかしいわな
「ツール」でよい

言語ってさまざまあっても、とりあえず翻訳可能であって
言語によって得手不得手が発生するわけがないのが当たり前

得手不得手を敢えて設けて作るならそりゃツールというべきよ
2026/09/24(木) 13:09:12.74ID:W+Ki5+Za
>>915
別に条件分岐が不等号になっても嬉しくないぞ
2026/09/24(木) 16:37:26.30ID:bbbTQcVU
>>918
実際に使った事あれば便利だと思うはずだ
2026/09/26(土) 06:19:14.24ID:dp32mU9e
リンク ここにねむる
921デフォルトの名無しさん
垢版 |
2026/09/27(日) 11:57:05.98ID:VfcJ7pqY
よくプログラムリストにコメント記載されてるじゃん
ってことは、コメントに書かれるような記述でプログラムを書ければ
そのプログラムリストにはコメントを書く必要性が無くなるということだ

プログラム言語ってのはそうあるべきよ
2026/09/27(日) 12:51:19.31ID:vAW48sh0
自然言語にゃ曖昧さがあるから無理
2026/09/27(日) 12:52:50.96ID:w4dOecjt
なんか言いたいことがあるのは分かったがそういうのはこの業界ではただバカにされるだけなのよ
そうあるべきよ、だからこれこれこういう言語を作ったからお前ら見ろ落とせ使え、まで出来て正義なわけです
924デフォルトの名無しさん
垢版 |
2026/09/27(日) 13:29:57.21ID:pdoZXUcC
>>921
Rubyをdisるのはよせ
925デフォルトの名無しさん
垢版 |
2026/09/27(日) 16:51:30.96ID:VfcJ7pqY
わざわざ人間のために高級言語ってあるんでしょ?
それがコメント入れなきゃ理解できないなら欠陥でしかねーじゃん
2026/09/27(日) 17:02:50.44ID:vAW48sh0
プログラマーがみんな頭良いわけじゃ無いからなぁw
レスを投稿する

レス数が900を超えています。1000を超えると表示できなくなるよ。

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