C言語って設計が悪いから難しく感じるだけ (40レス)
上下前次1-新
2: 03/24(火)10:17 ID:iaVEWJjC(2/3) AAS
K&Rを今読んでいてそう感じます。
3(1): 03/24(火)11:25 ID:+hX31Nmn(1) AAS
int main(argc, argv)
int argc;
char **argv;
{
return main(argc, argv);
}
4(1): 03/24(火)16:59 ID:iaVEWJjC(3/3) AAS
例えば、
int (*p)[10];
とかいう表記が最悪。
5: 03/24(火)19:07 ID:dTqNOQ9b(1) AAS
C++の.hファイルとcppファイルが分かれてるだけで勉強する気失せる
6(1): 03/24(火)23:41 ID:4RNA5ClM(1) AAS
俺からは一つだけ
char* ptr_something;
この作法だけが正しい
俺以外全員間違い
7: 03/25(水)08:40 ID:NTvTvHA2(1) AAS
エセ職人スレ
8: 03/25(水)13:07 ID:idN2Bxou(1) AAS
>>3
ANSI版を嫁
9: 03/26(木)13:47 ID:q1C4x9ZJ(1) AAS
>>6
お前複数の宣言で事故るタイプ
10(1): 03/26(木)16:35 ID:ZMuTo2I4(1) AAS
>>4
int p[][10];
11(1): 03/26(木)17:41 ID:HYl7uPT4(1) AAS
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: 03/26(木)21:28 ID:Qpr66Kdr(1/2) AAS
[[T; M]; N]
13: 03/26(木)21:29 ID:Qpr66Kdr(2/2) AAS
[[T]; N]
[[T; M]]
14(1): 03/26(木)23:39 ID:ai1mHsgg(1/2) AAS
>>10
それが等価なのは引数の宣言だけ
15(1): 03/26(木)23:41 ID:ai1mHsgg(2/2) AAS
C23からのアトリビュートの宣言もかなりの闇
各種コンパイラ独自実装のアトリビュート宣言よりだいぶマシとはいえ中途半端にセマンティクス保存しようとして闇った
16: 03/27(金)00:17 ID:vbJQvJ18(1) AAS
よくこんな意味がわからない記号操れるな感心
17: 03/27(金)00:39 ID:DyQoFlgK(1) AAS
ポインタは便利
18: 03/27(金)07:59 ID:czUbq4AE(1) AAS
参照も欲しいけどな
19: 03/27(金)10:20 ID:IuqLSoe9(1) AAS
クソソースが作りにくい分だけ、C言語は設計が優れているといえなくもない
オブジェクト思考言語は美しいコードを生成できる反面、非常に難解なソースも量産できてしまう
世の中にあるクソソースでも、C言語だと理解してやろうという気持ちになれるけど
オブジェクト思考言語のクソソースは理解する気が起きないどころか殺意を感じる
20: 03/27(金)10:35 ID:/adP+HZw(1) AAS
クラスがないRustは分かりやすい
21: 03/27(金)10:51 ID:/ab4OUXT(1) AAS
>>14
まさに設計が悪い例だな
22: 03/27(金)12:46 ID:t++aEQp8(1/2) AAS
>>15
[[]]で囲むキモい文法はC++から借りたものではあるが、C++のアトリビュートも仕様腐ってるから何とも言えない無念さ
C++のキレイなところだけ輸入するのがC標準委員会の方針でなかったのかよ…
23: 03/27(金)12:48 ID:t++aEQp8(2/2) AAS
通常の言語と違って年々ゴミになっていく類稀なる発展をするC
24: 03/28(土)12:21 ID:rz9WNfgC(1) AAS
>>11
これも大概だろ
25: 03/28(土)13:19 ID:gdYalcvN(1) AAS
int *p, *q; // c
var p, q *int // go
26: 03/28(土)15:43 ID:IcEr9v0h(1) AAS
int *p; 派と
int* p; 派が居るけど
前者は int *p, *q; 出来るのに
後者は int* p, q; で詰む
27: 03/28(土)15:58 ID:/NjMiNwB(1/3) AAS
仕様とクセの折り合いをつけて
int* p; int* q;
28(3): 03/28(土)17:06 ID:bSm0koos(1) AAS
void func(int a[]);
funcの定義内で、引数 a を使う場合、a[i] などと書きます。
void func2(void (*g)(void));
func2の定義内で、引数 g を使う場合、g() だけでなく (*g)() とも書くことができるそうです。
配列と関数の場合で整合性がとれていないように思います。
29(1): 03/28(土)19:00 ID:19qhTXg6(1) AAS
>>28
それはCのcallableは関数ポインタだから
関数名を使っても関数ポインタに変換される。
だからなんなら(*****g)()でもok
また宣言の中の配列宣言子はポインタに読み替えられるから、int a[42]であろうとint *aと同じ
中に数字書くのは飾りです
但し配列宣言子内にstatic とか書くと意味が出るのでこれも注意
クソだな!!
30: 03/28(土)19:33 ID:/NjMiNwB(2/3) AAS
>>28
その引数aはポインタのシュガーシンタックスだから、整合を取りたければ*(a+i) と書いてあげるとか
>>29
&&gが出来ないのに**gができるとは、、、
31: 03/28(土)19:40 ID:/NjMiNwB(3/3) AAS
いや、29の話が全てで、30は要らなそうですね、、、
32: 03/29(日)09:25 ID:WM1+84P1(1) AAS
>>28
void func(void){}
に対して
void func2(void (*g)(void));
を使うとき
func2(func); と呼ぶ派と
func2(&func); と呼ぶ派が居るらしい
33: 03/29(日)14:40 ID:Nafr56OV(1/3) AAS
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: 03/29(日)14:44 ID:Nafr56OV(2/3) AAS
もし、これらにも優先順位を考えるのであれば、
「int」と「*」と「()」の優先順位も考えなければならないはずです。
35: 03/29(日)14:51 ID:Nafr56OV(3/3) AAS
あ、その後に、
「dcl」という関数が書いてあります。これは、「int (*daytab)[13]」が入力されると「daytab: pointer to array[13] of int」という出力を作る関数のようです。
この関数を解読すれば、精密にCでの記法を理解できますね。
36(1): 03/29(日)16:01 ID:zcXFJxx/(1) AAS
&a == &a[0]
37(1): 03/29(日)16:07 ID:USBE/Vop(1) AAS
30年以上前にfj.comp.lang.cでフレーム起こしながらやってたような不毛すぎる議論で草
やっぱ引導渡さないとダメだこのクソ言語
38(1): 03/29(日)19:06 ID:dW2XAb/Z(1) AAS
話題に鮮度がなくて食いつけないよ・・・
初学者はこんなスレ立ててないで黙ってひっそりと独学してください
39: 03/29(日)19:44 ID:60xioQbF(1/2) AAS
>>36
型も一緒なの?
40: 03/29(日)19:47 ID:60xioQbF(2/2) AAS
>>37-38
残念だが 5ch がお?る
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.282s*