C言語って設計が悪いから難しく感じるだけat TECH
C言語って設計が悪いから難しく感じるだけ - 暇つぶし2ch1:デフォルトの名無しさん
26/03/24 10:14:24.22 iaVEWJjC.net
ポインタが難しいわけでもないし、単に分かりにくい設計が諸悪の根源。

2:デフォルトの名無しさん
26/03/24 10:17:56.34 iaVEWJjC.net
K&Rを今読んでいてそう感じます。

3:デフォルトの名無しさん
26/03/24 11:25:17.12 +hX31Nmn.net
int main(argc, argv)
int argc;
char **argv;
{
return main(argc, argv);
}

4:デフォルトの名無しさん
26/03/24 16:59:55.39 iaVEWJjC.net
例えば、

int (*p)[10];

とかいう表記が最悪。

5:デフォルトの名無しさん
26/03/24 19:07:52.20 dTqNOQ9b.net
C++の.hファイルとcppファイルが分かれてるだけで勉強する気失せる

6:デフォルトの名無しさん
26/03/24 23:41:15.90 4RNA5ClM.net
俺からは一つだけ 
char* ptr_something;
この作法だけが正しい
俺以外全員間違い

7:デフォルトの名無しさん
26/03/25 08:40:44.64 NTvTvHA2.net
エセ職人スレ

8:デフォルトの名無しさん
26/03/25 13:07:39.68 idN2Bxou.net
>>3
ANSI版を嫁

9:デフォルトの名無しさん
26/03/26 13:47:31.74 q1C4x9ZJ.net
>>6
お前複数の宣言で事故るタイプ

10:デフォルトの名無しさん
26/03/26 16:35:25.34 ZMuTo2I4.net
>>4
int p[][10];

11:デフォルトの名無しさん
26/03/26 17:41:34.69 HYl7uPT4.net
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:デフォルトの名無しさん
26/03/26 21:28:53.50 Qpr66Kdr.net
[[T; M]; N]

13:デフォルトの名無しさん
26/03/26 21:29:45.57 Qpr66Kdr.net
[[T]; N]
[[T; M]]

14:デフォルトの名無しさん
26/03/26 23:39:18.32 ai1mHsgg.net
>>10
それが等価なのは引数の宣言だけ

15:デフォルトの名無しさん
26/03/26 23:41:42.57 ai1mHsgg.net
C23からのアトリビュートの宣言もかなりの闇
各種コンパイラ独自実装のアトリビュート宣言よりだいぶマシとはいえ中途半端にセマンティクス保存しようとして闇った

16:デフォルトの名無しさん
26/03/27 00:17:17.87 vbJQvJ18.net
よくこんな意味がわからない記号操れるな感心

17:デフォルトの名無しさん
26/03/27 00:39:46.85 DyQoFlgK.net
ポインタは便利

18:デフォルトの名無しさん
26/03/27 07:59:03.05 czUbq4AE.net
参照も欲しいけどな

19:デフォルトの名無しさん
26/03/27 10:20:18.62 IuqLSoe9.net
クソソースが作りにくい分だけ、C言語は設計が優れているといえなくもない
オブジェクト思考言語は美しいコードを生成できる反面、非常に難解なソースも量産できてしまう

世の中にあるクソソースでも、C言語だと理解してやろうという気持ちになれるけど
オブジェクト思考言語のクソソースは理解する気が起きないどころか殺意を感じる

20:デフォルトの名無しさん
26/03/27 10:35:39.69 /adP+HZw.net
クラスがないRustは分かりやすい

21:デフォルトの名無しさん
26/03/27 10:51:28.26 /ab4OUXT.net
>>14
まさに設計が悪い例だな

22:デフォルトの名無しさん
26/03/27 12:46:59.20 t++aEQp8.net
>>15
[[]]で囲むキモい文法はC++から借りたものではあるが、C++のアトリビュートも仕様腐ってるから何とも言えない無念さ
C++のキレイなところだけ輸入するのがC標準委員会の方針でなかったのかよ…

23:デフォルトの名無しさん
26/03/27 12:48:23.02 t++aEQp8.net
通常の言語と違って年々ゴミになっていく類稀なる発展をするC

24:デフォルトの名無しさん
26/03/28 12:21:20.72 rz9WNfgC.net
>>11
これも大概だろ

25:デフォルトの名無しさん
26/03/28 13:19:25.20 gdYalcvN.net
int *p, *q; // c
var p, q *int // go

26:デフォルトの名無しさん
26/03/28 15:43:10.47 IcEr9v0h.net
int *p; 派と
int* p; 派が居るけど
前者は int *p, *q; 出来るのに
後者は int* p, q; で詰む

27:デフォルトの名無しさん
26/03/28 15:58:42.04 /NjMiNwB.net
仕様とクセの折り合いをつけて
int* p; int* q;

28:デフォルトの名無しさん
26/03/28 17:06:21.66 bSm0koos.net
void func(int a[]);

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

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

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

配列と関数の場合で整合性がとれていないように思います。

29:デフォルトの名無しさん
26/03/28 19:00:06.62 19qhTXg6.net
>>28
それはCのcallableは関数ポインタだから
関数名を使っても関数ポインタに変換される。
だからなんなら(*****g)()でもok

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

クソだな!!

30:デフォルトの名無しさん
26/03/28 19:33:58.12 /NjMiNwB.net
>>28
その引数aはポインタのシュガーシンタックスだから、整合を取りたければ*(a+i) と書いてあげるとか

>>29
&&gが出来ないのに**gができるとは、、、

31:デフォルトの名無しさん
26/03/28 19:40:23.77 /NjMiNwB.net
いや、29の話が全てで、30は要らなそうですね、、、

32:デフォルトの名無しさん
26/03/29 09:25:03.78 WM1+84P1.net
>>28
void func(void){}
に対して
void func2(void (*g)(void));
を使うとき
func2(func); と呼ぶ派と
func2(&func); と呼ぶ派が居るらしい

33:デフォルトの名無しさん
26/03/29 14:40:17.31 Nafr56OV.net
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:デフォルトの名無しさん
26/03/29 14:44:14.10 Nafr56OV.net
もし、これらにも優先順位を考えるのであれば、

「int」と「*」と「()」の優先順位も考えなければならないはずです。

35:デフォルトの名無しさん
26/03/29 14:51:49.17 Nafr56OV.net
あ、その後に、

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

この関数を解読すれば、精密にCでの記法を理解できますね。

36:デフォルトの名無しさん
26/03/29 16:01:27.13 zcXFJxx/.net
&a == &a[0]

37:デフォルトの名無しさん
26/03/29 16:07:19.25 USBE/Vop.net
30年以上前にfj.comp.lang.cでフレーム起こしながらやってたような不毛すぎる議論で草

やっぱ引導渡さないとダメだこのクソ言語

38:デフォルトの名無しさん
26/03/29 19:06:16.10 dW2XAb/Z.net
話題に鮮度がなくて食いつけないよ・・・
初学者はこんなスレ立ててないで黙ってひっそりと独学してください

39:デフォルトの名無しさん
26/03/29 19:44:42.45 60xioQbF.net
>>36
型も一緒なの?

40:デフォルトの名無しさん
26/03/29 19:47:43.35 60xioQbF.net
>>37-38
残念だが 5ch がお㍗る


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