いてつくブログ

2ちゃんねるのスレッドをコピペしてまとめてみるブログ

変数

ニュースお前らって汚いコード書く奴に厳しそうだよなw

1 : ギコ(やわらか銀行):2012/12/22(土) 14:34:39.82 ID:b3B/ybvRP ?PLT(12210) ポイント特典

汚いコードとは何か?
http://news.nicovideo.jp/watch/nw469110

プログラミングを知らない人には、プログラマが言う「汚いコード」というものが実感できないかもしれない。

11 : 白黒(大阪府):2012/12/22(土) 14:39:32.43 ID:2O/M3zT70
日本語でおk

c++って難しいの?
プログラミングを3月ごろから始めようと思ってるんだが

17 : ボンベイ(やわらか銀行):2012/12/22(土) 14:43:52.40 ID:f/CtobfT0
プログラマーって頭はいいんだけど人間性が駄目なんだよなあ

25 : ジョフロイネコ(宮崎県):2012/12/22(土) 14:47:16.64 ID:Eo20FHJS0
>>17
日本の管理職はそういう人間を使いこなせないからあかんのよ
しまいにはコミュ力()とかいう始末

ジョブズみたいなサイコパスが頂点に立てるようなアメリカはその点強いな

56 : ハバナブラウン(チベット自治区):2012/12/22(土) 15:04:06.84 ID:/XesM5nR0
まあ一番イラッとするのはコピペプログラマかな。
そっくりなルーチンがコードのあちこちにあるとか普通。
ちょっと挙動が違うと自力で関数にまとめられないとか、ほんと辞めちまえと思うんだが、
コード読まない人から見ると一応サクサクと指示をこなしているのでそこそこ
評価されてたりする。

74 : ジャパニーズボブテイル(内モンゴル自治区):2012/12/22(土) 15:34:10.24 ID:o+s/8je4O
動けば何でもいいしどうでもいいメモも落書きもする

78 : ハバナブラウン(チベット自治区):2012/12/22(土) 15:38:33.96 ID:/XesM5nR0
>>74
// ↓なぜか動くので放置決定♪(^O^)

こういうコメントは殺意を覚えるがな

111 : ジャガー(福岡県):2012/12/22(土) 15:59:29.21 ID:b4P6DY8E0
グーグルのソース見習えよ
https://www.google.co.jp/

117 : キジトラ(大阪府):2012/12/22(土) 16:03:00.93 ID:gw1rp3Bi0
連続で質問すみません
http://news.nicovideo.jp/watch/nw469110
ImageViewURLReplace.datを入れてから
このurlを開こうとすると画像として開いてしまうようになったのですが
画像として開かせずにブラウザで開かせるようにできないでしょうか?

120 : トラ(京都府):2012/12/22(土) 16:04:45.15 ID:irblS5Gi0
>>117
五回氏ね


素人マなんだが、
変数はやっぱり冗長になっても可能な限り分りやすい方がいいよな?

125 : ラ・パーマ(滋賀県):2012/12/22(土) 16:09:22.42 ID:qTh0asT/0
なぜ、gotoつこたら、あかんのや? 変数は全部グローバルでええやん。

130 : 白(チベット自治区):2012/12/22(土) 16:14:46.80 ID:4ybcHPL8I
アセンブラ経験者のgotoへの違和感の無さは異常

135 : ハバナブラウン(チベット自治区):2012/12/22(土) 16:22:25.46 ID:/XesM5nR0
>>130
アセンブラや昔のBASICはジャンプ命令ないと何もできんからな

例えば例外を使いたくない状況で深いネストから緊急的に抜けたい時に
gotoを使うのは仕方ないかなと思う。今は組み込みでも石が速いから
そこまですることって滅多にないと思うけどね。あとJavaはgotoないし

しかしJavaでgotoは予約語になってるのは豆だ

142 : シャム(dion軍):2012/12/22(土) 16:28:05.90 ID:Xu4H46Qo0
>>135
アセンブラを高級言語と一緒にすんなww
知ったかもここまでくると終わってんな

145 : ラ・パーマ(滋賀県):2012/12/22(土) 16:30:21.18 ID:qTh0asT/0
C言語できても、奴隷になるだけだけどな。
真の勇者は、Excel VBAだろ

146 : トラ(京都府):2012/12/22(土) 16:30:30.67 ID:irblS5Gi0
>>142
C++で高級言語っぽく高階関数とか、オブジェクトとか使ってかくより
機械語に近いgotoで書く方が処理が速くなるんじゃないのか?

それとどういう部分が知ったか(知識の誤りがある)なんだ

150 : シャム(dion軍):2012/12/22(土) 16:34:59.71 ID:Xu4H46Qo0
>>146
CもBASICも高級言語ですがww
C++で高級言語っぽくって意味がわからないww

154 : トラ(京都府):2012/12/22(土) 16:37:11.95 ID:irblS5Gi0
>>150
は?お前もしかして真性の馬鹿?
どこをどう解釈したら、俺のレスに「C、BASICが低級言語っぽい」という意味合いを持たせられるんだ?
完結に述べてくれモンキー

155 : 縞三毛(東京都):2012/12/22(土) 16:37:45.67 ID:pZDUEuKS0
ifとカッコの間にスペースを入れないおとこの人って・・・

156 : アンデスネコ(庭):2012/12/22(土) 16:38:28.56 ID:g02JAIsz0
>>146
>>146
>>146
>>146
>>146

163 : シャム(dion軍):2012/12/22(土) 16:44:29.96 ID:Xu4H46Qo0
>>154
機械語と高級言語のコーティング方法やルールを比較することがナンセンスだろ

で、C++で高級言語っぽくコーティングするってどういう意味?ww
俺には「登山でアウトドアっぽく」って言っているようにしか見えないが?ww
知ったかモンキーはお前だろww

175 : トラ(京都府):2012/12/22(土) 16:51:03.89 ID:irblS5Gi0
>>163
登山でアウトドアっぽく
って比喩はまったく不適切だな。

C++でも高級言語よりな書き方と、機械語よりの書き方がある。

良い比喩は
登山でロッククライミングっぽく
だな。日本語もできないんだな。あいちゃん乙。

179 : シャム(dion軍):2012/12/22(土) 16:52:23.72 ID:Xu4H46Qo0
>>146
>>154
このレスに矛盾や誤りがないなら説明できるよねww
できなきゃモンキー決定w
京都にお住まいのようですからBな方かしら?ww

181 : トラ(京都府):2012/12/22(土) 16:53:37.16 ID:irblS5Gi0
>>179
あいちゃん必死だから気付いてないだろうから教えてあげるけど、リプは>>175に。

184 : シャム(dion軍):2012/12/22(土) 16:54:12.37 ID:Xu4H46Qo0
>>181
キチガイ氏ね
キチガイ氏ね
キチガイ氏ね

191 : アメリカンショートヘア(静岡県):2012/12/22(土) 16:56:24.27 ID:pdjpEoUF0
>>163
シープラはマルチパラダイムプログラミング言語っていわれてて
機械語に近い命令型でも記述できる
Javaとかとは違う

193 : トラ(京都府):2012/12/22(土) 16:57:15.27 ID:irblS5Gi0
>>184
あいちゃん発狂タイームwwwwwwwwwww



あいちゃんはおいといて、
C++はCよりより高級であるって言い方は間違ってるんか?
どうなんだ?

195 : シャム(dion軍):2012/12/22(土) 16:57:55.92 ID:Xu4H46Qo0
>>191
でも機械語じゃないでしょ?
屁理屈なら他でやっててー

197 : シャム(dion軍):2012/12/22(土) 16:59:20.10 ID:Xu4H46Qo0
>>193
妄想で叩いて何言ってんの?
お前がキチガイであることは火を見るより明らかだろ
自分のミスを認めて謝れない人間は存在意義なし
今すぐ氏ね

203 : トラ(京都府):2012/12/22(土) 17:02:38.53 ID:irblS5Gi0
>>195
お前ガチアスペぽいな。
>でも機械語じゃないでしょ

ってそんなこと誰しも分ってることだぞ。
Cが高級言語であることも皆分ってる。
お前だけが、分ってない奴がいると勘違いして孤軍奮闘してるわけだ。

俺が言いたいのは、C++やCにも機械語っぽい書き方はあるよな?
で、その方がちょっと処理が速いんじゃないの?って言いたいわけだ。

>>197
火を見るより明らかとか、恣意的な表現使わずに
俺みたいに日本語できっちり説明してみな?できないだろ?

206 : 縞三毛(家):2012/12/22(土) 17:04:21.13 ID:2Ji+ZMxy0
>>11
変数名・関数名は日本語は本当はNG
もしくは、ローマ字表記を命名規則ルールで定義してほしい

208 : ラ・パーマ(滋賀県):2012/12/22(土) 17:06:09.77 ID:qTh0asT/0
牛丼と、ねぎ玉牛丼の、どっちが高級でどっちが低級かとか、そんな議論か?

210 : サバトラ(東京都):2012/12/22(土) 17:07:49.82 ID:ySRVD/fb0
>>208
でも本質は、卵焼きには醤油かソースかケチャップかマヨネーズかって言い合ってるだけだとおもう

211 : シャム(dion軍):2012/12/22(土) 17:08:12.42 ID:Xu4H46Qo0
>>203
妄想で叩いただろ?
自演だとな。
それをお前は謝っていない。

お前みたいな日本語で説明したぞ
理解できたな?
死んで謝罪しろ。

217 : トラ(京都府):2012/12/22(土) 17:10:19.55 ID:irblS5Gi0
>>211
            __、
     ,r´⌒ヽ,⌒ヽ,ヽ
   (⌒)、   .人  λ\、 ._____
    \. \    、 ヽ./ ー  ー\
     |\ \    ヽ./ ( ●) ( ●)
     |  \  \ /     (__人__) \  はいはい、どーもすみませんでした
     |.   \   |       ` ⌒´   |
  .   |.   |.\_ノ\            /
  .   |.   |   |   \______/
  .   |   )  .|     . . ̄ ̄
  .   |   |  .|
     |   |.|  .|
  .   |  | .| .|
     /  / / ヽ,
    (__ノ  ヽ、__つ

225 : ギコ(愛知県):2012/12/22(土) 17:14:03.82 ID:T6oBF06Z0
綺麗なコードでもバグだらけじゃあねえ

228 : ラ・パーマ(滋賀県):2012/12/22(土) 17:15:48.63 ID:qTh0asT/0
>>225
キミも「動けばいい」派か! 仲間が増えたな。 

232 : ペルシャ(千葉県):2012/12/22(土) 17:18:03.16 ID:/Crt2AaW0
>>228
動けばいいは真理なんだけど
「動けばいい」と考えて書いたソースは大抵動かないという・・・

234 : スナドリネコ(中国地方):2012/12/22(土) 17:19:29.53 ID:DhbtmB1l0
>>232
これじゃ動かないかなーって不安になりながら作るが動くという恐怖

238 : ボブキャット(京都府):2012/12/22(土) 17:20:59.34 ID:gErfo0iS0
>>234
徹夜続きで頭がパンクしてる状態でキーボード叩き続けて書いたコードの試運転時に
問題が見つからなかった時の恐怖と言ったら;・・

244 : ハバナブラウン(チベット自治区):2012/12/22(土) 17:22:24.21 ID:/XesM5nR0
>>206
ローマ字表記みるとイラッとするのは俺だけか?
ローマ字は表記ゆれあるしお勧めできんぞ。

255 : ペルシャ(千葉県):2012/12/22(土) 17:26:00.27 ID:/Crt2AaW0
>>244
わからないでもないが、日本固有の変数名や
関数名を付けざるを得ない場合
どうしてもローマ字表記になってしまう

極力英語表記で不可避な所はローマ字表記にしてるな

260 : イリオモテヤマネコ(dion軍):2012/12/22(土) 17:27:43.16 ID:rt7ChEQa0
就職では文系だか理系だか微妙な職種に就いたんだけど
俺がプログラム書いてたらうちの製品終わってたなとは思う

なお、実際はうちの会社は俗に言う上流すぎて、コード書きたい奴は辞める模様

265 : ピューマ(庭):2012/12/22(土) 17:30:23.96 ID:brqZOC25P
最近、既存システムのリプレイス案件がちょくちょくあるんだけど、要求スキルがひどい
CとCOBOL、VB6を理解できて、javaとflash作れる人が欲しい、もちろん要件定義と基本設計できる人ね
って言われた営業も頭抱えてた

いるこたいるけど、それだけやらせて単価どのくらい払うつもりなんだろうか

279 : ジャガーネコ(東京都):2012/12/22(土) 17:37:07.15 ID:wNvbFdFt0
最近は再帰呼び出しとか滅多に使わなくなった
あれは美しい処理だと思うんだが…

280 : ペルシャ(千葉県):2012/12/22(土) 17:37:30.42 ID:/Crt2AaW0
>>265
COBOLはわからんがその他なら全く問題無いな
COBOLって事は金融関係かね?
あの業界も最近ではjavaばかりでCOBOLとか久しく聞いてないな

307 : ハバナブラウン(チベット自治区):2012/12/22(土) 18:11:23.03 ID:/XesM5nR0
>>255
ローマ字使う場合は表記ゆれも決めておくべきだね。
どっかの時計会社のシステムをメンテした時に全部ローマ字だったんだが、
「shinaban」ってDBのカラムがあって椅子から落ちそうになったわ。
hinbanだろバカがっていう。そういうアホくさいコードは大抵内容も
汚いのもお約束

317 : ツシマヤマネコ(福岡県):2012/12/22(土) 19:05:42.36 ID:pwlr+i1Z0
すこし使えるようになってきたrubyをもっと勉強しようかと思ってるんだけど
この言語未来あるの?
他のに変えるべき?

331 : スコティッシュフォールド(東京都):2012/12/22(土) 19:34:23.22 ID:1LBaRvq70
ちゃんとインデント統一してくれれば、それでいいよ
それすらできない奴はコーディングする資格無し

341 : ジャガー(鳥取県):2012/12/22(土) 20:22:39.46 ID:MpCP49L30
Perlとかゴミカスだろ
昔からみんな嫌々使ってて言語

381 : アフリカゴールデンキャット(青森県):2012/12/22(土) 22:47:54.32 ID:xY6LyMJV0
ポインタとか意味不明だわ
脳が腐りきった無職には無理だよぉ

382 : コラット(東京都):2012/12/22(土) 22:50:06.64 ID:yct4ccpj0
言語なんて道具でしかないのに・・・

384 : ヨーロッパオオヤマネコ(大阪府):2012/12/22(土) 22:52:33.45 ID:j3qH/dGp0
ドキュメントがちゃんとしてたらいいかな

385 : ラ・パーマ(滋賀県):2012/12/22(土) 22:56:19.21 ID:qTh0asT/0
>>381
Java 使えばいいのさ

387 : ピューマ(秋):2012/12/22(土) 23:00:03.94 ID:IctbKW1+0
char* reverse(const char* orgStr, char* newStr)
{
if (orgStr == null) return null;
int length = strlen(orgStr);
int i;
for (i = 0; i < length; i ++) newStr[i] = orgStr[length - i - 1];
newStr[i] = 0x00;
return newStr;
}

389 : 縞三毛(東京都):2012/12/22(土) 23:06:12.00 ID:OAPgY5tv0
過去のソースはコメントアウトせずに消せよ…
100行くらい残ってると馬鹿かと思う

393 : ペルシャ(千葉県):2012/12/22(土) 23:16:49.52 ID:/Crt2AaW0
>>387
newStrって本当にそれだけの領域もっているか不安になってくる

396 : ピューマ(秋):2012/12/22(土) 23:27:30.95 ID:IctbKW1+0
void reverse(char* orgStr)
{
  if (orgStr == null) return null;
  int length = strlen(orgStr);
  char* newStr = (char*)malloc(length + 1);
  if (newStr == null) return null;
  int i;
  for (i = 0; i < length; i ++) newStr[i] = orgStr[length - i - 1];
  newStr[i] = 0x00;
  strcpy(orgStr, newStr);
  free(newStr);
}

399 : ハバナブラウン(チベット自治区):2012/12/22(土) 23:45:42.67 ID:/XesM5nR0
実質ポインタなんだがな。定義の問題とポインタ演算に該当するものが
あまり出てこないだけで。
「ポインタの意味が分からん」レベルだと結局Javaでも躓くでしょ、ってこと
他のスクリプト言語でも同じ

404 : ピューマ(東京都):2012/12/22(土) 23:57:46.03 ID:3zfhbo9hP
>>307
itemIDじゃだめ?

416 : シャム(大阪府):2012/12/23(日) 01:32:27.24 ID:tY3FfedI0
1行ごとにコメント書いてる暇有るならコード書けよ

417 : キジ白(東京都):2012/12/23(日) 02:09:11.32 ID:0mUgjGw30
>>396
char* reverse(const char* orgStr)
returnはnewStrで

仕様
reverse() 関数は、文字列orgStrの反転コピーために十分なメモリを割り当て、orgStrの
反転コピーを行い、 反転コピーへのポインタを返します。ポインタは後で関数 free(3)
の引数として使ってください。
利用可能なメモリが十分ではない場合、NULL を返します。

日本語怪しいけどどう?

>>416
コメントを書くことは否定しないけど、疑問形のコメント止めてくれw

419 : バーミーズ(チベット自治区):2012/12/23(日) 02:45:06.24 ID:zeTNiePt0
>>417
マジレスすると反転コピーって言葉が何かの説明がない
あとは使い終わったらfreeしてくれって書いた方が親切かな

ぬるぽはほんとそうだな。NULLポインタっつったら(void *)0が浮かぶんだが

432 : ジャガランディ(愛知県):2012/12/23(日) 09:57:17.72 ID:kzl4CNW40
これどう?


nakano_neko, 画像の右側が外注さんに頼んだソースコード。左側が僕が書きなおしたソースコード。
http://ac7.tumblr.com/post/33569124174

443 : ぬこ(栃木県):2012/12/23(日) 11:17:31.31 ID:kQ47BubJP
機械・電気のハード屋だけどシーケンスプログラムくらいしかできないわ。
ソフトウェア開発者は俺らとは頭の出来が違うと感じる。宇宙人。

454 : マレーヤマネコ(神奈川県):2012/12/23(日) 17:02:00.90 ID:E1jq6VTR0
int out_a( int area, int address, void* data, size_t bytes );
int out_b( int area, int address, void* data, size_t bytes );

return ( ( is_a ) ? out_a : out_b )( area, address, data, bytes );

とかリソース節約したいときやらんか?

456 : バーミーズ(チベット自治区):2012/12/23(日) 18:28:31.46 ID:zeTNiePt0
>>454
今日びそのくらいのリソース節約して得する場面ってあるの?

457 : ラガマフィン(東京都):2012/12/23(日) 18:44:28.50 ID:TdSc/Kr50
>>456
組み込み

459 : バーミーズ(チベット自治区):2012/12/23(日) 19:10:23.26 ID:zeTNiePt0
>>457
どういう組み込み?
組み込みでもバイト単位でメモリ削るような場面はもうほとんどないと思ってたんだけど

461 : カナダオオヤマネコ(西日本):2012/12/23(日) 19:44:06.46 ID:WzUiP8MM0
>>459
8ビット、RAM=1k

467 : カナダオオヤマネコ(西日本):2012/12/23(日) 20:39:27.39 ID:WzUiP8MM0
大切に使え血の1バイト。~RAMは限りある資源です~


http://hayabusa3.2ch.net/test/read.cgi/news/1356154479/l50/../人気ブログランキングへ


PC等ポインタを難しいと言う奴が理解できない

1 :デフォルトの名無しさん:2008/07/27(日) 10:47:14
int i = 10;
int * p = &i;//int型ポインタpにiのアドレスを代入する
簡単。
char str1[] = "abcde";
char * str2 = "abcde";
上と下は同じでどっちを使ってもいい。

6 :デフォルトの名無しさん:2008/07/27(日) 11:25:57
* を両方から離して書くのは
かけ算と紛らわしいので嫌い

230 :デフォルトの名無しさん:2008/10/04(土) 12:01:50
char str1[] = "abcde";
char * str2 = "abcde";
>上と下は同じでどっちを使ってもいい。

これは間違い。str1は書き込みできるが、str2は書き込みができないことがある。


231 :デフォルトの名無しさん:2008/10/04(土) 12:19:38
>>230
どっちも書き込めないときがあるだろ。
パソコン上ではどちらも書き込めるが、
ROM化環境などではどちらも固定される事がある。

これらの最大の違いは、sizeof(); で返される値。

char str1[] = "abcde";
char * str2 = "abcde";

printf("%d�\n",sizeof(str1));
printf("%d�\n",sizeof(str2));
やってみそ


239 :デフォルトの名無しさん:2008/10/04(土) 13:18:31
char s[] = "abcde";

ポインタ経由だと、これに書き込めない環境があるってこと?
ないだろ。

246 :デフォルトの名無しさん:2008/10/04(土) 13:44:29
知ったかでしゃべってるのを「分野の違い」にすんなよ。
>>239 が、ポインタ経由だと書き込めないってどんな処理系だよ。

247 :デフォルトの名無しさん:2008/10/04(土) 13:50:24
>>246
だからさ、世の中には色んなコンパイラがあって、色んな環境で色んなCPUが色んな場所で動いてるわけよ。
その全部のローカルな俺様コンパイラ的な物では定数は全部固定データなワケよ。
特に初期化宣言以降どこに右辺に現れない変数も固定な訳よ。 わかる?

249 :デフォルトの名無しさん:2008/10/04(土) 13:55:33
>>247
定数を書き込み禁止領域に置くコンパイラってこと?
それごく普通のコンパイラじゃん
文字列リテラルを書き換えようとして落ちるのはANSI仕様上も問題ない

知ったか乙

253 :デフォルトの名無しさん:2008/10/04(土) 13:59:13
>>249
だからさ、

char t[] = "abc";
t[0] = "0";

とかあれば、このtは書き換え出来る領域に"abc"をコピーしてくるけど、

char t[] = "abc";
char *p;
p = &t[1];
*p = "0";

とかすると、落ちるとか普通にある訳よ。


259 :デフォルトの名無しさん:2008/10/04(土) 16:33:17
>>231
> パソコン上ではどちらも書き込めるが、
> ROM化環境などではどちらも固定される事がある。
知ったか乙
汎用OS下でも処理系によって違うんだよ。
そもそもANSI読んだのか?

318 :デフォルトの名無しさん:2009/02/04(水) 11:04:42
ポインタの記号ってドルマークの方が良かったと思う
アスタリスクだと掛け算とごっちゃになるから嫌いなんだよ

320 :デフォルトの名無しさん:2009/02/04(水) 14:20:23
a*=b と a=*b とか
a**b とかじゃないの?

323 :デフォルトの名無しさん:2009/02/05(木) 08:40:05
>>318
>>6

>>320
大昔のHP-Cで =* という独自拡張された演算子
(*= と同じなんだけど、式の値は演算“前”の左辺) があって
a=*b なんて書くと「ambiguous だぜ。演算子の後ろに空白入れな。」
という警告をくらったのを思い出した。
bがポインタかどうかで判断つくだろうに。
つか、誰が得するんだあの拡張。

326 :デフォルトの名無しさん:2009/02/05(木) 13:42:15
> > =* の類は「独自拡張」じゃないぞ。
> mjsk
こんなことも知らん割には、ずいぶん上から目線だな。

362 :デフォルトの名無しさん:2009/09/01(火) 02:43:45
超初心者の質問ですが、いいですか?

int v,*po;

po=&v;

*po=300;

のように、ポインタ変数poが指す内容は変数vのアドレスである、ということですが、

char *jk;

jk="jyosikousei";


のように、ポインタの中に文字列を直接入れられるのはどうしてですか?

この場合、ポインタ変数jkは'j'の文字が格納されているアドレスを指しているということでしょうが、なぜそこに文字列"jyosikousei"を直接代入できるんですか?




406 :デフォルトの名無しさん:2010/01/24(日) 17:31:42
そもそも配列概念の実装がポインタ演算なんだから

510 :デフォルトの名無しさん:2011/06/08(水) 20:26:32.43
ポインタがマジでわかりません。

int * const (*(*funcsMap[FUNCS])())(int * const (*)());

はがしたいのでしょうか?

526 :デフォルトの名無しさん:2011/06/10(金) 22:11:06.55
int *p;
p= (int*)malloc(80);

として、

pp[1][2] = 2;

とできるには、ppをどの様に宣言すればいいですか?

582 :デフォルトの名無しさん:2011/08/28(日) 13:06:04.38
大体何でぇ、変数の名前で指定すれば事足りる物をわざわざアドレスを取り出して
それを指定するのか、そこが分らん。

確かに世の中氏名と出席番号有るのは分かるんだが、それがプログラムの世界で
なんで必要なのかがわからんのよ

587 :デフォルトの名無しさん:2011/08/31(水) 10:31:12.12
int *p = 0;
*p = 0;

この違いを理解できずに打ちのめされる初心者カワイソス

655 :デフォルトの名無しさん:2012/02/16(木) 18:16:31.69
「JavaやC#にはポインタが無い」(※JNIやunsafe除く)
って言葉だけだとちゃんと分かってるのか判断出来ないよな

「参照はあるけどCのようなポインタは無い」とか
「ポインタ演算は無い」のような表現なら分かるけど

656 :デフォルトの名無しさん:2012/02/16(木) 19:48:27.25
>>655
>「参照はあるけどCのようなポインタは無い」
言語ごとに「ポインタ」の定義が違うことを
ちゃんと分かってるのか判断出来ないよな??

687 :デフォルトの名無しさん:2012/02/25(土) 12:49:27.76
int a = 1234
だとして、
&a とすれば、1234が記録されてるメモリー番地(たとえば4567等)が読み取れる。

&記号は 通常の変数に対して使えるのだから、*記号も同様に使えればシンプルで良かった。
*a とすれば、メモリー番地1234に(バキューン!)できる。これで十分じゃないか?
しかし実際はエラーになる。
通常の変数に * は使えない。



ポインター変数である int* a も、結局、実体はただの4byte長の数字を格納してる変数にすぎない。
通常の変数との違いは
適用できる記号が &(記録に使われてるメモリー位置を得る) だけの通常変数と、
&以外に *(記録されてる数字の、メモリー位置から読み書きする)も使えるポインタ変数。この違いだけ。

通常変数も、ポインター変数も無関係で、何にでも & と * を使えるようにすればシンプルで良かった。アセンブラの場合はこれ。
「アセンブラから始めればポインタを理解しやすい」と言われる理由はここにある。

689 :デフォルトの名無しさん:2012/02/25(土) 14:16:08.68
そもそも通常変数とポインタ変数と言う区別をしているからいけない。
その、ポインタ変数と言う代物は只単にポインタ型の変数でしかない。
つまりそれは、通常変数と言う代物と型が違うだけの同じものだ。

690 :デフォルトの名無しさん:2012/02/25(土) 14:18:44.29
>>689
ポインタを実際に使ってない人のコメントにしか見えない

706 :デフォルトの名無しさん:2012/02/25(土) 19:55:21.07
#include <stdio.h>

static void function(int a)
{
printf("my_function: %d\n", a);
}

static void caller(void (*new_function)(int a), int p)
{
(*new_function)(p);
}

int main(void)
{
caller(function, 10);
return 0;
}


708 :デフォルトの名無しさん:2012/02/25(土) 21:14:14.64
>>706
>static void caller(void (*new_function)(int a), int p)
これをプロトタイプ宣言すると
static void caller(void(*)(int), int);
となるわけで、初学者には恐怖感あるだろうな。

731 :デフォルトの名無しさん:2012/03/05(月) 00:30:34.32
Javaの意味での参照では不十分で、Cの意味でのポインタが必要なのはどんなとき?
外部関数呼び出しインターフェースをつくるときくらいしか思いつかない。


752 :デフォルトの名無しさん:2012/03/08(木) 05:59:12.20
DataGridViewでクラスのメンバ変数一覧みたいなのを作って
変数とセル内容を対応させるみたいなの作るときにポインタないと辛い
クラスは参照でいけんだけどint bool floatとか値型?のもんってポインタないから氏ねる

754 :デフォルトの名無しさん:2012/03/08(木) 10:45:05.68
>>752
グリッドとかでメンバ変数への直接の参照を保持することって無くない?
http://ideone.com/hhkJX

それとも行エントリ自体が値型ってこと?

755 :デフォルトの名無しさん:2012/03/08(木) 12:12:36.09
上で出てきた人だよね? まだそんなことやってんの?
さすがにポインタ以前の理解力の問題なんじゃないか
上で言われてるようにリフレクション使えば何の苦もないし
値型もObjectに入るはずだけど何が問題なのかわからない

756 :デフォルトの名無しさん:2012/03/08(木) 12:18:38.54
もしかして*(cells[1,2])=4;みたいな感じでメンバ変数を更新したいってこと?
そんなことしなくても変数名分かってんだからリフレクションで書き換えればいいだろ

757 :デフォルトの名無しさん:2012/03/08(木) 23:37:08.86
>>755
>上で言われてるようにリフレクション使えば何の苦もないし
なんの苦もなくは嘘だろ
すげー大変だった
これだったら絶対ポインタあったほうがいいよ
配列かどうかまで判断しないといけないとこも氏ねる
実行時型情報はあくまで型だけでインスタンスを特定できるもんじゃないんだよね
つまり、特定するにはどこどこのだれだれの~って上からたどってこないと氏ねる

>>756
ちげーよ
DataGridViewで特定の変数にアクセスしたいって言ってるのになんで別の例を出すんだ
変数名わかってもどこのインスタンスの(配列のN番目という可能性もあり)どのメンバのなかのこのメンバの12番目の要素
とかいうとこまでとってこないといけなくて面倒だろうが
ポインタだったら格納時にアドレスだけ保持って「ハイ、終了」だろが

758 :デフォルトの名無しさん:2012/03/09(金) 00:16:46.63
>>757
ポインタだったら簡単とか言ってるけど
そのポインタの型情報はどのように取得するの?
泥臭く手書きで網羅するの?
デバッグ情報として埋め込むの?
int*とか決め打ち?

リフレクションがどういうものなのか
理解出来ていないのでは?

759 :デフォルトの名無しさん:2012/03/09(金) 00:22:48.79
>>758
リストにこっそり入れときゃいいじゃん
Visible falseで

リフレクションだと俺がやった感じだとあくまで型しか取得できなくて
ポインタっぽいことはできない感じだったな
できる方法があったら教えてくれ
配列なのかそうじゃないのかとか判別して・・・ってやるのすごく面倒だったんだ

760 :デフォルトの名無しさん:2012/03/09(金) 00:38:07.85
>>759
>リストにこっそり入れときゃいいじゃん
めんどくせぇよw
てか、用途が分からん例えでイメージしづらい

> 配列なのかそうじゃないのかとか判別して・・・ってやるのすごく面倒だったんだ
ポインタでも同じでしょ
てか、配列をポインタで管理すると
型情報の他にもしくはNULL終端縛りかlengthまで必要になるよね

761 :デフォルトの名無しさん:2012/03/09(金) 01:20:35.81
>>760
同じじゃないって
リフレクションが持ってるのは型だけなんだって
馬鹿でもわかるように説明すると

void* p = &unko[12];

こういう情報をとれない

>てか、配列をポインタで管理すると
そんな話してない
DataGridViewのセル1つが変数1つに対応してる形だ
こっちが挙げてる例からなんで脱線するようなことをいうんだ
お前、ツカエネー奴だろ
会議でいっつも関係ないことを発言しだす不思議ちゃんだろ
正直、邪魔だからw

764 :デフォルトの名無しさん:2012/03/09(金) 02:31:06.14
>>761
> リフレクションが持ってるのは型だけなんだって
void*で受けたら型すら分からんですよ
型が分かれば十分じゃない?他に何が必要なの?

> void* p = &unko[12];
> こういう情報をとれない
即値な理由もunkoの型も使い所もpの寿命も…
何が言いたいのか分かんない

> >てか、配列をポインタで管理すると
> そんな話してない
>> 配列なのかそうじゃないのかとか判別して・・・ってやるのすごく面倒だったんだ
してるじゃん

> DataGridViewのセル1つが変数1つに対応してる形だ
言ってる意味は分かるよ
型が決め打ちってことはないだろうから
デバッガのGUIフロントエンドにありがちのtreelistではなく
tree + listのツーペインのlist部分みたいな位置づけでしょ?

で、リフレクションありとなしでは手間が違うって言ってるの
バインドや取得
どう考えてもめんどくさいよ

766 :デフォルトの名無しさん:2012/03/09(金) 06:25:18.09
>>764
超馬鹿だなお前
わかりやすい例出してやったのに
型がわかってもunkoの12番目っていう12番目ってところを保存できねーだろが
本当にカスだなお前

ってか、お前がリフレクション使ってなんにもやったことがないのはわかった

767 :デフォルトの名無しさん:2012/03/09(金) 08:56:18.85
>>766
>>754のソースじゃ駄目なの?

あとこういうのは?
http://ideone.com/nrlQw

772 :デフォルトの名無しさん:2012/03/10(土) 01:14:26.00
>>767-768
お前、人の話聞く気ないならわざわざクビ突っ込まないほうがいいぞ

776 :767:2012/03/10(土) 18:32:08.71
>>761
>リフレクションが持ってるのは型だけなんだって
型だけでなくどのクラスのどのメンバって情報持ってるよ

>void* p = &unko[12];
>こういう情報をとれない
ICell c = Bind(et.na, 12); で情報を保存出来てるよ
配列でないメンバも同様
ICell c = Bind(et, "n");
構文は関係無いよね?

>>764
>unkoの12番目っていう12番目ってところを保存できねーだろが
同上

>>772
認識は上に書いた通りなんだけど
出来れば具体的に指摘して欲しい

777 :デフォルトの名無しさん:2012/03/10(土) 19:16:42.40
>>776
え?そんな特定の型限定のソース出されて言われても困るんだけど

788 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/29(木) 17:46:26.00
変数を指す変数があれば便利な場合がある
そんだけ
配列とかと同じ

789 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/29(木) 17:50:24.84
必要性とかわりとすぐピンときたけどなw
関数に配列の先頭アドレス渡すのって合理的じゃね?
変数のサイズ、構造体のサイズってのを理解している段階であれば分かるはず。

792 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/30(金) 00:53:28.26
BMPみたいな数MB単位の巨大配列とかいじるとき、ポインタなしだとやってられんでしょ
動画だったらこれをさらに数十枚分キャッシュとかが普通なわけで
まあ、せいぜい数KB程度の配列や構造体しか扱ったことのない者には、なかなかありがたみはわからんかもね

797 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/31(土) 12:16:00.08
>>788
>>789
>>792
おまえらが言ってるのはただの「参照」。
そんなのはjavaやその他の言語にもある。
ていうか配列を丸ごとコピーする実装の言語なんてたぶん無いw
ポインタが難しいのはそこじゃないことを判りもしないで恥ずかしいレスすんな。

799 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/01(日) 08:24:48.19
教えて欲しいなら憎まれ口叩くより素直に教えてくださいって言った方が得だよ

808 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/02(月) 12:28:21.19
>>799
ポインタのどこが難しいのかどうか教えて下さい。お願いします

スレタイ同様、私には「ポインタを難しいと言う奴が理解できない」ので

811 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/03(火) 08:48:18.31
>>808
断片的に何度か書いているが、もっかいまとめてみる。
まず参照だ。コードの例で示してみる。
void func_a() {
OBJ a = new OBJ[10000]; //でっかい配列
func_b(a); //関数内では参照している
//なんかの処理
//ここでaは不要になるので、コンパイラは自動的に解放処理を呼び出す
}
void func_b(OBJ b) {
//なんかの処理
//ここでbは不要になるので、コンパイラは自動的に解放処理を呼び出す
}
こんなコードがあったとする。func_bにはaの参照を渡している。
ここで大事なのはaとbの解放タイミングがわからない点だ。どちらかの処理が済んでないのに、もう片方を解放したら落ちてしまう。
さて、参照とポインタの違いは「参照ならポインタ以外のワークも共有できる」という点だ。この場合ならbに渡す時に、「この変数は2箇所で使われている」という情報を書き込むことが出来る。
それにより、aおよびbの解放時に、じかに解放するのでなく、「使われている回数を1引き、0になったら解放する」という処理に変えることで、安全に解放処理を呼び出すことができる。

ポインタではそうはいかない。func_bに渡されるのはaかもしれないし、&a[1]かもしれない。するとワークは渡せないので、もちろんfunc_bで解放することはできない。すると解放処理をプログラマにやらせるしかない。
だからfree関数が用意されている。しかし上記のケースでは、func_aがfunc_bより先に終わるかもしれないから、安易にfunc_aの末尾でfree(a)などとやったら落ちてしまう。これがポインタの難しいところだ。

821 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/04(水) 12:38:38.24
811の翻訳(エスパー)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <pthread.h>

void* f(void* a) {
sleep(1);
printf("%d\n", *((int*)a));
}

g() {
int* a = malloc(sizeof(*a));
*a = 123;

pthread_attr_t pta;
pthread_attr_init(&pta);
pthread_attr_setdetachstate(&pta, PTHREAD_CREATE_DETACHED);

pthread_t pt;
pthread_create(&pt, &pta, f, (void*)a);

free(a);
}

main() {
g();
sleep(2);
}


http://toro.2ch.net/test/read.cgi/tech/1217123234/l50/../人気ブログランキングへ

PC等【Perl,Python,PHP】LL バトルロワイヤル 25【JavaScript】

1 :uy:2012/08/11(土) 12:21:25.19
面白かったのでコピペ

979 名前:uy[sage] 投稿日:2012/08/11(土) 11:53:55.80
面接官「特技はRubyとありますが?」
学生 「はい。Rubyでならなんでもかけます。」
面接官「ではシングルトンパターンを書いてください。」
学生 「存在しません?」
面接官「え、存在しない?」
学生 「はい。存在しません。Rubyはシングルトンパターンを言語でサポートしています。」
面接官「・・・で、その言語でサポートされた機能を使うとシングルトンパターンになるんですよね?」
学生 「はい。シングルトンパターンです。」
面接官「いや、あなたRubyでシングルトンパターンは存在しないといいましたよね。なぜシングルトンパターンになるんですか?」
学生 「でも、シングルトンパターンは存在しないんですよ。」
面接官「いや、存在しないとか問題じゃなくてですね・・・」
学生 「Rubyなら簡単にシングルトンパターン書けますよ。」
面接官「ふざけないでください。それに機能が用意されてるってことは存在するでしょ。だいたい・・・」
学生 「機能は用意されていますが言語でサポートしているんです。だから存在しません。」
面接官「聞いてません。帰って下さい。」
学生 「あれあれ?怒らせていいんですか?シングルトンパターン書きますよ。」
面接官「いいですよ。書いてください。Rubyでシングルトンパターンを。それで満足したら帰って下さい。」
学生 「運がよかったな。Rubyにシングルトンパターンは存在しないようだ。」
面接官「帰れよ。」


146 :デフォルトの名無しさん:2012/08/15(水) 15:17:03.87
Rubyはなんでdoに|つけるの?

149 :デフォルトの名無しさん:2012/08/15(水) 15:39:44.61
>>146
パイプでブロック引数をはさまないと、
それがブロック引数なのか、
単に式としてそこにあるのかが区別できない

151 :デフォルトの名無しさん:2012/08/15(水) 15:46:24.88
>>149
pythonみたいな
for t in list:
みたいにできなかったの?
絶対にこっちのほうがわかりやすいと思うんだけど||でかこったら特殊な演算やってそうじゃん

153 :デフォルトの名無しさん:2012/08/15(水) 15:49:51.63
>>151
for t in list; end という構文も最初から存在していますけど、なにか?

162 :uy:2012/08/15(水) 16:52:58.51
rubyで一番よく使うのはmap、これは戻り値に配列を返す
普通に書いたら
p [1,2,3].map { |x| x*2 } # => [2, 4, 6]

だけど、メソッド(イテレータ)チェインする事によって、本来配列を返さない
each_with_indexなども
p [1,2,3].each_with_index { |x,i| x*(2+i) } # => [1, 2, 3]

mapを置く事による戻り値を変えられる
p [1,2,3].each_with_index.map { |x,i| x*(2+i) } # => [2, 6, 12]


これをforで書くとこう
s??=??[]
i??=??0
for??x??in??[1,2,3]
????s??<<??x*(2+i)
????i??+=??1
end
p??s

for文とイテレータじゃ力の差が有りすぎて異論の余地すらない

177 :デフォルトの名無しさん:2012/08/15(水) 18:40:16.04
だから、分かりやすいのがよいなら、
一時変数用意すればよいだろ。何の説明も要らなくなるよ。

181 :153:2012/08/15(水) 19:14:29.25
>>177
一時変数は悪ではないし、否定しないよ
実際に実用的なプログラムでは、あまりに長いメソッドチェーンを
途中で切って、間に一時変数を入れることがある
ただし、一度代入したら二度と更新しない

問題は変数の「破壊的代入」
たとえば>>162の最後にあるforを使った手続き型スタイルでは、
最初にリスト変数とループ変数に初期値を代入した後、
forループ内でこれら変数をゴリゴリと更新(破壊的に代入)している
これが可読性の悪化とコード品質の低下をまねく要因

なお破壊的代入の無さは、専門用語だと「参照透明性」と呼ばれる

191 :デフォルトの名無しさん:2012/08/15(水) 21:10:40.01
内包表記が読み難いとか言ってる奴は
数学の素養が無いって自己紹介してることに気付いてないの?
かっこわるいから控えた方が良いよ

197 :153:2012/08/15(水) 21:57:54.67
>>191
自分は内包表記が読み難いとは思わないね
ただしPythonの場合、局所宣言またはクロージャがないから
せっかくの内包表記構文が台無しになっている
過去スレ19,20で議論になったコードを以下に示す

==== Haskell ====
 data Option a = None | Some a
 ys = [fn x | x <- xs]
   where fn x =
     let
       h = if is_first_page x then generate_header else None
       b = generate_body x
       f = if is_last_page x then generate_footer else None
     in
       (h, b, f)

Haskellには局所宣言としてwhere節があるから、関数fnを定義することで
内包表記を含む式をトップダウンに数学っぽく記述できる

==== Python ====
 ys??=??(Document.new(h,b,f)??for??x??in??xs
   for??h??in??[generate_header()??if??x.is_first_page??else??None]
   for??b??in??[generate_body(x)]
   for??f??in??[generate_footer()??if??x.is_last_page??else??None])

このPythonコードが何をしているかどうか、はたして一目で把握できるかな?

198 :153:2012/08/15(水) 22:01:18.03
参考として、>>197に関するRubyのコードを過去スレからコピペする

==== Ruby ====
 ys = xs.map { |x|
   h = if x.first_page? then generate_header else nil end
   b = generate_body x
   f = if x.last_page? then generate_footer else nil end

   Document.new h, b, f
 }

Rubyには内包表記構文は無いけれど、普通に書ける(実に初歩的なコードだ)

211 :デフォルトの名無しさん:2012/08/15(水) 22:52:50.85
>>197をPythonで(RubyやHaskellのコード相当で)書くならごく素直に

def preprocess(x):
h = generate_header() if x.is_first_page else None
b = generate_body(x)
f = generate_fotter() if x.is_last_page else None
return h, b, f
ys = [Document(preprocess(x)) for x in xs]

じゃないかと。まずリスト内包で書くことはない

235 :153:2012/08/16(木) 10:04:35.58
>>211
ん、最終行にはリスト内包表記が見えるけど、気のせいかな?

それはさておき、Pythonでは「ごく普通に」関数を定義して適用するのに対して、
Ruby(および関数型言語)では「ごく普通に」ブロックや無名関数を使って
シンブルな式として表現できる、ということになった
また当たり前だけど、>>211のような関数を定義するコードはRubyでも書ける

これは>>197,198で述べたように、関数型言語風プログラミングにおいて
局所宣言が無いというPythonの欠点、そしてRubyの優位性を示している

237 :デフォルトの名無しさん:2012/08/16(木) 11:05:52.40
>>235
Rubyは関数内関数を素直に定義できないじゃん
Proc??と??lambda??の違いとかキモイし
どさくさにまぎれて関数型言語と一緒にすんなよ

243 :153:2012/08/16(木) 14:13:16.73
>>237
>Rubyは関数内関数を素直に定義できないじゃん

エッ!、Rubyは普通に関数内関数を定義できるよ???
以前(1.8)は関数内関数のスコープに問題があったけど、今(1.9)では解消されたし

・メソッド定義のネスト - Ruby 1.9.3 リファレンスマニュアル
 http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fdef.html#nest_method

というか、OOPLであるRubyでは、プライベートメソッドとして定義するのが一般的で、
関数内関数はまず目にすることはない
しかも(>>211のPyhtonのような)他LLでは関数定義を「普通」に使うけど、
Rubyならブロックがあるから一度しか適用しない関数は式の中に埋め込むのが「普通」
つまり、(関数内関数を多用せざるをえない他LLと違って)関数内関数を使う頻度は少ない

>Proc??と??lambda??の違いとかキモイし

確かにProcとlambdaの微妙な差異は分かりづらいよね
でもRubyにはブロック構文があるから、(Procやlambdaのような)明示的な無名関数宣言を
使う頻度は比較的少ないし、使うケースでもどちらか一方を使えば済むことが多い
また、言語の微妙な弱点を避けて、良い点を引き出すことに注力することが
(Rubyに限らず)中級プログラマのたしなみの一つだと考える

>どさくさにまぎれて関数型言語と一緒にすんなよ

え、一度も「Rubyは関数型言語である」とは言ってないけど.....???
「関数型言語風プログラミングには(他LLよりも)Rubyは明らかに優れている」と主張している


244 :デフォルトの名無しさん:2012/08/16(木) 14:25:57.61
>>243
>??エッ!、Rubyは普通に関数内関数を定義できるよ???

はあ?じゃあ何で関数内関数が外から見えてんだよ

http://ideone.com/4J057

245 :デフォルトの名無しさん:2012/08/16(木) 14:42:18.11
>??つまり、(関数内関数を多用せざるをえない他LLと違って)関数内関数を使う頻度は少ない

関数型言語でも関数内関数を多用するけど...?

「関数型言語風プログラミング」って何?
それってただの「Ruby風プログラミング」なんじゃないの?

248 :153:2012/08/16(木) 14:50:55.63
>>244
わざわざideon上のコードを引用しなくても、Rubyの振る舞いは>>243で示した
リファレンスマニュアル「普通のメソッド定義式と同じ」の通りだよ???

確かに、理想的には内側のメソッドが外部から隠蔽されたほうが望ましいことは認める
これが>>211のPythonコードのように、関数定義を多用するのが「普通」、
あるいは関数定義を多用「しなければならない」言語であれば、致命的な欠陥になる
でも>>243で述べたように、Rubyでは関数内関数の必要性がほとんど存在していないんだ

もしも可能であるならば、ブロックやプライベートメソッド定義では読みづらかったり
冗長だったりするけど、関数内関数であれば素直に表現できるコード例を示してほしいなあ...


255 :153:2012/08/16(木) 15:41:10.73
>>245
>関数型言語でも関数内関数を多用するけど...?

うん、関数型言語では関数内関数でプログラムを構築していくのが普通だね
でもRubyはオブジェクト指向言語であり(>>243の最後で書いたように)関数型言語ではないから、
モジュールやクラスでプログラムを構築するのが普通なんだ

>「関数型言語風プログラミング」って何?

「(破壊的代入を含む)副作用を避けた参照透明性のあるプログラミング」(>>181も参照)

これは関数型言語のパラダイムと同じ
もちろん(関数内関数ではない)Rubyでは、入出力や効率(性能や資源)といった理由から
完全に参照透明性のあるコードは書けないけど、それでも副作用を極力避けたり、
参照透明性のある部分とない部分を意識的に使い分ける、あるいは副作用のあるコードを隠蔽する

現実に実用的なテキスト処理プログム開発で試したところ(全体で約20Kstep)、
8割は参照透明性のあるコードで実装することが可能だった
残る2割の部分は、トップレベルの(入出力を含む)メイン処理モジュール群と
最下層の副作用をカプセル化(隠蔽)した内部ライブラリ群になる

264 :デフォルトの名無しさん:2012/08/16(木) 17:48:13.46
旧世代的なラムダ脳にはリスト内包表記、イテレータ、ジェネレータ、デコレータを上手く使うPythonicなコードは理解出来ない
なんとかラムダで書こうとするのは、どの言語でもCみたいなコードを書く奴と何も変わらん

267 :153:2012/08/16(木) 18:11:28.09
>>264
論よりコード

270 :デフォルトの名無しさん:2012/08/16(木) 18:42:06.27
>>267
Closures in Python (part 1)
http://ivan.truemesh.com/archives/000392.html
>(ie. use a "list comprehension" - I think it reads a bit easier than using the map/lambda).

278 :デフォルトの名無しさん:2012/08/16(木) 19:02:19.29
そもそも関数定義無しに書けなきゃダメって
勝手にルール作ってるところがおかしい

285 :デフォルトの名無しさん:2012/08/16(木) 19:21:31.64
>全ての関数をラムダ式で書くわけもなく、普通に関数定義するし
普通の関数もかけるのは当たり前で、
それだけじゃつらいからラムダを導入したって話だろ。
論点ずれてるだろ。何言ってんだか。
ラムダが要らないものならわざわざ変な文法作ってまで導入するかよ。

286 :デフォルトの名無しさん:2012/08/16(木) 19:23:37.43
>>285
上のはラムダで書くべき例なの?

287 :153:2012/08/16(木) 19:26:19.29
>>278,279
あらゆる関数型言語であれば関数定義無しにかけるから、
それは「関数型プログラミング」の特徴の一つである、という理屈
だってPythonだけが関数定義が無ければ書けないんだから、
マイナス評価されても当然だろ?

というかさ、もしルールに不満があるならそれを最初に主張すべきだった
具体的には、>>235の指摘に対して即座に反論すればよかったのに....
いろいろゴネたあげく、技術論で反論できないからルールに不満を言うのは
カッコワルイと思うよ

294 :デフォルトの名無しさん:2012/08/16(木) 20:14:22.38
>>287
あれ?お前>>255でRubyはOOPLだから関数内関数無くても良いんだとか
言ってなかったっけ?
関数型言語では関数内関数あるんだからRubyではdefの入れ子で
関数内関数が定義できないのはマイナス評価されても良いの?

297 :デフォルトの名無しさん:2012/08/16(木) 20:18:08.51
(1)Pythonのlambdaじゃ書けなくて
(2)関数を定義したら冗長になってしまうほど短い

そんな例題があればいいんだよ

310 :153:2012/08/16(木) 21:19:31.47
>>294
>関数型言語では関数内関数あるんだからRubyではdefの入れ子で
>関数内関数が定義できないのはマイナス評価されても良いの?

正確には「関数内関数定義で内部の関数が外部から隠蔽されない」だね
もちろんこの点はRubyのマイナス評価であると認めるよ
また、アンカも間違いで(>>255ではなくて)>>243じゃないかな?

さらに言えば、>>297自身も(>>243,248から)引用しているように、
このマイナス評価はRubyにとっては致命的な欠点ではない
もしも致命的ではないという意見が不満ならば、
>>248の最後でリクエストしたように具体的なコードで語って欲しい

論よりコードだ

328 :デフォルトの名無しさん:2012/08/16(木) 22:02:23.59
Pythonディスりたければ、俺みたいに、
あの糞みたいな、ネスとスコープの仕様をつつけば良いのに。
あれだけは生粋のパイソニストでも擁護不可能だからね。
擁護しようものなら、
今になってnonlocal追加した事実に反してしまうしな。

333 :デフォルトの名無しさん:2012/08/16(木) 22:08:32.79
>>328
nonlocal(酷い名前だ)を追加したPython3ではネストスコープの問題は無いの?

344 :デフォルトの名無しさん:2012/08/16(木) 22:24:22.12
>>333
ああ、問題残ってるよ。代入の有る無しでスコープが切り替わる問題が。
互換性のためか残っちゃってるけど、
nonlocal追加したんなら、思い切ってこの糞仕様は廃止すべきだったな。
nonlocal有りならネストスコープ、無しならローカルスコープ。
一貫してそれでよかったんだよ。シンプル、単純、分かりやすい。
スコープ調べるのに代入の有る無し調べるとか意味わかんねー。
折角nonlocal追加したのに、なぜに。
二箇所調べなきゃならなくなったから、状況はより悪化したともいえる。

346 :デフォルトの名無しさん:2012/08/16(木) 22:26:16.84
>>344
ちょっと待てよ。nonlocal追加以前はそもそも代入不可だろ

349 :デフォルトの名無しさん:2012/08/16(木) 22:30:33.87
>>346
いや、代入できるよ。ローカルスコープの変数になるけどな。
代入があっても、nonlocalならネストスコープ。
nonlocal無くても、代入が無ければネストスコープ。
あー超ややこしいね。
単に、nonlocal有り/無しで、ネスト/ローカルが切り替わる
方が直感的で良いよなぁ。

419 :デフォルトの名無しさん:2012/08/17(金) 02:16:05.29
ラムダを多用ってどこの誰が多用してんの?

512 :uY:2012/08/20(月) 05:46:11.83
さっきちょっと書いたコードなんだけど
何も考えずに適当に書くとこうなるコードでも

n??=??i??=??0
s??=??[]
b??=??["a","b"]
[1,2,3].cycle??do??|??m??|
????n??+=??1
????i??+=??1
????break??if??n??==??21
????s??<<??m
????if??i??==??4
????????i??=??0
????????s??<<??b.first
????????b.rotate!
????end
end
p??s

↓ちゃんと書けばちゃんとブロック内に全部収まるところが、rubyが最強である所以だと思う

[1,2,3].cycle.take(20).each_with_index.each_with_object??[??s??=??[]??,??["a","b"]??]????do??|??(??m??,??i??)??,??(??s??,??b??)??|????
????s??<<??m
????(??(i??+=??1)??%??4??).zero???and??s??<<??b.rotate![-1]
end
p??s

メソッド名が長かったりしてソースは長いけどアルゴリズムとしては完璧なものが書けるんだよ

519 :uY:2012/08/20(月) 16:31:55.85
40.times.map.each.with_index(1).each_with_object( [ [1,2,3] , ["a","b"] ].map(&:cycle) ).map?? do | ( m , i ) , ( a , b ) |??
?? Hash[ true , b.next , false , a.next ][ ( i % 5 ).zero? ]
end.display

puts

[1,2,3].cycle.take(40).each.with_index(1).each_with_object( ["a","b"].cycle ).map?? do | ( m , i ) , b |??
?? ( i % 5 ).zero? ? b.next : m
end.display


変数の完全隠蔽がされている

アルゴリズムとして完璧なんだよこれは


これを無駄に長いとはいわない
短くしようと思えば出来る長さなんだよ
すべてがメソッドで、その引数で構成されているから

↓これが出来る

a = [1,2,3].cycle.take(40).each.with_index(1).each_with_object( ["a","b"].cycle )

a.map do | ( m , i ) , b |??
?? ( i % 5 ).zero? ? b.next : m
end.display


520 :デフォルトの名無しさん:2012/08/20(月) 17:05:56.67
from??itertools??import??cycle

print([s??if??i??%??5??==??0??else??n??for??n,s,i
????????in??zip(cycle([1,2,3]),??cycle("ab"),??range(1,41))])

576 :uY:2012/08/21(火) 19:53:34.60
def func n , aa , bb
?? y = Enumerator.new do | e |
?? ?? a = aa.cycle
?? ?? b = bb.cycle??
?? ?? [*1..n].cycle { |i|
?? ?? ?? r = (i%n) == 0 ? a : b
?? ?? ?? e << r.next
?? ?? }
?? end
end

y = func 5 , ["a","b"] , [1,2,3]

p y.take(20) # => [1, 2, 3, 1, "a", 2, 3, 1, 2, "b", 3, 1, 2, 3, "a", 1, 2, 3, 1, "b"]

y = func 2 , [true] , [false]

p y.take(20) # => [false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true]


ゲームでインターバルの制御に使うんです


592 :デフォルトの名無しさん:2012/08/21(火) 21:51:53.70
>>576
func の中の y の代入が意味不明。
[*1..n].cycle は冗長。

def func(n, aa, bb)
????Enumerator.new do |y|
????????a = aa.cycle
????????b = bb.cycle
????????loop{ (n-1).times{ y << b.next }; y << a.next }
????end
end

enum = func(5, ["a","b"], [1,2,3])
p enum.take(25)

720 :デフォルトの名無しさん:2012/08/30(木) 16:23:23.43
大学のプログラミングでperlやってるんですが
3年になったら何言語やるんでしょう?

1年 C java Basic Javascript ruby
2年 C++ perl
な感じです。

2学期後期は何ですか?

765 :uy:2012/08/31(金) 03:21:35.57
逆に考えると専門にはいれば
論外的に才能ない奴はすぐ挫折していなくなるから、かえってそのほうが早期にIT脱出できて幸せなんじゃね
大学だと才能なくてもやめずに4年間ズルズルとやり続けて産廃になってる可能性もある
才能がないなら早めにリターンしたほうが絶対良い


http://toro.2ch.net/test/read.cgi/tech/1344655285/l50/../人気ブログランキングへ

PC等【初心者歓迎】C/C++室 Ver.79【環境依存OK】

1 :デフォルトの名無しさん:2012/06/30(土) 19:40:01.73
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

【前スレ】
【初心者歓迎】C/C++室 Ver.78【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1331894668/

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。

【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)

119 :デフォルトの名無しさん:2012/07/15(日) 15:07:09.82
初めて質問させていただきます。
現在私はシューティングゲームを製作中で
オブジェクト(弾や敵、プレイヤー等)生成時に製造番号を振ってくれるクラスを作成したのですが
IDを解放する時に、std::listの挙動がおかしくなっていて、困っています。
IDの生成は各オブジェクトのコンストラクタで
IDの解放は各オブジェクトのデストラクタで呼び出しています。

改行が多いと言われてしまったので、次にコードを書きたいと思います。
場所をとってしまってすみません。



142 :デフォルトの名無しさん:2012/07/18(水) 14:02:39.82
あるスレッドで作成したFiber、またはSetTimer、またはQueueUserAPCに
他のスレッドから切り替えさせる方法はありませんか?

172 :デフォルトの名無しさん:2012/07/23(月) 16:27:46.15
バイト列を無理やりdoubleにキャストして、それが
doubleとして有効かどうかを判定する方法を教えて

175 :デフォルトの名無しさん:2012/07/23(月) 23:23:54.34
>>172
でもそれって一様乱数じゃないよね

177 :デフォルトの名無しさん:2012/07/24(火) 09:38:27.61
>>175
一様乱数なバイト列ならdouble表現にしても
符号部,仮数部,指数部どれも一様になる気がするけどならないの?

178 :デフォルトの名無しさん:2012/07/24(火) 09:42:12.10
>>177
そもそも全doubleが一様分布じゃないでしょ

181 :デフォルトの名無しさん:2012/07/24(火) 09:52:40.50
>>178
どういうこと?
上で出てるisnan,isinfや-0を除外する話でなく?

182 :デフォルトの名無しさん:2012/07/24(火) 09:58:37.06
>>181
小さな数は密で大きな数は粗

191 :デフォルトの名無しさん:2012/07/24(火) 11:12:15.12
doubleが表現できる範囲での一様分布なんて無理だろ

194 :デフォルトの名無しさん:2012/07/24(火) 14:19:02.99
>>191
doubleが表現できる範囲=doubleの全ビットパターン なら可能だろ

216 :216:2012/07/25(水) 21:33:30.39
#include <vector>
int map_one[10][10] = {
//中身は0,1,2のどれかが10×10
}
int map_two[10][10] = {
//中身は0,1,2のどれかが10×10
}
int map_three[10][10] = {
//中身は0,1,2のどれかが10×10
}
std::vector<int> StageList;
int StageId = 0 //0,1,2のどれか
StageList.push_back(map_one[10][10]);
StageList.push_back(map_two[10][10]);
StageList.push_back(map_three[10][10]);


277 :デフォルトの名無しさん:2012/08/02(木) 16:08:20.69
負の数の試射五入ってどうやってやるの?

309 :デフォルトの名無しさん:2012/08/05(日) 04:26:09.40
同一のクラス中で同名の変数と関数を宣言したらコンパイルエラーが出て、どうやら衝突してるみたいなんですが、
これって仕様なんですか?
また、変数、関数を別名にする以外の対処法があったら教えて下さい。

例:
class test {
int hoge;
public:
int hoge();
};

326 :デフォルトの名無しさん:2012/08/05(日) 12:16:41.70
#include <stdio.h>
#include <string.h>
#include <conio.h>

using namespace System;

void hoge1()
{
puts("hoge");
}

void hoge2()
{
puts("hogehoge");
}

int main()
{
void (*p1[])() = {hoge1,hoge2},(*p2[2])();
int p3[2];
memcpy(p3,p1,sizeof(p3));
printf("%d,%d\n",p3[0],p3[1]);
memcpy(p2,p3,sizeof(p3));
p2[0]();
p2[1]();

return 0;
}


329 :デフォルトの名無しさん:2012/08/05(日) 12:47:48.39
>>326
p1に入ってる関数ポインタを、p2に入れて変数としてアドレスを表示し、
さらにp2の内容をp3の関数ポインタに入れ直して関数ポインタとして実行。
これが何故正常に動くのかは素人には分からんだろうな。

331 :デフォルトの名無しさん:2012/08/05(日) 13:28:27.32
>>329
int型とポインタが同じメモリーサイズだという常識から説明しないと分からんだろ。
16ビットの頃のsizeof(int)は2だし、64ビットでコンパイルするとsizeof(int)は8になる。

332 :309:2012/08/05(日) 13:43:33.14
#include <stdio.h>

int hoge() {}
int hoge;

int main(void)
{
return 0;
}

これでエラーが起きるのは、
同一のメモリ領域にhoge()の実態のアドレスを指すhogeが暗黙的に定数(書き換えできない変数?)として存在しているから。
という理解でいいでしょうか?


365 :デフォルトの名無しさん:2012/08/05(日) 22:37:46.08
31以上を保証しなければいけないのは、内部リンケージの識別子。

380 :デフォルトの名無しさん:2012/08/06(月) 02:02:01.95
NXbitってなに? おいしいの?

404 :デフォルトの名無しさん:2012/08/10(金) 14:37:52.01
親クラスのメンバを初期化するとき、
class Oya {
protected:
int age;
};
class Kodomo : public Oya {
Kodomo() : Oya::age(50) {}
};
こう書くとエラーになるのは何でですか?


418 :デフォルトの名無しさん:2012/08/12(日) 06:44:51.22
純粋仮想デストラクタを使うのってどういう場面ですか?
何もしてないデストラクタ virtual ~myClass() {} みたいなのがあるのですが、
これを純粋仮想にするとコンパイルが通りません。
いったいどういう場面で使うのでしょうか?


420 :デフォルトの名無しさん:2012/08/12(日) 09:01:04.93
>>418
純粋仮想デストラクタを使う場面はありません
インターフェイスのインスタンスを作らせないようにするには
コンストラクタをprotectedにします

421 :デフォルトの名無しさん:2012/08/12(日) 12:00:48.61
struct IHoge {
virtual ~IHoge()
{
} // <- このかっこがなんかウザい
virtual void DoSomething() = 0;
};

こういうときに純粋仮想デストラクタを書くと見た目が気持ち良くなります

424 :デフォルトの名無しさん:2012/08/12(日) 14:16:57.24
>>421
派生が迷惑だろ
class IHoge:public Deletable みたいな感じに
仮想デストラクターもったクラスを継承した方がいい

430 :デフォルトの名無しさん:2012/08/12(日) 18:19:08.78
ラムダみたいにして匿名のクラスをなんとかして作れないんですか

struct Hoge {
Hoge(function<void(void)> h, function<void(void)> w): Hello(h), World(w) {}
function<void(void)> Hello;
function<void(void)> World;
};

template <class T> void Test(T obj) { obj.Hello(); obj.World(); }

int main(void) {
SmartPtr<X> obj(new X);
Test(Hoge(
[obj]() { obj->hello(); },
[obj]() { obj->world(); }));
return 0;
}

このコードからHogeクラスを削りたいんだけど

435 :デフォルトの名無しさん:2012/08/12(日) 20:34:54.98
>>430
またhoge厨か
恥ずかしくない?w

461 :デフォルトの名無しさん:2012/08/12(日) 23:47:32.32
どうでもいいけど、hogeは『これには何の意味もありません』って意味だからな。

480 :デフォルトの名無しさん:2012/08/14(火) 03:15:11.48
最後の無限ループはウィンドウが閉じないようにしてる

Run-Time Check Failure #3 - The variable 'hoge' is being used without being initialized.

#include <iostream>
#include <fstream>

using namespace std;

void main(){

ifstream List("GunList.txt");

char* hoge;

while(List.getline(hoge,100)) {

for(int i=0;i<5;i++)
std::cout << hoge;
std::cout << "\n";
}

while(1);
}


483 :デフォルトの名無しさん:2012/08/14(火) 03:35:06.03
hoge初期化してねージャン
char hoge[1024];とでもしとけ

486 :デフォルトの名無しさん:2012/08/14(火) 11:24:24.85
>>483
char* hoge="";
でもいいの?
文字数分やらないとダメなのかな

489 :デフォルトの名無しさん:2012/08/14(火) 11:37:02.57
>>480
どうでもいいけど無限ループでウィンドウを閉じさせないって随分お大尽だな。
CPUぶん回すことになるからエコじゃないぞ。
単に進行を止めたいだけならgetline()でも充分だろ。

491 :デフォルトの名無しさん:2012/08/14(火) 12:30:03.32
>>489
まぁ2秒ぐらい眺めて閉じますし・・・

495 :デフォルトの名無しさん:2012/08/14(火) 15:31:48.90
>>491
言い訳してないで、回答してくれた皆さんに感謝の一言でも書きなさい。

496 :デフォルトの名無しさん:2012/08/14(火) 15:34:15.73
忘れてました、
ありがとうございました!

516 :デフォルトの名無しさん:2012/08/14(火) 19:31:03.14
GUIを勉強すればそこから先はだいぶはかどる
作りたいもの作りながら足りないものをその都度べんきょうするかんじ

518 :デフォルトの名無しさん:2012/08/14(火) 19:59:29.21
WIN32APIでGUIやったら挫折した

525 :デフォルトの名無しさん:2012/08/14(火) 20:41:38.10
C#のがライブラリ充実してるしMonoもあるから環境もそんな気にしなくていい
むしろQtを使う理由なんてあるの?って感じ

542 :デフォルトの名無しさん:2012/08/15(水) 23:45:43.07
ユニポのカスタムデリータは動的じゃないからいちいち型書かなきゃいかんからめんどくさいよな
なんで静的にしたんだろう


549 :デフォルトの名無しさん:2012/08/16(木) 03:12:33.15
fgetsは
abcdefghij�\nklmnopq
という文字列が有った場合に、
17文字読み込むように指定すると、
abcdefghij�\nまで読み込みますか?
それとも
abcdefghij�\nklmno
まで読み込みますか?

551 : ◆QZaw55cn4c :2012/08/16(木) 03:26:01.87
>>549
\n が改行コードだとして、
>abcdefghij\n
は11バイトですので、ここまで読み込んで末尾に\0をつけ、以上12バイトを指定領域に残します。

553 :デフォルトの名無しさん:2012/08/16(木) 09:34:32.24
>>542
例えば同種の100個のリソースハンドルがあったとして
それのデリータ関数は1つなのに、関数ポインタなりを100個持つのは無駄じゃね?

554 :デフォルトの名無しさん:2012/08/16(木) 09:55:18.95
>>551
前から思ってたけど日本語おかしいよ
残します ってなんだよ

555 :デフォルトの名無しさん:2012/08/16(木) 10:16:26.00
>>553
そういうケースはそうかもしれないけど
じゃあこういうケースはどうするの?

vector<MyUniquePtr<IFoo>> v;

v.push_back(MyUniquePtr<FooX>(new FooX)); // 標準new、delete
v.push_back(MyUniquePtr<FooY>(FooY::Create(), FooY::Delete)); // 隠ぺいされた生成、破棄

FooZPool fac = FooZPool::GetInstance(); // プールされたFooZ
v.push_back(MyUniquePtr<FooZ>(fac.get(), [fac] (FooZ * p) { fac.release(p); }); // 借りたものは借りた場所へ

こういうのはデリーターの型固定じゃだるくね?


556 :デフォルトの名無しさん:2012/08/16(木) 11:22:34.27
>>555
そういう場合は unique_ptr に動的な削除子の型を指定すればいいんでしょ。
だるいって、具体的に何のことを言ってるの?

557 :デフォルトの名無しさん:2012/08/16(木) 11:36:21.59
>>556
どうやって?

570 : ◆QZaw55cn4c :2012/08/16(木) 21:54:55.57
>>554
んー、じゃ、どうかけばいいの?

574 :デフォルトの名無しさん:2012/08/17(金) 04:38:14.46
>>570
「残す」という言葉の意味を考えれば、どう考えてもおかしいだろ。
その場合は寧ろ、「移す」とか「移動する」とか、さもなきゃ単に「書き込みます」とか。

575 :デフォルトの名無しさん:2012/08/17(金) 04:49:48.65
日本語がおかしいのは俺も思ってた
在日なん?

582 :デフォルトの名無しさん:2012/08/17(金) 08:00:39.70
厳密性を考慮して思考した結果が「残す」とか。
そもそも、日本語を勉強しなければいけない段階でお郷が知れるのだが。
私ゃ自分の言語感覚のほうを信じるね。

583 :デフォルトの名無しさん:2012/08/17(金) 08:32:30.64
>>582
「移す」よりはましだし、結果を「残す」のだから、意味として問題はない

>>582==>>574
ならば、あんた、言語感覚狂っているよ

598 :デフォルトの名無しさん:2012/08/18(土) 07:36:31.16
hoge[]とかfuga[9]とか書くと
hoge[0]だのfuga[4]だのが実際のデータを指し示す事になってるんだよ
これはわかるよな
じゃあそのとき
hogeとかfugaとかだけ書くと、これは実はhoge[0]とかfuga[0]って先頭データのアドレスになってるんだよな
つまりhoge = &(hoge[0])な
その例だとtypedef char* charpとか置き換えると
charp argv[]とcharp *argvになってどっちもargvはcharpのポインタになってるってわけだ

613 :デフォルトの名無しさん:2012/08/18(土) 22:08:08.77
hogeじゃなくローマ字でいいから意味の解る名前をつけろ
質問にしてもいちいち目的はなんだと訊かにゃならんからめんどくせぇ

614 :デフォルトの名無しさん:2012/08/18(土) 22:14:31.80
>>613
>意味の解る名前
何のためのメタ構文変数なんだよ……

619 :デフォルトの名無しさん:2012/08/18(土) 22:34:36.97
>>614
説明ならともかく質問すんのに無意味な名前をつけるな

657 :デフォルトの名無しさん:2012/08/21(火) 13:47:35.28
655じゃないけどwikiみたら

http://ja.wikipedia.org/wiki/リスコフの置換原則
S が T の派生型であれば、プログラム内でT 型のオブジェクトが使われている箇所は
全て S 型のオブジェクトで置換可能であり、それによってプログラムの動作は全く変化しない

って書かれてるんだけどこれマジで?
「正常に動作する」とかなら分かるけど「動作は全く変化しない」なら
ポリモーフィズム全否定になると思うんだが
というかTが純仮想だったらどうすんのかと

659 :デフォルトの名無しさん:2012/08/21(火) 17:44:19.62
>>657
>なお、これが派生型の唯一の定義ではない

と書いてあるじゃん
仮想関数が派生型と基本型で動作が違う事はいくらだってある
無理にC++に当てはめようとする事自体おかしい

662 :デフォルトの名無しさん:2012/08/21(火) 18:24:32.45
>>659
それはつまり
リスコフの置換原則についてはポリモーフィズム全否定であってるってこと?

671 :デフォルトの名無しさん:2012/08/22(水) 00:22:38.46
using namespace std;

class Sample {
string name;
string groupe;
public:
Sample(string const & n, string const & g): name(n), groupe(g) { }
Sample(string const & n, string && g): name(n), groupe(move(g)) { }
Sample(string && n, string const & g): name(move(n)), groupe(g) { }
Sample(string && n, string && g): name(move(n)), groupe(move(g)) { }
};

上のように引数がたくさんあるとconst & と && の両方を書くのがめんどくさいんですが
どうにかして一発で書く方法はありませんか?




691 :デフォルトの名無しさん:2012/08/24(金) 01:42:09.63
ifstream List("List.txt");
string Text;
while(List && getline(List,Text)) {
TextList.push_buck(Text);
}

このようにしてvector<string>TextListにList.txtの文章を一行づつコピーできる
と聞いたのですがどうしてかわかりません。

http://sato-si.at.webry.info/200703/article_1.html
を参考に
http://www.cppll.jp/cppreference/cppio_details.html#getline
のリファレンスと食い違うところがありまして・・・

696 :デフォルトの名無しさん:2012/08/24(金) 20:09:30.79
C++ってCPAN, RubyGemsみたいなのは無いの?
boostは標準化委員会が作ってるtr1候補みたいなものだし

704 :デフォルトの名無しさん:2012/08/27(月) 14:42:41.72
>>696
そんなものがあったら
boost.eggの悲劇はおきなかった

709 :デフォルトの名無しさん:2012/08/28(火) 17:48:38.33
hello worldの次は何するのが良いと思います?
参考になりそうなサイト読んでもチンプンカンプン

734 :デフォルトの名無しさん:2012/08/29(水) 20:40:12.92
Cygwin使ってたら
error: cannot pass objects of non-trivially-copyable type ‘struct std::string’ through ‘...’
って出たんだけれどこれなんですか?
エラー部分は
printf("%s\n",s);
sはstring型です。


740 :デフォルトの名無しさん:2012/08/30(木) 07:57:28.02
linuxでcoutとprintf混ぜるとバグる


http://toro.2ch.net/test/read.cgi/tech/1341052801/l50/../人気ブログランキングへ

PC等新C言語を作ろう

1 :デフォルトの名無しさん:2007/07/21(土) 18:27:03
これまでの古いC言語から新しいC言語を作りましょう。
C言語に足りない、欲しい機能を追加して最終的には標準化しましょう。

いまここに新C言語作成委員会の発足を宣言します。

とりあえず必要と思われる機能は
・クラス
・テンプレート
などでしょうか?

4 :デフォルトの名無しさん:2007/07/21(土) 19:39:27
コンパイラ誰が作ってくれるんだよ

110 :デフォルトの名無しさん:2007/07/28(土) 18:05:58
前方参照が欲しいなぁ。

121 :名無しさん@そうだ選挙に行こう:2007/07/29(日) 06:08:46
>-前方参照(>>110)

これってどういうの?


124 :110じゃないけど:2007/07/29(日) 18:02:20
>>121
後ろで宣言したものでも使える。後方参照とも言う。
Dの例(前方参照あり):
void foo(){
?? bar();
}
void bar(){
}

Cの例(前方参照無し):
void bar(void);
void foo(void){
?? bar();
}
void bar(void){
}

129 :デフォルトの名無しさん:2007/07/29(日) 21:11:10
>>124
「後ろで宣言した」と言うのが間違い。

コンパイラは「ソースを読み進めて行く」んだから、
ソースの下のほうが「前方」だよ。

勘違いしている人が多いので、後方参照とか書いてあるバカ本があったりする。

131 :デフォルトの名無しさん:2007/07/30(月) 00:29:29
へー、そういう解釈の一派もあるんだ…

133 :デフォルトの名無しさん:2007/07/30(月) 22:13:52
>>131 バカ本著者乙 (w

134 :デフォルトの名無しさん:2007/07/31(火) 00:32:44
>>133
誤爆?

135 :デフォルトの名無しさん:2007/07/31(火) 01:22:21
まともに(?)煽っていて誤爆に見えないが。

136 :デフォルトの名無しさん:2007/07/31(火) 01:42:48
まともには見えないが。

138 :デフォルトの名無しさん:2007/07/31(火) 11:44:19
>>133 を読むのに知識が必要とは思えないが。

140 :デフォルトの名無しさん:2007/07/31(火) 12:51:57
>>135 が言っているのはこういう事でしょ。

1. >>133 は煽っている
2. >>133 の煽りは煽りとしては特に不可解な所は無い
3. よって >>133 は誤爆ではない

俺は >>133 は煽りとして不可解だと感じたから、誤爆だろうと思った。
あまり知性も感じられない書き込みだし、よく誤爆する人間なんだろうと。

142 :デフォルトの名無しさん:2007/07/31(火) 14:43:20
単に136が135の「まとも」の使い方を誤読しただけ

143 :デフォルトの名無しさん:2007/07/31(火) 20:38:33
>>142
>>140>>135 の意図した事と異なるのであれば、
>>135 がまともな日本語でないのが原因だよ。
まともに相手してあげた俺がバカだったみたいだね。

145 :デフォルトの名無しさん:2007/07/31(火) 21:36:34
いちいち阿呆とか馬鹿とか付けないと文章書けない人か

146 :デフォルトの名無しさん:2007/07/31(火) 22:05:24
C言語はハードに近い部分を記述することができますが
最近の言語では、それは無くなってきていますね。
良いことか分かりませんが。

147 :デフォルトの名無しさん:2007/07/31(火) 22:20:59
>>131=>>134=>>136=>>138=>>140=>>143=>>145 自演乙

148 :デフォルトの名無しさん:2007/07/31(火) 22:23:57
>>146
> 最近の言語では、それは無くなってきていますね。

FORTRAN の時代からハードに近い部分は高級言語では書けなかったけど?

151 :デフォルトの名無しさん:2007/07/31(火) 22:49:24
>>147は自分が正しいと思ったら絶対曲げないタイプでしょ?


152 :デフォルトの名無しさん:2007/07/31(火) 23:37:04
OS が書ける言語ならハードに近い部分も書けるんじゃないのかな。
Pascal, Oberon, Lisp, Smalltalk, C++, etc...

159 :デフォルトの名無しさん:2007/08/01(水) 21:49:59
>>151
間違ってると言うなら、ソースつきで反論どうぞ。
バカ本はダメだよ。(w

>>152
Pascal と Lisp には標準ではハードを直接触る機能はないと思ったけど。

Oberon, Smalltalk は使ってことないからよくわからんが。

160 :デフォルトの名無しさん:2007/08/01(水) 23:22:13
頭固い奴だな
OSのアセンブラコードを吐くプログラム書けばいいじゃん

161 :デフォルトの名無しさん:2007/08/01(水) 23:27:30
それを実行時にやるというなら、生成したコードを実行するために、
任意のアドレスへジャンプもしくは関数呼出などができる機能を
持っている必要があるという制約が生じるね。

172 :デフォルトの名無しさん:2007/08/04(土) 22:25:25
以上、言い負けてから先が威勢の良い典型的な厨房でした。

174 :デフォルトの名無しさん:2007/08/05(日) 10:43:00
>>172-173
> 典型的な厨房でした。

反論できないから、人格攻撃か。
わかりやすい奴だな。

> 簡単な技術の話も出来ないなら他所へ行ったら良いのにな。

で、おまえ等 (一人かも知れんが) のレスのどこに技術の話があるんだ?

反論したければ、単に >>129 の解釈に対する反例をあげれば済む話なのに
できないからうだうだ言ってるんだろ?

175 :デフォルトの名無しさん:2007/08/05(日) 11:17:42
そんな下らない事で息巻いてたのか…

176 :デフォルトの名無しさん:2007/08/05(日) 11:26:58
>>174
>で、おまえ等 (一人かも知れんが) のレスのどこに技術の話があるんだ?

俺じゃなくてさ、>>159 の書いてる事が素人っぽかったからね。
「Oberon, Smalltalk は使ってことない」らしいけど、Pascal と Lisp も
殆ど知らないんだろうなと思って。

177 :デフォルトの名無しさん:2007/08/05(日) 12:26:28
>>175
へ??、君はもっと凄いことについてレスしてるつもりだったんだ。
詳しく説明してくれるかな?

>>176
> Pascal と Lisp も殆ど知らないんだろうなと思って。

そう思うなら、どこか素人っぽいか指摘すればいいだけ。

指摘もできないから、「知らないんだろうな」とか言う技術的じゃ
ないことしか書けないんだろ?

# まさか、「OSのアセンブラコードを吐く」なんて言うわけわかめ
# のことを言ってた奴が絡んでるのかなぁ...。(w

178 :デフォルトの名無しさん:2007/08/05(日) 12:54:10
この人、リアルでは孤独なんだろうな。。


181 :デフォルトの名無しさん:2007/08/05(日) 13:02:52
"ハードに近い"の定義がされてないのに何この荒れよう。
人によってリアルモードのことだったり割り込みのことだったりしそう。
#リンカスクリプトを言語に統合まだー?

183 :160:2007/08/05(日) 13:15:35
>>177
「OSの」は余計って事か。ごめんね。
書いたときは>>152以前は読んでなかったから、OSでも書くつもりなのかと思ってたよ。
>>161には話通じてるみたいだし、スルーされたと思って放置してた。
どのみちファイルに出力できる言語なら何でもできるだろ、
って事を>>148みたいな人へ言いたかったんだけど。

184 :デフォルトの名無しさん:2007/08/05(日) 13:24:18
ホントにどんな事にでも噛み付いてくる奴は居るもんだな

185 :デフォルトの名無しさん:2007/08/05(日) 13:41:40
夏だからな

186 :デフォルトの名無しさん:2007/08/05(日) 13:50:23
>>178-180, >>184-185
「技術的に指摘して」って言ったらこの様ですか...。

まあ、>>185 が言う通り 夏 なんだろうな。

>>181
> "ハードに近い"の定義がされてないのに何この荒れよう。

まあ、最低限として任意のメモリの読み書きができないとダメだろうな。

て言うか、リアルモードとか割り込みなんて事まで言い出すと特定プロセサ
シリーズ専用の言語になるから「標準」でと言うのはないだろうな。

>>183
単に茶化しただけだ、気にしないくれ。

そもそも、>>160 の書き込み自体洒落 (=原理的には可能だけど、実施が
大変面倒なので実際的じゃないという意味) だろ?

て言うか、このスレ自体がネタスレだし...。

> どのみちファイルに出力できる言語なら何でもできるだろ、

>>161 が指摘してる通りそのファイルを実行する手段が必要。
標準の言語仕様としてその機能を持ってる言語ってそんなに多くないよ。

188 :デフォルトの名無しさん:2007/08/05(日) 14:09:42
>>186
各arch毎に言語拡張すれば良くね?

189 :デフォルトの名無しさん:2007/08/05(日) 14:37:07
>>186
言語仕様に含まれてなくとも、大抵は処理系毎にFFIとかが整備されてるもんだよ。
C言語にしてもasmは標準ではないし、C言語で適当なバイト列を関数アドレスとして
キャストして実行できたりするのも処理系が「たまたま」許してるだけ。
そんな所を君がごちゃ混ぜに語っているのが、分かってないのでは
と言われる理由かと。

190 :デフォルトの名無しさん:2007/08/05(日) 15:05:34
>186
>そもそも、>>160 の書き込み自体洒落 (=原理的には可能だけど、実施が
>大変面倒なので実際的じゃないという意味) だろ?

大変面倒というのは君の主観でしかないよね。
そういうのは一度作ってしまえばその環境で使いまわせるし、
やることも極めて単純な変換作業だよ。
エミュレータやコンパイラ作ったりする人なら普通に思いつく発想。
で、

>て言うか、このスレ自体がネタスレだし...。

このスレは仮にも「新C言語を作ろう」なんだから、その程度を、
大変面倒と言ってしまうレベルの人間の横槍は遠慮してもらいたい。

193 :>>187 かわいそう...:2007/08/05(日) 15:51:36
>>188
そう、実用的には処理系毎の定義と、何らかの言語拡張がなされているのが普通。

特に、ハード周りとかファイル関連はアーキテクチャやシステム毎の差異が大きいので
標準の言語仕様では定義してない方が多い。

C言語は、PDP + Unix と言うある意味特定環境用の言語として作られたから生い立ちと
して他の言語に比べてそこら辺の定義が比較的されていたんだ。

>>189 の言うキャストなんかも、アーキテクチャが決まっていたから許されていたが、
8086 + DOS みたいにメモリモデルによっては関数へのポインタとデータへのポインタで
ビット幅が違うなんて言う変態的なアーキテクチャだと破綻するので言語仕様からはず
されただけ。

>>189
そういう突込みを避けるために、わざわざ゛>>159 に「標準では」って
言う言葉を入れてあるんだが。

> そんな所を君がごちゃ混ぜに語っている

具体的に指摘よろしく。

>>190
まあ、ちょっと落ち着け。

そういう仕組みを作るのが面倒じゃなくて、単に「ハードに触る」だけで、ファイル作っ
てそれを実行して (必要に応じて結果を) 得るって言うことが面倒だ言ってるんだけど、
理解できてる?

216 :デフォルトの名無しさん:2007/08/25(土) 12:46:57
・変数スコープをなくし、全てグローバルとする。
スコープとはいわば開発者に脳内スタックの確保を一段
強要する機能であり、開発の邪魔である。
変数は全て設計者が関数一覧表とそれに付随する変数一覧表にて管理する。
ローカルだからと適当に変数を作り捨てるようなことをするから
ゴミ変数が増え、バグとなる。

・ポインタの廃止。ポインタは労多くして功少なしの典型機能。
・キーワードを全て大文字化する。小文字は小さく目に悪い。

252 :デフォルトの名無しさん:2008/07/24(木) 01:36:50
>>1
やる気があるなら、予約語を全部排除して、
全部自前で定義できるようにしてくれ。
そういう仕様なら乗ってやる。

303 :デフォルトの名無しさん:2009/06/18(木) 22:48:47
というかOSがかける程度に強力であり、
かつ高尚で可読性に優れたものが書けるならいうことなしだ

そうするとおもいっきりModula-2になるわけだが。

だからあのキモイbegin??end構文を{??}の構文にして、
コンパイラの実装がしやすく、またプログラミング初心者も覚えやすいような
簡潔な文法があればいい。
あとこれは個人的意見だけど、できるだけソースコードは短く書けたほうがいい。
じぶんのキーボードの打ち方が間違ってるのだろうけど、腱鞘炎になりかけたことがあるから。


334 :デフォルトの名無しさん:2009/07/14(火) 20:18:42
個人的な案。
c -> newC
= :=
== = or !!=
!= !=
< < or !>=
<= <= or !>
> > or !<=
>= >= or !<
要は、!に否定と言う意味を持たせるなら演算子そのものも否定できたらどうかな、と。
# !の多重を認め出すと、!!!!!!!!!!=なんて書けてしまうのは実は問題かもしれないw


385 :デフォルトの名無しさん:2009/07/18(土) 18:45:24
コンパイラ屋さんの俺が来ましたよ。
専門は最適化なのでそっちしか興味ないんだけど、簡単なCへのトランスレータくらいだったら作ってみようかな??

401 :デフォルトの名無しさん:2009/07/19(日) 04:25:40
それなら、とりあえず全変数は読み取り専用、書き換え可能な変数はmutable修飾子を付けるという方向にしよう。

403 :303 ◆pFphp4Ej4w :2009/07/19(日) 16:24:49
どうも。やっと模試が終わりました。死んだ…

>>401
なるほど。
それはprivate,public修飾子を残した上で付け加えるということでよいでしょうか?

この他「これがいやだからこうしてほしい」等要望をなんなりと。

それから、取りあえず「新C言語」の名前を決めたいのですが、なんかありませんか?(時期尚早と言うなら取り下げます。)

413 :385:2009/07/19(日) 18:36:40
そんじゃ夜から何か作り始めるよ。
実装言語はバリアントがあるOCamlとかの方が楽だけど誰でも改造しやすいようにJavaとかにしたほうがいいのかな?

>>403
とりあえず名前だけでも決めてくれると嬉しい。

447 :デフォルトの名無しさん:2009/07/20(月) 08:42:20
もうさ、Javaにポインタ付けて
ネイティブに対応させればいいんじゃない?

Javaの良さは、javaDocだと思うけどな

524 :デフォルトの名無しさん:2009/07/24(金) 23:56:47
303が何をしたいのか判らない
つまり提案しようがない
テンプレつーか一度方針をまとめてくれ

526 :デフォルトの名無しさん:2009/07/25(土) 00:14:45
自分が実装できそうな手軽な範囲だと、ヘッダファイルを無くしたいのと、マクロを改良できるならしてみたいです。

まずはCへのトランスレータしか考えてないのでランタイムが必要な機能は無理です。

それから型推論とかですかねー

546 :303 ◆pFphp4Ej4w :2009/07/25(土) 18:28:39
> 好き勝手言ってるだけだから、それらをぜんぶ取り入れたら無法地帯になるよね。

あぁ…それ忘れてた(;´д`)

> そうじゃなくて、周りの意見を聞いたうえで??「さて何を取り入れようか」??を??303??には考えてもらいたい。
> というより今までの流れの中で??「これだけは捨てられない」??ってポイントが、3点くらいはすぐに挙げられると思う。

そうですねぇ…
1.マルチスレッド周りの強化
2.後方参照の導入
3.ヘッダファイルの廃止
4.クラス、テンプレートの導入
ですね。なんか545さんの意見に便乗するようで悪いのですが、これが標準ということでよろしいですか?

600 :デフォルトの名無しさん:2009/08/15(土) 18:54:47
残したいC言語の特徴って何?

602 :303 ◆pFphp4Ej4w :2009/08/15(土) 19:54:07
>>600
重要度の高いものから順に
1.高い移植性
2.OSさえも(アセンブリ言語を一部使用しなければならないにしても)書けてしまうという高い柔軟性
3.高いパフォーマンス性能


664 :デフォルトの名無しさん:2009/09/05(土) 02:03:54
トランスレータでも構文解析の知識はいるだろうに。

666 :デフォルトの名無しさん:2009/09/06(日) 07:26:28
ソースはどこで見れんの?

667 :デフォルトの名無しさん:2009/09/06(日) 07:37:40
俺も以前C言語作ろうとしたんだけど
C言語て記号いろいろ使ってて、作るのめんどくなって途中で投げたんだ
printfと、if,elseまで作った時点でかなりソースが膨らんでてやる気がな・・・・
303がどこまで作れたのか興味深い

668 :303 ◆pFphp4Ej4w :2009/09/06(日) 09:00:21
>>664
まぁそうですが、最適化と実行ファイル生成とかがないだけ楽です。

>>666
http://github.com/385

で385氏がOCamlで書いたものが見れます…と思ったら無くなってますね…
とりあえずソースは手元にあるのでどこかうpろだ紹介してくださればそこにあげます。

>>667
C系の言語って他のプログラミング言語より圧倒的に演算子が多いですからね…

765 :303 ◆pFphp4Ej4w :2009/12/09(水) 11:32:34
すみません、
typedef struct Hoge{
/* ... */
union piyo{
int foo;
char bar;
}u;
}Hoge;

Hoge hogege;
hogege.u.foo = 3;

って感じで共用体をを使う人ってどれくらいいます?

766 :デフォルトの名無しさん:2009/12/09(水) 11:35:53
>>765
unionは普通そういう使い方はしない。
構造体内でバイト列の読み替えをするのに定義することが多い。

union piyo {
int foo;
char bar[4];
short poo[2];
};

といった感じ。

767 :303 ◆pFphp4Ej4w :2009/12/09(水) 11:44:40
>>766
確かにそういう使い方もありますわな。(完璧に処理系依存で、ほめられた使い方じゃないですが)

…で今回聞きたいのはそういうことではなくて、「構造体の中で共用体を宣言してしまう」人がいるか聞いたのですが…


http://hibari.2ch.net/test/read.cgi/tech/1185010023/l50人気ブログランキングへ

学ばないブログ
忍者AdMax
記事検索
最新コメント
QRコード
QRコード
  • ライブドアブログ