探検


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

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のみ採用しなかった理由がそれ
レスを投稿する


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