5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C言語なら俺に聞け(入門編)Part 62

1 :デフォルトの名無しさん:2010/03/25(木) 20:48:54 ?S★(518000)
C言語の*入門者*向け解説スレッドです。
★前スレ
C言語なら俺に聞け(入門編)Part 61
http://pc12.2ch.net/test/read.cgi/tech/1267799238/
★過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★初心者、初級者の方は他の質問スレのほうが良いかもしれません。
例えば
【初心者歓迎】C/C++室 Ver.72【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1267775473/
とか
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 135代目
http://pc12.2ch.net/test/read.cgi/tech/1269438098/
★C++言語についてはなるべく聞かないでください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

2 :デフォルトの名無しさん:2010/03/25(木) 20:51:20
>>1乙void main

3 :デフォルトの名無しさん:2010/03/25(木) 20:55:43
>>1
void main() (爆笑)

4 :デフォルトの名無しさん:2010/03/25(木) 21:28:53
alloca()したあと、realloc()ってしてもいいの?

5 :デフォルトの名無しさん:2010/03/25(木) 21:29:55
別機構だから無理だろ

6 :デフォルトの名無しさん:2010/03/25(木) 21:34:19
そうか。残念だ。

7 :デフォルトの名無しさん:2010/03/26(金) 01:31:01
y

8 :デフォルトの名無しさん:2010/03/26(金) 01:43:10
n

9 :デフォルトの名無しさん:2010/03/26(金) 01:48:13
プロセス戻り値が実際現場ではとてもじゃないが
レガシーな慣習だって理由ってわかる人居る?

10 :デフォルトの名無しさん:2010/03/26(金) 02:38:39
日本語

11 :デフォルトの名無しさん:2010/03/26(金) 03:05:50
日本人

12 :デフォルトの名無しさん:2010/03/26(金) 03:27:30
http://www.google.co.jp/search?q=process+%22exit+status%22+legacy
わかりませんね。

13 :デフォルトの名無しさん:2010/03/26(金) 03:55:05
いませんね

14 :デフォルトの名無しさん:2010/03/26(金) 04:53:01
せやな

15 :デフォルトの名無しさん:2010/03/26(金) 07:50:50
void先輩はせっかくスレがかわったんだから、恥の上塗りは止めればいいのに

16 :デフォルトの名無しさん:2010/03/26(金) 10:43:07
レガシーな慣習とする文化圏に出くわしたことがないのでわかりませんな

17 :デフォルトの名無しさん:2010/03/26(金) 11:04:33
俺自身がレガシーな環境に閉じこもってるってことか orz

18 :デフォルトの名無しさん:2010/03/26(金) 17:23:56
他のスレでも void main は避難されてるようだね

19 :デフォルトの名無しさん:2010/03/26(金) 17:30:55
void mainはJavaだろ
Cはint main
但し親プロセスに返したexit codeは殆どの場合無視される。
数多くの子プロセス達が大量に製造された際に
exit codeの意味がプロセス毎に勝手に定められてしまった
ので、親プロセスがそれを記憶、管理して処理することなど
最早不可能(そのロジックのほうが子プロセスのロジックよ
り遥かに大きくなってしまうだろうから)

20 :デフォルトの名無しさん:2010/03/26(金) 17:36:27
>>19
基本的に正常終了は 0 を返し
それ以外は 1〜255 のいずれかを返す
ってのが作法

make だってプロセスの戻り値によって
途中で止まったりしてるんだよ

21 :デフォルトの名無しさん:2010/03/26(金) 17:43:48
正常/異常と簡単に判別できるような単純なロジックの
アプリではそれも良いかもしれないが、そうとも限らな
い領域までカバーせざるを得なくなって久しいじゃね?

22 :デフォルトの名無しさん:2010/03/26(金) 17:46:08
単純なロジックのアプリを組み合わせて使う文化があるから、終了ステータスは大事なんだ

23 :デフォルトの名無しさん:2010/03/26(金) 17:48:18
古き良き時代はそうだった

24 :デフォルトの名無しさん:2010/03/26(金) 17:49:43
>>21
そんときは別の手段でやればいい。
重要なのは、成功は0異常は0以外という大前提があるから
そこから逸脱すんなよという話。

25 :デフォルトの名無しさん:2010/03/26(金) 17:54:26
こうして労使双方の主張は平行線のまま
仕様だけが硬直化し時代の要請とズレて
いったそのバッチはやがて使われなくな
りソースもろともrm -fな運命に....

26 :デフォルトの名無しさん:2010/03/26(金) 18:08:37
>正常/異常と簡単に判別できるような単純なロジック

だから255通りも返せるようにしてるんじゃん
つかむかしから単純に正否だけ返せば言い時代なんてないって
むりから昔の仕様としたいらしいけど

(かなり昔からあるコマンドだっていろいろ返すじゃん)

27 :デフォルトの名無しさん:2010/03/26(金) 18:09:38
>>20
いつの時代だよ、そんなことしてたら並列してコンパイルできないじゃん。

28 :デフォルトの名無しさん:2010/03/26(金) 18:10:36
>>27
2010年の話だよばか

29 :デフォルトの名無しさん:2010/03/26(金) 18:14:26
>>28
レガシーな環境が好きなんだな。
今の開発環境では、コンパイルとかリンクごとに main の戻り値なんかみてないからw

30 :デフォルトの名無しさん:2010/03/26(金) 18:14:49
>>23
良いと思ってるならなんでそういう使い方をしないんだ?

31 :デフォルトの名無しさん:2010/03/26(金) 18:15:02
256通り表せるといっても、その数値に明確な約束があるわけじゃない。
ほとんどの場合は0または非0で判断している。
意味不明なマジック埋め込まないでくれよまったく。

32 :デフォルトの名無しさん:2010/03/26(金) 18:15:29
>>29
確認したいが、そのmainの戻り値というのはどのmainを指している?

33 :デフォルトの名無しさん:2010/03/26(金) 18:15:41
あ、開発環境とかいってもわからないか。

34 :デフォルトの名無しさん:2010/03/26(金) 18:17:12
>>32
レガシーな環境で、例えばOSがDOSだったら cc.exe とか link.exe とかのリターンコードでしょ。

35 :デフォルトの名無しさん:2010/03/26(金) 18:18:43
それらのプログラムはvoid mainなのかい?

36 :http://pc12.2ch.net/test/read.cgi/tech/1267799238/816:2010/03/26(金) 18:29:04
void main() (爆笑)

37 :デフォルトの名無しさん:2010/03/26(金) 18:30:18
>>34
cc.exe(爆笑)

38 :デフォルトの名無しさん:2010/03/26(金) 18:32:25
もうやめようぜ、ここまでの流れ見て、それでもvoid使うやついないって
(もちろん一人でがんばってる彼も含めて)

おまえもさ、あきらめたら?一言ごめんって言えばいいじゃん らくになるぞ
もしくは、もうこないとか
なんでそんな不利な戦いを続けるの?

こんどは無理から古いやり方ってことに持っていく作戦らしいけど
使い方が明確に決まってないの当たり前じゃん
個々のアプリで自由に決めて使えなくてどうすんの?
Windowsで言うところのWM_USERみたいなもんなんだけど

アプリによって返したいものは違うじゃん

な、お前の努力は評価するから、もう謝っちゃえよ

39 :デフォルトの名無しさん:2010/03/26(金) 18:32:41
>>35
OSがDOSの場合なら昔は.exe しかなかったが、
Windows 環境では .dll で実行モジュールを提供することもできる。
そのモジュールからの戻りが1バイトの数値に制限されることはない。
.exe でもメッセージでやり取りできる。他にも方法が色々ある。

そもそも終了時にのみにしかデータが得られないとか制限ありすぎる。
今は実行中も通信する。昔はそういう要求はなかっただろうけど、今では当たり前のこと。

だから今は終了ステータスなど意味のないことの方が多い。

40 :デフォルトの名無しさん:2010/03/26(金) 18:33:43
>>27
できますよ?

41 :デフォルトの名無しさん:2010/03/26(金) 18:33:56
Q:256個の状態を返すアプリを8つ組み合わせました
呼び出し側は何通りの状態を判別して管理しなければな
らないでしょうか?

A:
(2^8)^8=2^64=18446744073709551616通り
で〜すw

42 :デフォルトの名無しさん:2010/03/26(金) 18:39:09
>>41
何が言いたいの?

43 :デフォルトの名無しさん:2010/03/26(金) 18:39:36
>>39


44 :デフォルトの名無しさん:2010/03/26(金) 18:42:13
>レガシーな環境で、例えばOSがDOSだったら cc.exe とか link.exe とかのリターンコードでしょ。


45 :デフォルトの名無しさん:2010/03/26(金) 18:42:16
>>41
もしそれが>>22に対するレスなら、お前は馬鹿ってことになる

46 :デフォルトの名無しさん:2010/03/26(金) 18:42:32
>>40
そもそも make のルールに表現できないんだよ。
make ファイルに記述できないことが make できるはずがないだろ。

47 :デフォルトの名無しさん:2010/03/26(金) 18:42:36
>>39
あなたにとっては無駄に見えるかも知れないけど
私にとってはとても大切な物なの

48 :デフォルトの名無しさん:2010/03/26(金) 18:44:09
>>46
-j オプション知ってる
互いに依存していなければ同時にコンパイルできるんだよ

makefile を適切に書ければの話だがw

49 :デフォルトの名無しさん:2010/03/26(金) 18:44:41
終了ステータスを疎かにしたり全角英字も見えない奴って窓プログラマだろ(笑)


50 :http://pc12.2ch.net/test/read.cgi/tech/1267799238/816:2010/03/26(金) 18:47:11
>>39
お説のとおりではあるが、だからといって void main() が許されるわけではない。
main() のプロトタイプは、main() を呼ぶスタートアップがどういう前提でつくられるのかに依存する。
void main() を前提としているスタートアップであれば、そう書くべきだが、そんな処理系は寡聞にして知らない。
もう一度繰り返すが、main()の返り値が実際に利用されているかどうかは、void main() が許容されるかどうかとなんら関係がない。

51 :デフォルトの名無しさん:2010/03/26(金) 18:49:15
>そもそも終了時にのみにしかデータが得られないとか制限ありすぎる。

終了時にしか値を取れないわけじゃないんだけどな、パイプとかいろいろあるし
終了時に値をとるものについての話なんだけどな
dll的なものもあるしね(こいつぜんぜん何も知らんのな)

そういうことと別にして、終了時のステータスをとる場合もあるんだからintにしようぜって話なのにな

52 :デフォルトの名無しさん:2010/03/26(金) 18:50:21
>>51
dll

53 :デフォルトの名無しさん:2010/03/26(金) 18:56:14
>OSがDOSの場合なら昔は.exe しかなかったが

このせりふからもわかるように、こいつ年齢が若いか無知だ、もしかしたら学生とかだろうから
もうほっておこうぜ
彼自身すごい勉強になったろうし

54 :デフォルトの名無しさん:2010/03/26(金) 18:59:43
>>51
>終了時に値をとるものについての話なんだけどな

だから、取れる場合もあるってことでしかない。取れる場合はとったらいいんだよ。
caller と calleeで仕様を決めてる場合には成り立つんだからやればいいじゃん。

けど今の世の中にはそうでない caller も callee が溢れかえってる。
そんな状況で int にしたところで何の意味もない。

両者で仕様の打ち合わせもしてないような callee のプログラムで int にする意味はない。

それ以前に callee として稼働するプログラムだと決めつけるのもおかしい。

55 :デフォルトの名無しさん:2010/03/26(金) 19:00:27
DOSの場合はどんなファイルでも.comにリネームして
コマンドラインから打ち込もうなら問答無用で即時実行
してしまい大抵は暴走(要リセットボタン)

56 :デフォルトの名無しさん:2010/03/26(金) 19:02:44
>>53
最初にCのプログラを組んだのはCP/Mですよ。これは趣味だけどね。
その後は商用で Unix で DOS、今は Win がメインで Linux もたまに。

57 :デフォルトの名無しさん:2010/03/26(金) 19:04:21
>>54

もちろんプログラムによっては、使わないのなら意味がないさ
だからといって、わざわざvoidにして良いということではないって話じゃん

どんな場合でもvoidは意味がないのだから、
intにして0でも返すって習慣が正しい

58 :デフォルトの名無しさん:2010/03/26(金) 19:06:02
>>54
callee


59 :デフォルトの名無しさん:2010/03/26(金) 19:12:52
>>57
値を返すという意思があって、そのコードを書くのは当然。
けど、その意志もないのに、値を返すコードを書くのはおかしい。

戻り値でなく main の引数はどうなの?
void で受けたら引数の処理をしないという明確な意思表示なるだろ。

どういう意味で省略してるの?矛盾してないか?

60 :デフォルトの名無しさん:2010/03/26(金) 19:13:29
日本ではCP/Mはワープロ専用機とかではあったけど
趣味の人は普通
98でN88BASICやアセンブラ、そしてDOS
このころからやっとCって流れだよな

大学でCやったにしてもBSDとかだろうし
あるいはAPPLEでThinkCとか

きっとIBMのXTを趣味でもってたとかだろうなぁ
理由はわからんけど


61 :デフォルトの名無しさん:2010/03/26(金) 19:14:04
>>58
そうだろな、これはプログラマにしか通じないからwwwwww

62 :デフォルトの名無しさん:2010/03/26(金) 19:14:45
>>39
その意味での通信ってそれこそ昔からあるだろ

63 :デフォルトの名無しさん:2010/03/26(金) 19:15:33
>>61
頭が腐ってるのか目が腐ってるのかどっちだ?

64 :デフォルトの名無しさん:2010/03/26(金) 19:16:26
>>63
その意味でのcalleeの使い方はおかしいっていってる?

65 :デフォルトの名無しさん:2010/03/26(金) 19:16:30
>>59
値を返す意思が無ければ常に 0 を返せばいいんだよ
途中終了でも exit(0); で抜ければいい

不定値を返すようなマネはすべきではない

66 :デフォルトの名無しさん:2010/03/26(金) 19:17:10
>>64
目が悪いんだな

67 :デフォルトの名無しさん:2010/03/26(金) 19:17:24
>>65
そこはぜひともEXIT_SUCCESSでお願いしたいが、0でいいです。

68 :デフォルトの名無しさん:2010/03/26(金) 19:17:44
>>59

してないよ戻り値にvoidにして値を返さないと意思表示することは意味のないことだから
だってOSが親になんか返すし

引数とは違う引数でvoidにするのはプログラムないぶで使わないという意思表示でしょ

引数と同じように戻り値を使わないと明示的に言いたいなら、親プログラムのほうで戻り値を見ないという動作が等価でしょ

69 :デフォルトの名無しさん:2010/03/26(金) 19:18:48
>>66
callerのtypoだと思うのは今までの流れでありえないと思うし、、
何がいいたいか分からんのではっきり書いてくれないか?

70 :デフォルトの名無しさん:2010/03/26(金) 19:19:15
>>59
>けど、その意志もないのに、値を返すコードを書くのはおかしい。
これは修正する。

けど、その意志もないのに、値を返すコードを書くのはおかしい。という考え方もありだろ。

71 :http://pc12.2ch.net/test/read.cgi/tech/1267799238/816:2010/03/26(金) 19:19:50
>>59
値を返す必要があるかどうかと、void main()が許容されるかどうかとは、関係がない。
void main() が許容されるかどうかは、main() を呼び出すスタートアップがどのような前提でつくられているかにかかっている。
値を返す必要がないからといって、main() リンクされるスタートアップの前提とことなる宣言をするのはおかしいのではないか。
そして void main() を前提とするスタートアップをもつ処理系は寡聞にしてしらない。

72 :デフォルトの名無しさん:2010/03/26(金) 19:19:58
まだvoid mainの話題なの?
makeで困るからやめて欲しいんだけど

73 :デフォルトの名無しさん:2010/03/26(金) 19:20:13
>>69
よく見ろよ
見るだけでいい

74 :デフォルトの名無しさん:2010/03/26(金) 19:21:10
なあ、頼むからもう止めようぜ 何の意味があんだよこの議論
彼の教育?ディベートの練習?



75 :デフォルトの名無しさん:2010/03/26(金) 19:22:01
議論され尽くされたと思われる話題を再度議論するのはやはり意味があるのだ派が出てくる

76 :デフォルトの名無しさん:2010/03/26(金) 19:22:07
>けど、その意志もないのに、値を返すコードを書くのはおかしい。という考え方もありだろ。

お前一人だぞ世界中で 本当に本当にそうなんだぞ

77 :デフォルトの名無しさん:2010/03/26(金) 19:22:52
レガシーレガシー言うけど
そういう人にとってはそもそもmain()を使ってる時点でレガシーだろ
Windowsだと基本的にWinMainが使われるからmainを使うケース自体がレガシー

78 :デフォルトの名無しさん:2010/03/26(金) 19:22:53
>>69
caller と callee だよ。
直訳すると呼び出し側と呼び出され側。

これは流石に俺でもわかる。一応プログラマだからw

79 :デフォルトの名無しさん:2010/03/26(金) 19:23:40
void main() しちゃいけないのか?

80 :デフォルトの名無しさん:2010/03/26(金) 19:26:04
>>34
cc.exe

>>51
dll

>>54
callee

お前ら本当にプログラマなのか?
信じらんねぇくらいのヘボだな

81 :デフォルトの名無しさん:2010/03/26(金) 19:28:05
>>79

絶対にいけなくはない、ただ笑われたり馬鹿にされることがある
そもそも意味がない行為なので、あえてvoidを選ぶ理由はないので
呪文だと思って盲目的にintにしておくほうが人生ではベター


>>80

つまんねこと文句つけんなよ、携帯の人とかもいるんだろ
議論で、あきらかな言い間違いを指摘しても議論は進まない

82 :デフォルトの名無しさん:2010/03/26(金) 19:29:16
つまんね間違いするな

83 :デフォルトの名無しさん:2010/03/26(金) 19:29:30
>>68
引数も戻り値も void と宣言すれば、その関数の意思表示ができるんだよ。

仮に常に戻り値が void でいいものを全部 int で宣言して、return 0; してる奴がいたらどう思う?

値を返す必要があるときにだけ、返せ!て言いたくなるだろ。それと同じ。

84 :デフォルトの名無しさん:2010/03/26(金) 19:29:53
>>81
単語単位ならギリギリ許せるけど文字単位で混在するなんて
プログラマとしてダサすぎるだろ(笑)

85 :デフォルトの名無しさん:2010/03/26(金) 19:32:02
>>80
すまん、calleeだけは区別ができなかった。2ch見る時はAAのためにプロポーショナル使うんだ。。。

86 :デフォルトの名無しさん:2010/03/26(金) 19:32:04
>引数も戻り値も void と宣言すれば、その関数の意思表示ができるんだよ

引数は受け取り側での意思表示だろ
だから親プログラムで意思表示すべき

>仮に常に戻り値が void でいいものを全部 int で宣言して、return 0; してる奴がいたらどう思う?

関数と違うのはプロセスは
返すつもりはないという意思表示はOSが勝手に返すので意味がない

87 :デフォルトの名無しさん:2010/03/26(金) 19:32:10
複数のアプリに分解してシステムを作らざるを得ない←出発点
当初は0(正常系)1(異常系)で単純に作れると信じられた←古き良き時代
「そうでもないぜ」というので戻り状態数を中途半端に増やしたら、カオスになって
管理アプリが逃げ出して、管理者が居ないままアプリが通信しあうこと
によって動作する協調動作なアプリの構築になった←昨今

88 :デフォルトの名無しさん:2010/03/26(金) 19:34:46
>当初は0(正常系)1(異常系)で単純に作れると信じられた←古き良き時代

なにいってんの?Cの最初からそういうことはできる
フォートランでもできる
そんな古きよき時代はない

>戻り状態数を中途半端に増やしたら、カオスになって

みんな設計書作ってちゃんとやってる、カオスになんかなるかいな

89 :デフォルトの名無しさん:2010/03/26(金) 19:37:52
逃げた管理者たちは皆そう言う

90 :デフォルトの名無しさん:2010/03/26(金) 19:38:52
http://www.6809.net/tenk/html/cgokai/int_main.htm
議論が意味不明なので初心者の洩れはここ読んできた

91 :デフォルトの名無しさん:2010/03/26(金) 19:39:55
だかっていってvoidにすると解決するんかいなwww

カオスになるかどうかとvoid intと関係ないじゃん

92 :デフォルトの名無しさん:2010/03/26(金) 19:51:25
>>90
ANSI-C の規定に従う(そいう仕様が条件なら)当然 int とすべき。

けど、そうでない場合、処理系、C言語が void を認めているのであれば、
void もありだということ。 DOS では当然認められている。


そもも ANSI に準拠する必要があるのであればMS系のコンパイラは使えないことになる。
lattice や borland もそのはず。(こっちは最近のことは知らんが)

93 :デフォルトの名無しさん:2010/03/26(金) 19:52:53
わざと誤字にするのはやめてくれ
読み辛い

94 :デフォルトの名無しさん:2010/03/26(金) 19:54:05
>>93
ごめんなさい、見直す前にクリックしてしまった。

95 :デフォルトの名無しさん:2010/03/26(金) 19:55:59
>DOS では当然認められている。

認められてなくね?明確にダメとはなっていないってだけで
この両者は違うよ

96 :デフォルトの名無しさん:2010/03/26(金) 19:56:48
>>92
レスthx。実際にいろいろやってみた。gcc

/* void main (void), void main() */
hello.c: In function 'main':
hello.c:3: warning: return type of 'main' is not 'int'

/* main (), main (void), int main(), int main(void) */
警告無し

97 :デフォルトの名無しさん:2010/03/26(金) 19:58:22
単なる警告にすぎない

98 :デフォルトの名無しさん:2010/03/26(金) 20:02:56
それ、戻り値を省略するとintになってるだけだと思う

99 :デフォルトの名無しさん:2010/03/26(金) 20:03:59
>>98
だねー

100 :デフォルトの名無しさん:2010/03/26(金) 20:04:31
でも main() の型は int だから void 使うなゴルァって事でしょ?


101 :デフォルトの名無しさん:2010/03/26(金) 20:05:30
>>97
コンパイルオプションきつくしたらエラーになる

102 :デフォルトの名無しさん:2010/03/26(金) 20:06:14
>>100

そうそう
それを「単なる警告にすぎない」とか言うのは馬鹿のすること
おまえは湾岸戦争前のサダムフセインかいって思う

103 :デフォルトの名無しさん:2010/03/26(金) 20:07:49
>>100
警告の出るプログラム、書いた覚えはないかい?そのとき必ず間違ったプログラム書いてたかい?

104 :デフォルトの名無しさん:2010/03/26(金) 20:10:02
>>102
thx

>>103
>>96のhello.cが初めて書いたプログラムっす、先輩!


105 :デフォルトの名無しさん:2010/03/26(金) 20:11:20
>>95
しかるところに値が書いてあれば、リターンコードとして取得されるといことが決まっているだけ。
その値の規定はないし、値をセットしなければいけないという規定もない。

>>96
警告出すコンパイラならウザイから int で宣言すればいいと思うけど。


そうじゃない環境のところで void で宣言するのが「あり」か「ない」かだから。

106 :デフォルトの名無しさん:2010/03/26(金) 20:11:38
>>103
-ansi -pedantic -Wall にした上で警告は全て潰してるぜ
警告だから大丈夫って姿勢は罪

107 :デフォルトの名無しさん:2010/03/26(金) 20:12:50
でもこれは明らかに間違っているから出てる警告だよな

間違っていないで警告が出ることがあるからといって
この警告もそうと言う事にはならないじゃん

こいつ本当にプログラマーか?
条件分岐とかで穴とか作りやすい人だろうな



108 :デフォルトの名無しさん:2010/03/26(金) 20:13:06
甘いな-Wall -ansi -pedantic -std=c89にした上で警告全て潰しているよ

109 :デフォルトの名無しさん:2010/03/26(金) 20:13:23
>そうじゃない環境のところで void で宣言するのが「あり」か「ない」かだから。
なるほど、これが議論の争点だったわけっすね。

110 :デフォルトの名無しさん:2010/03/26(金) 20:14:09
コンパイラが吐くメッセージは必要最小限のみ
そうじゃないとメッセージログがいくらあっても足りないからね
intじゃないよと表示されていたとして、間違っているとはかぎらない
実際間違ってないのだしね

111 :デフォルトの名無しさん:2010/03/26(金) 20:14:18
今確認したら-pedantic-errorsにしていた

112 :デフォルトの名無しさん:2010/03/26(金) 20:15:32
>>98
それなら、
main(void) と定義しても、argc と argv がスタックに積まれた上で、
main 関数が呼び出されてる。
それを引数で受けないのもおかしいということになる。

113 :デフォルトの名無しさん:2010/03/26(金) 20:16:38
すなわち、void mainというのは仕様で間違ってる
って事

114 :デフォルトの名無しさん:2010/03/26(金) 20:17:58
>そうじゃない環境のところで void で宣言するのが「あり」か「ない」かだから。

もともとはcodepadだっけ?あれgccだよな
じゃあやっぱintが正解、笑われて当然ってことでFA?



115 :デフォルトの名無しさん:2010/03/26(金) 20:19:41
>>112

ちがーよ、省略した戻り値はintってC言語的に決まってんだよ
引数とは違う、VCもそうだからやってみろ


116 :デフォルトの名無しさん:2010/03/26(金) 20:20:29
>>83
値を返す必要があるかどうかと、void main()が許容されるかどうかとは、関係がない。
void main() が許容されるかどうかは、main() を呼び出すスタートアップがどのような前提でつくられているかにかかっている。
値を返す必要がないからといって、main() リンクされるスタートアップの前提とことなる宣言をするのはおかしいのではないか。
そして void main() を前提とするスタートアップをもつ処理系は寡聞にしてしらない。


117 :デフォルトの名無しさん:2010/03/26(金) 20:21:32
グダグダ言ってる奴らは回線切ってオレ様仕様mainstartupでも作ってろや

118 :デフォルトの名無しさん:2010/03/26(金) 20:23:32
>void main() が許容されるかどうかは、main() を呼び出すスタートアップがどのような前提で

intかvoidかのいずれかって仕様できまってるんじゃなかったっけ?

119 :デフォルトの名無しさん:2010/03/26(金) 20:24:14
>>113
あ、そう考えるんだったら。

警告のでない環境ならOKということだね。その言語が認めてるんだから。
そういう環境なら void main() は問題ない。MS系はOK。Unix系もOK。

環境によっては OK 何だから、何が何でも int しないといけないと言うのは間違い。
そういうこと。

はい、終了。さいなら。

120 :デフォルトの名無しさん:2010/03/26(金) 20:27:39
何が何でも int しないといけないと言うこともないし
void main() は問題もないけど

あえてvoidをつかう理由はないし
馬鹿っぽいからintにしましょうって話じゃん


121 :デフォルトの名無しさん:2010/03/26(金) 20:29:21
何同じこと延々と話してんだこいつらは…マジキチか?

122 :デフォルトの名無しさん:2010/03/26(金) 20:29:45
int信者はそれすら許さない
voidは問題だと言う

123 :デフォルトの名無しさん:2010/03/26(金) 20:29:55
>>105
void main() が許容されるかどうかは、main() を呼び出すスタートアップがどのような前提でつくられているかにかかっている。
値を返す必要がないからといって、main() とリンクされるスタートアップの前提とことなる宣言をするのはおかしいのではないか。
関数をコールする場合に呼び出し側と呼び出され側で返り値の型はあわせないといけないというのに、main() だけ別扱いにするのも変な話


124 :デフォルトの名無しさん:2010/03/26(金) 20:30:38
>void main() が許容されるかどうかは、main() を呼び出すスタートアップがどのような前提で

intかvoidかのいずれかって仕様できまってるんじゃなかったっけ?

125 :デフォルトの名無しさん:2010/03/26(金) 20:32:47
たとえて言うなら
チンポ出して歩くほど悪いことではない
でもシャツを裏返しくらいのかっこ悪さはある
(もしかしたらそういうファッションの国もあるかも 知らないけど)
別に違法ではないし使い方も間違っている、が本人がきにしないなら、すれば

って事だよね

int信者だってww 
絶対許さないとか誰も言ってないじゃん 使い道あるよとか、仕様ではダメななんよとかその程度で

126 :デフォルトの名無しさん:2010/03/26(金) 20:34:15
そうでもない人もいるようだが

127 :デフォルトの名無しさん:2010/03/26(金) 20:34:21
>>124
事実上レジスター渡しであるのでどっちでも呼び出し時点でのスタックの状態はかわらない、ということはある。
ただし、値を返すから int main(), 値を返さないから void main() とするのは、筋としてとおらず、c 言語のセンスのない発言だと思う。

128 :デフォルトの名無しさん:2010/03/26(金) 20:35:05
君の意見なんてどうでもいいんだよ?

129 :デフォルトの名無しさん:2010/03/26(金) 20:35:51
>>125
たとえが意味不明。呼び出し側の仮定と異なる宣言を呼び出され側でしていいのか?というところを問うているだけ。

130 :デフォルトの名無しさん:2010/03/26(金) 20:36:09
>>111
俺もそうだった

>>108
-ansi と -std=c89 は同じ意味では?

131 :デフォルトの名無しさん:2010/03/26(金) 20:39:12
>>128
そもそも規格 JIS X3010:2003 5.1.2.2.1 ではどうなっているのか、それを踏まえたうえでの発言のつもりではあるが、なにか?

132 :デフォルトの名無しさん:2010/03/26(金) 20:41:01
センスと規格、どうつながんの?

133 :デフォルトの名無しさん:2010/03/26(金) 20:41:49
>たとえが意味不明。呼び出し側の仮定と異なる宣言を呼び出され側でしていいのか

わかれよ、シャツのメーカーや社会通念での仮定と異なる着方をしていいのかって比喩だよ

134 :デフォルトの名無しさん:2010/03/26(金) 20:42:18
JISの規格をつくった奴はセンスが無いって事ですが?

135 :デフォルトの名無しさん:2010/03/26(金) 20:47:33
>>132
main() 以外の extern な関数呼び出しでは呼び出し側と呼び出され側で返り値の型をあわせるというのに 「main() のときだけあわせなくてもよい」と主張するのは首尾一貫性がない。
規格があってもそれを理解できないのは、コンピュータ言語に対するセンスがないとしかいいようがない。

136 :デフォルトの名無しさん:2010/03/26(金) 20:50:20
だからさー、おまえらが言ってるのはホスト環境の話だろ?
フリースタンディングではvoid main()と書け、とマニュアルにあったりするんだよ。少ないけどな。
処理系に依存っていう超簡単な結論がわかってるのに、何で無限ループさせんの?

137 :デフォルトの名無しさん:2010/03/26(金) 20:52:09
>>135
>規格があってもそれを理解できないのは、コンピュータ言語に対するセンスがないとしかいいようがない。

自問自答www

138 :デフォルトの名無しさん:2010/03/26(金) 20:53:19
>>136
ほう、そんな環境はなにか後学のために知りたいもの。
で、http://pc12.2ch.net/test/read.cgi/tech/1267799238/815 がその上で走るんですかね?

139 :デフォルトの名無しさん:2010/03/26(金) 21:01:51
>>138
おいおいバグだらけじゃねーか
コンパイルできないぞCでもC++でも

140 :デフォルトの名無しさん:2010/03/26(金) 21:05:05
>>139
入門スレなんだから、別にいいだろ。
前スレの815をディスるのはやめよう。

141 :デフォルトの名無しさん:2010/03/26(金) 21:05:22
>>136
その環境はつまりANSI-Cに準拠していないというだけだよな?
それは今相手にしていないと思う

142 :デフォルトの名無しさん:2010/03/26(金) 21:06:03
どこが違反してんの?

143 :デフォルトの名無しさん:2010/03/26(金) 21:07:30
void main()を強制するってことはint main(void)がだめなんだろ?

144 :デフォルトの名無しさん:2010/03/26(金) 21:09:19
でもさ最初のころの

intが仕様である証拠もってこいや
プロセスの戻り値は使わないほうが(精神衛生上)良い
0か1に決まってるからOK 
Windowsでは意味なし 
戻り値は使えたり使えなかったりする
古い人のやりかた
そんなのを使ったらプログラムがカオスになる
値を返さない場合の明示としてあり
警告だけだからOK
俺の知ってる環境ではマニュアルでvoidって書けって言ってる

全部否定されて、だいぶ戦線が後退してるじゃん
最後のは脳内環境ではvoid推奨って事でしょ 泣き入ってるじゃん
もうゆるしてやれば?

145 :デフォルトの名無しさん:2010/03/26(金) 21:14:49
>>143
ダメだったら違反、じゃないんだけど?
いずれか、なんだから。

146 :デフォルトの名無しさん:2010/03/26(金) 21:15:07
>>141
「処理系依存のmain()」はC規格に含まれている。ただしC99から。
それ以前はvoid main()は未定義とされている。

147 :デフォルトの名無しさん:2010/03/26(金) 21:15:17
EXIT_SUCCESSかEXIT_FAILUREのどちらかを使うとか

148 :デフォルトの名無しさん:2010/03/26(金) 21:18:17
int main()以外認めん、と言ってるヤツはC89しか知らない頭ガチガチのオヤジだろう。
あるいは日本語を正しく解釈できないか。

149 :デフォルトの名無しさん:2010/03/26(金) 21:20:45
書き直して消せる警告は極力消してたほうが精神衛生上よくね?


150 :デフォルトの名無しさん:2010/03/26(金) 21:20:47
>>144
どっちの味方だよ!

151 :デフォルトの名無しさん:2010/03/26(金) 21:22:11
センスだの精神論だの
こんどはオカルト持ち出すか?voidが出たらレンズ豆とキャベツと豚のスープでも食うのか?

152 :デフォルトの名無しさん:2010/03/26(金) 21:26:33
少なくとも
codepadでvoid mainを書くやつを擁護できないってのは両軍ともOK?

153 :デフォルトの名無しさん:2010/03/26(金) 21:27:25
春なのに近頃冷えるからねぇ
熱いスープは欲しいな

154 :デフォルトの名無しさん:2010/03/26(金) 21:28:13
あのソースを叩いてるのはvoidもintも関係無いべ

155 :デフォルトの名無しさん:2010/03/26(金) 21:30:33
>>152
mainを呼ぶ側のことなんて気にせず、戻り値の必要がなければvoid mainで問題ないというのがvoid派の意見かと

156 :デフォルトの名無しさん:2010/03/26(金) 21:32:13
必ずfreeと必ずint mainは同じ人?

157 :デフォルトの名無しさん:2010/03/26(金) 21:33:29
void main にするべき という意見には反対

158 :デフォルトの名無しさん:2010/03/26(金) 21:34:43
voidにするべき、って人はいたっけ?問題ないとは思うけど

159 :デフォルトの名無しさん:2010/03/26(金) 21:36:51
>>156

void派一人(いても2人)
int派はいっぱいいると思う 一回だけ書いてもう見てるだけどか

160 :デフォルトの名無しさん:2010/03/26(金) 21:37:46
よくわからんのだけどさ
そもそも初心者向けの解説本とかWebサイトで
void mainが書かれるようになったのは何でなの?

ざっと流れを読むと
int mainが(基本)正しくて、void mainは環境に依存した極めて特殊な場合なんでしょ

161 :デフォルトの名無しさん:2010/03/26(金) 21:38:38
はたから見ると、int派が一人(いても2人) でvoidでもいいじゃんが多数なんだが

162 :結論:2010/03/26(金) 21:38:41
mainの戻り値はintにして適切な値を返すべきだが、
void mainは別に間違いというわけではない

163 :デフォルトの名無しさん:2010/03/26(金) 21:39:59
PHPのfile関数のように、ファイル全体を読み込んで配列に格納するのはどのように書くのでしょうか?


164 :デフォルトの名無しさん:2010/03/26(金) 21:40:51
>>161

おれint派だけど、俺が書いてる間に結構スレが進む
俺外に4,5人はいると思う

165 :デフォルトの名無しさん:2010/03/26(金) 21:41:00
>>163
今いそがしいからよそで聞け

166 :デフォルトの名無しさん:2010/03/26(金) 21:41:57
>>160
悪い本がでまわったようですね。

167 :デフォルトの名無しさん:2010/03/26(金) 21:42:25
>>163
fopenしてwhileでfgetが簡単だと思う

168 :デフォルトの名無しさん:2010/03/26(金) 21:42:56
>>161
ということにしたいのですね。

169 :デフォルトの名無しさん:2010/03/26(金) 21:44:24
void mainにすればint mainとそれに対するreturnとexitの説明を書かなくてもいいとかなんとか

170 :デフォルトの名無しさん:2010/03/26(金) 21:45:16
>>161

fopenしてfseekして最後まで行って差を調べてサイズ計算して
fseekで先頭まで戻って
サイズ分mallocして、それを配列にキャストして
freadでそのポインタにサイズ分読む

ファイルが小さいならmallocしないでもいいかも配列のサイズ分読むだけで

171 :デフォルトの名無しさん:2010/03/26(金) 21:45:36
>>163
fopen ファイルを開く
fseek ファイルの末尾に移動する
ftell 現在位置が何バイト目か調べる => ファイルサイズ
malloc 領域を確保する
fseek ファイルの先頭に移動する
fread 読み込む
fclose ファイルを閉じる

free 使い終わった領域を解放する

172 :デフォルトの名無しさん:2010/03/26(金) 21:46:30
>>160
void mainが正しい という環境はきわめて特殊だけど
void mainでも困らない という状況はそこそこ多い。

今は大丈夫でもあとで困る ってのもよくあるけどな。

173 :デフォルトの名無しさん:2010/03/26(金) 21:47:40
どうせWinMainしか使わないんだから
mainなんかどうでもいいだろ

174 :デフォルトの名無しさん:2010/03/26(金) 21:48:39
それだとPHPのfileとしての役割はもたないのでは

175 :デフォルトの名無しさん:2010/03/26(金) 21:49:23
>>172
int をレジスタ渡しとしていたのなら、int を返り値にしようが、void だろうが呼び出し時点のスタック構造はかわらないし。

176 :デフォルトの名無しさん:2010/03/26(金) 21:51:53
ここにいる人の多くはPHP(笑)とか馬鹿にして
PHPのfileの動作を知らんのであった


177 :デフォルトの名無しさん:2010/03/26(金) 21:52:42
一行ずつ分割するみたいね

178 :デフォルトの名無しさん:2010/03/26(金) 21:52:54
てきとーすぐるwwww

179 :デフォルトの名無しさん:2010/03/26(金) 21:53:56
バイナリモードなら合ってるけど
テキストモードだと違う

180 :デフォルトの名無しさん:2010/03/26(金) 21:54:46
テキストモードでも間違ってんよwww

181 :デフォルトの名無しさん:2010/03/26(金) 21:55:10
>>180
おちつけ

182 :デフォルトの名無しさん:2010/03/26(金) 21:56:05
書き込んで逆に気づいたwっをちつけwww

183 :デフォルトの名無しさん:2010/03/26(金) 21:58:46
どおりでWindows出身のプログラマは使えない奴が多い訳だ
何で頑なにvoid mainを肯定しようとするのか?

流れを見てると別にvoid mainを使いたきゃ使ってもいいが
公然と肯定しようとする姿勢がダメだって言われてるんじゃねぇの?
初心者にも悪影響を及ぼしかねないし。

184 :デフォルトの名無しさん:2010/03/26(金) 21:59:51
だめじゃね?これintの場合とか文字列の場合とかfloatとか別々に作らんと

whileで回してfgetsでバッファに取り込んで
改行コードしだいで
buf[strlen(buf)-1]='\0+; みたいな事やって改行つぶして
文字列ならstrcpy 数字なら直で配列に代入とかやらないと

185 :デフォルトの名無しさん:2010/03/26(金) 22:00:52
178,180,182と立て続けにあぼーんが続いてる
AAか俺に嫌われてるワードがあるに違いない!

186 :デフォルトの名無しさん:2010/03/26(金) 22:00:58
buf[strlen(buf)-1]='\0+;
  ↓
buf[strlen(buf)-1]='\0;

なんか+がくっついた 意味はないよ

187 :デフォルトの名無しさん:2010/03/26(金) 22:03:59
今回の場合はvoid mainを馬鹿にするint main信者がきっかけ。
それに、int派の言い分も、void mainを使いたきゃ使ってもいいというのは違う。

void mainが仕様として許されている環境であれば別に使ってもいいよ?程度かなー。

188 :デフォルトの名無しさん:2010/03/26(金) 22:05:55
>>186
くっついたんじゃなくて'が変身したんじゃないの?あと、セミコロンが全角だから誰かが怒るかもしれない

189 :デフォルトの名無しさん:2010/03/26(金) 22:07:00
>>187

あとvoidの人が、ああいえばこういうでゴネまくったのも原因じゃね

190 :デフォルトの名無しさん:2010/03/26(金) 22:08:24
>>187

あとintの人が、ああいえばこういうでゴネまくったのも原因じゃね

191 :デフォルトの名無しさん:2010/03/26(金) 22:09:42
>>188

あ、本当だね 
こういうのC++で書くとCよりラクチンだよな、とか言うとまた揉めるから具体的には言わないけど
PHPしかしらない人かもしれないから言うけど、C++でも良いなら、そっちのスレに行って聞いたほうが良いと思うよ

192 :デフォルトの名無しさん:2010/03/26(金) 22:11:22
int ****p;
ってどういう用途がありますか?


193 :デフォルトの名無しさん:2010/03/26(金) 22:11:37
void mainで問題ないことが保障されている環境は、int mainのそれと比べて圧倒的に少ないから
int mainの方がより汎用的なコードである、というのがint派の理想系だろうか

194 :デフォルトの名無しさん:2010/03/26(金) 22:15:49
少なくとも俺の見た本ではvoid mainを使っていた!
と卵から孵った雛が最初に見た物を親と思うように
生涯それだけを盲信してしまうのは如何なものかと思いますが。

195 :デフォルトの名無しさん:2010/03/26(金) 22:16:35
>>192

ポインタのポインタのポインタのポインタをいじりたいとか

「どうだ俺ってすげえだろ」って言って
「はいはい」って言われたいときとか

196 :デフォルトの名無しさん:2010/03/26(金) 22:18:31
妄信してるのはint派だってば。今は規格に含まれてるんだから。

197 :デフォルトの名無しさん:2010/03/26(金) 22:21:04
その場合、void mainを-c89でコンパイルすると、それはいまや保障される?

198 :デフォルトの名無しさん:2010/03/26(金) 22:23:08
規格に含まれるって言ったって、そういう環境もあるのでってだけじゃん
そういう場合も仲にはありますよって事でしょ

Unix、Windowsではintなんだし
妄信してたほうがたぶん正解だよなぁ

199 :デフォルトの名無しさん:2010/03/26(金) 22:23:29
保証とは?

200 :デフォルトの名無しさん:2010/03/26(金) 22:26:12
盲信するのが正解なんてことはなかろ
そうするのならvoid mainはなにがあってもだめだと言わないと。

201 :デフォルトの名無しさん:2010/03/26(金) 22:26:24
素直に「オレの知ってる環境以外は認めない」って言えばいいのに。強情だなぁ。

202 :デフォルトの名無しさん:2010/03/26(金) 22:28:38
正解って言うとおかしいけど
たとえば人に教えるときに
「いいからintって書いとけ」って言うのありでしょ

英単語でもさ、すんげえ細かい外人も知らないような意味まで覚えようとしてる人っているじゃん
それみたいにならないように

203 :デフォルトの名無しさん:2010/03/26(金) 22:29:07
>192
擬似的に3次元の配列を動的に確保してその変数を間接参照したいとき
例えば関数に渡すときなど

foo_t
foo(fooo_t fooo)
{
foooo_t ***foooo;
foo_t foo;

foooo = allocate(fooo);
foo = something(&foooo);
return foo;
}

foo_t
something(foooo_t ***const*foooo)
{
(void)*foooo;
return something0();
}

3つまでは、しばしば使うけど、さすがに4つは使ったことが無いわ
本当はconst修飾したいから、できれば1次元で扱いたいことがしばしばある

204 :デフォルトの名無しさん:2010/03/26(金) 22:31:09
>>201
intリターンを認めない環境ってあるの?

205 :815:2010/03/26(金) 22:31:28
どうも、void main() って書いた人本人です。
すみません。なんか荒れてるみたいなんでビックリしました…(・_;こ、こわい…


void main() ですが、書いた理由は「めんどくさかったから」です… あ、モノ投げないで(つ_<
すみません。深い意味なんて何一つないです。むしろ、なにも考えて無いです。ばかなので。

単に「10進から16進に変換する関数がちゃんと計算してくれるかな〜?」って確認する程度の軽い気持ちで、
ソースの一番下に適当に

void main(){printf("%s", 10sin_kara_16sin("65535"));}

っと書いてコンパイルして確認したのを、
「ついでだから16進から10進も…」とか「2進から10進も…」とか「あれ?これ全部同じ式ぢゃない?」とか、
「入力めんどくせぇなぁ〜…」って思ったので「こうすれば入力ラクだなぁ〜」って思いついた書き方を適当に足して…

ってやってったら、いつのまにかちょっとしたおもちゃが出来たので、
「(^_^;あ、こりゃおもしろいかな…?」くらいの軽い気持ちでUPしたんですが、
おもしろがられるどころか、怒られるとわ…(・_; …いや、別の意味でオモシロがられてますがorz …し、しにたいw


すみません、こんどから int main(){return 0;} って書きますから許してください。ごめんなさいでした。


206 :デフォルトの名無しさん:2010/03/26(金) 22:33:22
>>205
あなたのせいでもめてるんじゃない。
void mainを馬鹿にしたint派のせいだよ

207 :デフォルトの名無しさん:2010/03/26(金) 22:33:36
そうそう
危なそうな非武装地域には近づかず
地雷の心配の無いところでフラフラするのが一番いいよね

208 :デフォルトの名無しさん:2010/03/26(金) 22:34:18
ここで「つかお前今までvoid派で必死で書き込んでたやつだろw 相変わらずわかり安すぎww」
とかつこんじゃいけないんだろうな
収束させたいみたいだし

209 :デフォルトの名無しさん:2010/03/26(金) 22:35:31
いつもうるさいのはint派。
int mainに対して、戻り値どうでもいいからvoid mainにしろよwのようなレスはつかない。

210 :デフォルトの名無しさん:2010/03/26(金) 22:38:10
unsigned char main()の環境もあるというのに…

211 :デフォルトの名無しさん:2010/03/26(金) 22:41:54
mainってただの関数名なんだけど
戻り値をどうするかは呼出側の問題でしょ。

212 :デフォルトの名無しさん:2010/03/26(金) 22:43:48
>>211
だからお前は分かっていないといわれるんだ

213 :デフォルトの名無しさん:2010/03/26(金) 22:44:25
>>211
なぜ?

214 :デフォルトの名無しさん:2010/03/26(金) 22:45:24
2ch で void main と書くのは自殺行為

215 :815:2010/03/26(金) 22:45:26
どうかお二人ともケンカしないでください…(ぺこり
こんどから int main() って書きますから〜〜… もぅ、それでいいじゃないですか…(^_^/ぽんぽん


216 :デフォルトの名無しさん:2010/03/26(金) 22:45:34
>>210
それを使うのはちょっと意味合いが・・・

217 :デフォルトの名無しさん:2010/03/26(金) 22:47:18
ここらでfree論争に戻ろうぜ

218 :デフォルトの名無しさん:2010/03/26(金) 22:47:23
815=816の自演だと思ってた

基数変換なんていう基本的なものに目を通す人は
例外なく初心者だから注意した方がいいね
脱したての方達に絡まれる可能性大

void main()の他に
goto、scanf、fscanf、rand()%N
誰の目に触れるか分からないソースは避けた方が無難

219 :デフォルトの名無しさん:2010/03/26(金) 22:48:10
getsもね

220 :デフォルトの名無しさん:2010/03/26(金) 22:48:13
goto、malloc/free、void mainは定期的に盛り上がるね

221 :デフォルトの名無しさん:2010/03/26(金) 22:49:34
rand()%N とgets には何があるの?
後学のために教えて

222 :デフォルトの名無しさん:2010/03/26(金) 22:50:19
乱数のかたよりと、バッファオーバ

223 :デフォルトの名無しさん:2010/03/26(金) 22:51:22
randのLSBには定期性が認められる場合がある
getsはバッファオーバーランの危険性をはらんでおり、この関数を常に悪とする派もある

224 :デフォルトの名無しさん:2010/03/26(金) 22:52:24
単独で終わる実行プログラムなら、戻り値なんていらないと思うけど
スクリプトとかで呼ばれて、戻り値でエラー処理するなら必要かも
そんな高度なことするのがここに何人いるやら

225 :デフォルトの名無しさん:2010/03/26(金) 22:53:19
>>224
まだ繰り返したいの?馬鹿なの?

226 :デフォルトの名無しさん:2010/03/26(金) 22:54:31
>>192
char ***v;
までなら実用的に使用したことがあります。シェルを作っていて、execv() に渡す引数を準備する場合でした。
さすがに4重のポインタは思い当たりません。

227 :デフォルトの名無しさん:2010/03/26(金) 22:54:52
>>222-223

なるほど そうだね
乱数の偏りは、あれはあれで便利なんだけどね
ある程度決まった乱数(ってへんな言い方だけど)が欲しいときとか
世の中の事象ってわり偏ってるし

228 :デフォルトの名無しさん:2010/03/26(金) 22:55:40
C言語の使用者のレベルがwww
上から下まで激しいと言うが、このスレはもう下ばっかりじゃねぇか。

これならP言語スレのがマシだろ。


229 :デフォルトの名無しさん:2010/03/26(金) 22:55:59
高度ではないし、それを利用する人にとってはすごく大事だからだろう。

false && ls
true && ls
をやってみるといいたいことが分かるかもしれない

230 :デフォルトの名無しさん:2010/03/26(金) 22:56:51
>>227
偏りではなく、規則性なんだ。この差は大きいよね?

231 :デフォルトの名無しさん:2010/03/26(金) 22:57:54
某ゲームのサイコロ、自分は常に奇数、相手は常に偶数となるのはそれが理由だっけ?

232 :デフォルトの名無しさん:2010/03/26(金) 22:58:11
C言語使いは、少し上達すると俺俺malloc/freeの実装にチャレンジするんだってね
お前らも俺俺malloc/freeって作ったことあるよね


233 :デフォルトの名無しさん:2010/03/26(金) 22:59:09
メモリプール、スレッドプールは腕試ししたくなる対象だな

234 :http://pc12.2ch.net/test/read.cgi/tech/1267799238/816:2010/03/26(金) 22:59:36
>>205
ごめんなさいね。つい void main() てのをみると反応してしまったわけでして。
まあネタです、ネタ、ネタ。それが証拠に、こんなに荒れてしまったでしょ。釣り人としては大成果でした。
これにこりずにばんばんコードを書いて腕を上げてください。void main() なんてこだわることじゃあない。
(って私がいうか。)宿題スレでお待ちしております。
void main() (爆笑) はもうおしまい。

235 :デフォルトの名無しさん:2010/03/26(金) 23:00:17
>>203
やるな

けど、わずか10分足らずでサンプルまでかけるとはやるな!
>>195
のポインタのポインタのポインタのポインタを云々と言ってる奴とは
一線を画してるな

236 :デフォルトの名無しさん:2010/03/26(金) 23:00:51
押し付けするから、応用力がなくなるんだよ

237 :デフォルトの名無しさん:2010/03/26(金) 23:00:57
>>227
偏りのある乱数を作りたいときは、大抵は思惑があるから
ライブラリ任せにせずに自分で思い通りに偏らせないか?

238 :デフォルトの名無しさん:2010/03/26(金) 23:03:45
規則性な乱数(って言い方も変だけど)も役に立つことあるよな
小さい種さえ覚えとけば大きい規則的なデータが手に入るわけだから
最近はディスクスペースもでかいから、今ではあんまり役に立たないだろうけど


239 :デフォルトの名無しさん:2010/03/26(金) 23:06:15
それはない

240 :デフォルトの名無しさん:2010/03/26(金) 23:07:19
>>232
あるあるwww
なんか一生懸命考えて作ってもK&Rに全然勝てないのなwww

241 :デフォルトの名無しさん:2010/03/26(金) 23:08:42
>>238
ないわ。

242 :デフォルトの名無しさん:2010/03/26(金) 23:08:53
>>237

もちろん自分でも偏らせるんだけど人為的にやりすぎるじゃん
偏りの思惑のわからない偏ったデータが欲しいときがあったんで

243 :デフォルトの名無しさん:2010/03/26(金) 23:10:06
>>242
だから偏りじゃなくて規則性が問題なんだって

244 :デフォルトの名無しさん:2010/03/26(金) 23:12:31
>>243
おまえプログラム禁止でいいわ。

245 :デフォルトの名無しさん:2010/03/26(金) 23:15:49
>>242
どんな用途?

246 :デフォルトの名無しさん:2010/03/26(金) 23:16:05
>>240
まあ機能的に豪華にするみたいなことはよくやったな。
malloc()とcalloc()とrealloc()をひとまとめにして引数で自動的に処理振り分けるラッパーとかね。

247 :デフォルトの名無しさん:2010/03/26(金) 23:18:37
#define A(index) if(index>sizeof(a))printf("aerror(%d,%d)",index,__LINE__);a[index]

このマクロって何をやっているのでしょうか。


248 :デフォルトの名無しさん:2010/03/26(金) 23:20:08
いいかげんにしろクソ野郎

249 :デフォルトの名無しさん:2010/03/26(金) 23:25:45
>>245
なんでそんなこと聞くの?

統計とった結果から自動で傾向を調べるんだけど
実際にうまく行くかどうかを調べる時にデバック用データとして

人為的に作ったデータだと人間が思いつくことの範囲を超えられない
つまりうまく行くことがわかってることしか確認できないから

適当な統計データがわんさかあればそんな事必要ないんだろうけど


250 :デフォルトの名無しさん:2010/03/26(金) 23:26:57
>>244
http://www001.upp.so-net.ne.jp/isaku/rand.html
とりあえずここのLSBについて言及してるとこ見てみたら?

251 :デフォルトの名無しさん:2010/03/26(金) 23:38:29

ポートピア連続殺人事件とかも容量の節約のために規則的な乱数(w)をそのまま音楽として流してて
単純に移植すると曲が変わっちゃうとかあったはず
あれはプログラムのバイナリの適当なところだったかな

252 :デフォルトの名無しさん:2010/03/26(金) 23:39:58
>>251
あとはドラクエなんかもそんな感じだったなたしか

253 :デフォルトの名無しさん:2010/03/26(金) 23:41:27
>>249
意味不明だな。


254 :デフォルトの名無しさん:2010/03/26(金) 23:43:48
ドルアーガのマップ生成はフロア番号のみに依存で、乱数は使ってないんだっけかな

255 :デフォルトの名無しさん:2010/03/26(金) 23:44:45
http://slashdot.jp/it/article.pl?sid=09/04/18/1241233
こういうの思い出した

256 :デフォルトの名無しさん:2010/03/26(金) 23:44:59
>>253

だって詳しく言いたくねーもの
でも意味不明ってことはないだろ
推測できるだろプログラマなら

行があいてるところはつなげてよんじゃダメだよ

257 :デフォルトの名無しさん:2010/03/26(金) 23:45:39
有効活用している事例をあげるのは雑談に過ぎず、それが問題を起こす危険性をはらんでいることを
認識せずに使っているのが問題なんだよ。
だから偏りだの規則性だのは些末なことです。

258 :デフォルトの名無しさん:2010/03/26(金) 23:53:46
>>256
君のママじゃないんだから
独自の書き込み規約を押し付けられても分からんよw

>>251-252の言うようなゲーム用途ならいいんだ。
逆にメリットになりえるからね。
249の用途はやはり意味不明だよ。

259 :デフォルトの名無しさん:2010/03/26(金) 23:55:02
じゃ初期のドルアーガってエミュで遊ぶとマップ変わるの?って思ったけど
エミュレータがrandのライブラリも真似てれば良いのか

260 :デフォルトの名無しさん:2010/03/26(金) 23:58:53
>>254
いや、乱数の規則性を使ってる。

>>259
うん。逆に移植は面倒になっちゃう。というか、移植する時にはそのロジックを放棄してマップデータ持っちゃうだろうねw

261 :デフォルトの名無しさん:2010/03/26(金) 23:59:07
>>258

>独自の書き込み規約を押し付けられても分からんよw

別に押し付けたんじゃなくてさ、なんで意味不明なのかな?
あ、こいつ俺の文章を空行のtころをつなげて読んでるのかなって思っただけ
だから書き込み規約ではないよ

詳しくは言いたくないから意味不明でも良いよ 
そもそもなんでそんなこと訊くんだ?言いたくねーよって思ってるし
それでぼんやりしてる部分はあったかもね

262 :247:2010/03/27(土) 00:00:18
どなたかC言語にお詳しい方、>>247をよろしくお願いします。

263 :デフォルトの名無しさん:2010/03/27(土) 00:03:00
>>262
配列aの要素サイズが1である場合、配列の要素を注意深く取得するマクロ

264 :デフォルトの名無しさん:2010/03/27(土) 00:05:40
>>247
突っ込み待ちをしているマクロと言いたいところだが、
実際は範囲オーバーを検出しつつ配列に値を代入するのに使うんだろうな。

265 :247:2010/03/27(土) 00:07:05
>>263-264
なるほど。
ありがとうございます。
こういうコードを見るとなんか訳分からなくなります。


266 :デフォルトの名無しさん:2010/03/27(土) 00:08:12
ああ、代入にも使えるのか。

ちなみに
#define A(index) if(index>sizeof(a)/sizeof(a[0]))printf("aerror(%d,%d)",index,__LINE__);a[index]
とすることで発生しているかもしれない問題を解決できるかもしれない

267 :デフォルトの名無しさん:2010/03/27(土) 00:11:32
if(index>=sizeof(a)/sizeof(a[0]))
か。連投すまん。

268 :デフォルトの名無しさん:2010/03/27(土) 00:16:00
http://codepad.org/XbbwMLLk
なんちゃってmalloc書いてみたw

269 :デフォルトの名無しさん:2010/03/27(土) 00:16:38
行末の a[index] は何してるの?

270 :デフォルトの名無しさん:2010/03/27(土) 00:17:46
char a[5];
char hoge;
hoge = A(3);
A(5) = 'a';

271 :268:2010/03/27(土) 00:22:37
0x20の倍数で確保されます。最小サイズは0x20です。(1バイトって指定しても実際は20バイト使われちゃう)
あと全体の大きさは0x1000までです。

一番最初の大元のメモリー領域はmallocで得てます。
mallocが使えない環境なら static P* pl; を static P[MPM*BBS]ってすれば、たぶんだいじょぶかもしれません。よくわかりませんがw


272 :デフォルトの名無しさん:2010/03/27(土) 00:24:59
>>268
あの言葉を言って欲しくてワクテカしてるだろうから俺は言わない

273 :デフォルトの名無しさん:2010/03/27(土) 00:27:49
>>272
それがvoid mainだとしたら見当違いだな

274 :デフォルトの名無しさん:2010/03/27(土) 00:40:49
#include <stdio.h>
#include <time.h>
#include <time.h>
void main(void){
char *(res[])={"void main(void)(藁)","int main(int argc,char **argv)はレガシー",
"int派は糞","void派は高度なアプリ組んだ事ないだろ","void mainを馬鹿にするな",
"プロセスの戻り値なんて使わねーよ","GetExitCodeって知ってる?","Windowsでは意味ねぇよ","古い人のやり方","0か1に決まってるからOK","カオスになるぞ","警告だけだからOK",
"マニュアルでvoidって書けっていわれてる","警告だけだからOK","2^64もの状態どうやって管理するんだよ","intが仕様である証拠もってこいや","規格票ではint main",NULL};
NULL};
int index=-1;
srand(time(NULL));
for(;;){
index++;
if(res[index]==NULL)index=0;
if( rand() & 32==0) printf("%s¥n",res[index]);
}
return;//0;
}

275 :デフォルトの名無しさん:2010/03/27(土) 00:44:18
君はもっと有意義に時間と労力を使ったほうがいいんじゃないか?

276 :デフォルトの名無しさん:2010/03/27(土) 00:51:04
はははw
俺、int派だったけど、さすがに夜中にこんなの作ってるパワーないわwww

277 :デフォルトの名無しさん:2010/03/27(土) 00:56:15
俺のレスが使われてない!く、くやしい!!

278 :デフォルトの名無しさん:2010/03/27(土) 00:56:42
好きなのを使って良いんじゃないか
char main(void)、char* main(void)、 void* main(void)....
これらってコンパイルできるのか知らんが

279 :デフォルトの名無しさん:2010/03/27(土) 00:59:10
俺はmainはintで書くけど別にvoidだって何だって良いよ。
使うCコンパイラのマニュアル読めってだけの話だろ。

280 :デフォルトの名無しさん:2010/03/27(土) 00:59:29
君はなにもわかってないようだね

281 :デフォルトの名無しさん:2010/03/27(土) 01:10:04
粘着うざすぎw

282 :デフォルトの名無しさん:2010/03/27(土) 01:22:29
>>260
そういうのは規則性じゃなくて再現性っていうんだ
覚えとけドアホ

283 :デフォルトの名無しさん:2010/03/27(土) 01:26:30
>>279
そういう態度がいけないんだよ。
戻り値を使わせる気が無いならとりあえず0返しとけ。

284 :デフォルトの名無しさん:2010/03/27(土) 01:32:54
粘着うざすぎw

285 :デフォルトの名無しさん:2010/03/27(土) 02:49:05
>>282
規則性と偏りを一緒くたにしてるやつを叩けよwww

286 :デフォルトの名無しさん:2010/03/27(土) 03:03:02
前スレを見直してて、constとdefineの違いの質問があったのですが、
その中で↓の書き込みを見つけました。constは定数であるのにもかかわらず、デバッカで見る値とはなんでしょうか?

52 名前: デフォルトの名無しさん [sage] 投稿日: 2010/03/07(日) 10:55:25
defineはコンパイル時に置き換えてくれるだけ
だからマクロとして使えるし、関数丸ごとdefineしてみるとか変なこともできる
__LINE___や__TIME___みたいなコンパイル時に決まるやつもある

事項時はもうすでに置き換わっているのでaaaaとかって名前でdfineしてデバッカでaaaa探してもない

constはメモリ上に固定でそいつがずっといるだけ
つまりデバッカで値も見れる

287 :デフォルトの名無しさん:2010/03/27(土) 03:25:59
>>286
変更できない変数

288 :デフォルトの名無しさん:2010/03/27(土) 09:09:18
TIFF形式の画像ファイルからピクセルデータを取得したいんですが
白黒2値画像で、MMR符号化(圧縮)されています。
MMR符号化を解読するソースなど教えてください。

289 :デフォルトの名無しさん:2010/03/27(土) 09:25:31
ΩΩ Ω<な、なんだってー

290 :デフォルトの名無しさん:2010/03/27(土) 09:39:56
>>288
ほれ
ttp://www.libtiff.org/

291 :デフォルトの名無しさん:2010/03/27(土) 09:41:40
はてなに便乗
ttp://q.hatena.ne.jp/1081477823

292 :163:2010/03/27(土) 09:59:34
遅くなりましたが
>>167さん、>>171さんありがとうございました

293 :デフォルトの名無しさん:2010/03/27(土) 10:47:51
おいおい、それでいいのかよ

294 :デフォルトの名無しさん:2010/03/27(土) 10:51:24
イーンダヨ!


295 :デフォルトの名無しさん:2010/03/27(土) 11:00:54
└→ω

296 :デフォルトの名無しさん:2010/03/27(土) 11:04:09
>>293
普通の人なら、キーワードだけ教えてもらえば
あとはなんとかなるんだよ。
1から10まで教えてクンだとこうはいかないが。

297 :デフォルトの名無しさん:2010/03/27(土) 11:05:58
A:「○○ってどうやるの?」
B:「△△」
A:「クスコ」

2chのあるべき姿ってこうじゃね?

298 :デフォルトの名無しさん:2010/03/27(土) 11:16:41
>>296
間違ったキーワードを渡された事に関してはどう思ってる?

299 :デフォルトの名無しさん:2010/03/27(土) 11:20:39
ハワイへ行くのに羽田空港へ案内されたようなもんだな

300 :デフォルトの名無しさん:2010/03/27(土) 11:20:52
ぜんぜん平気

301 :デフォルトの名無しさん:2010/03/27(土) 11:23:43
羽田でなんか問題があるんだろうか?

302 :デフォルトの名無しさん:2010/03/27(土) 11:23:53
嘘を嘘と見抜けないと難しい ってのが2chのあるべき姿(キリッ)

303 :デフォルトの名無しさん:2010/03/27(土) 11:25:49
どこの空港発はわからずに羽田に案内するのはダメだろ・・・

304 :デフォルトの名無しさん:2010/03/27(土) 11:29:44
>>298
たとえキーワードが間違っていても、そこから
正解に続くキーワードへのとっかかりになる。

たぶん、

305 :デフォルトの名無しさん:2010/03/27(土) 11:29:51
今って羽田からハワイに行く便あったっけ?

306 :デフォルトの名無しさん:2010/03/27(土) 11:32:24
間違ってると色々つっこまれてるのに質問者が礼を言ってしめちゃったから、いいんだろう
よく言うだろ?お前がそう思うんならそうなんだろお前ん中ではなと

307 :デフォルトの名無しさん:2010/03/27(土) 11:39:30
>>298
間違ってりゃ再度質問しにくるか誰かが横槍入れるだろ
1対1でチャットしてんじゃないんだから

お前はゆとりか

308 :デフォルトの名無しさん:2010/03/27(土) 11:40:56
だから横槍入ってんだろ

お前は文盲か

309 :デフォルトの名無しさん:2010/03/27(土) 12:13:21
>>308
お前は俺かっ!


310 :デフォルトの名無しさん:2010/03/27(土) 12:27:40
>>308
間違ってるぜ(ニヤニヤ)

って態度にむかつくんだよ

311 :デフォルトの名無しさん:2010/03/27(土) 12:30:02
>>310
なぜ誰も正解を出さずこんな結果になってるか、わかってないからむかつくんだろ

312 :デフォルトの名無しさん:2010/03/27(土) 12:32:07
そういう態度に見えるのは、その人のレヴェルが低いからでしょうね。

313 :デフォルトの名無しさん:2010/03/27(土) 12:34:56
つまり、間違いを間違いと指摘したら態度が悪いと逆切れされる
そんな世の中じゃ

314 :デフォルトの名無しさん:2010/03/27(土) 13:09:04
>>308
横槍は大三者が入れる者で当事者が入れたら横槍とは言わんのだよ君


315 :デフォルトの名無しさん:2010/03/27(土) 13:14:18
第三者って言いたいのかな?
質問者、間違った解答をした人、そしてつっこみをした俺
へえ。俺は当事者なのか。どんな状態なら横槍を入れることができるんだろう。

316 :デフォルトの名無しさん:2010/03/27(土) 13:15:51
代参者

317 :デフォルトの名無しさん:2010/03/27(土) 13:17:18
>>315
お互いに暇だよねぇ
何して遊ぼうか?

318 :デフォルトの名無しさん:2010/03/27(土) 13:18:20
どうやったら横槍を入れられるのか議論して遊ぼうぜ。

319 :デフォルトの名無しさん:2010/03/27(土) 13:19:28
議論は遊びじゃないだろ。JK

320 :デフォルトの名無しさん:2010/03/27(土) 13:20:14
みっともないですね

321 :デフォルトの名無しさん:2010/03/27(土) 13:30:52
何このスレ…

聞きたいことあるんだけど、質問していいの??

322 :デフォルトの名無しさん:2010/03/27(土) 13:33:24
いま忙しいから 「適当に話を合わせるスレ」 で聞いてください。

323 :デフォルトの名無しさん:2010/03/27(土) 13:35:17
埋め

324 :デフォルトの名無しさん:2010/03/27(土) 13:55:19
>>321
質問したければ黙って書けばいい
質問が無いから雑談やってる
雰囲気が嫌なら教えてgooでもどこでも行けばいい
いちいち聞くな

325 :デフォルトの名無しさん:2010/03/27(土) 13:58:13
おまえらてしこしこLD書いている?

326 :デフォルトの名無しさん:2010/03/27(土) 14:07:08
>>312
横槍入れんなボケ

327 :デフォルトの名無しさん:2010/03/27(土) 14:07:40
LD?

328 :デフォルトの名無しさん:2010/03/27(土) 14:10:36
>>327
ホリエ豚が居たとこ

329 :デフォルトの名無しさん:2010/03/27(土) 14:13:09
>>321
質問なんて横槍入れるなよ

330 :デフォルトの名無しさん:2010/03/27(土) 14:33:06
前のスレでコンパイラについてあきらめたものです。
ついに出来ました!!
ポケコン使用ですが
http://beebee2see.appspot.com/i/agpiZWViZWUyc2VlchQLEgxJbWFnZUFuZFRleHQY_aNkDA.jpg


331 :デフォルトの名無しさん:2010/03/27(土) 15:21:14
hello
world
と印字されてるだけじゃんw

332 :デフォルトの名無しさん:2010/03/27(土) 15:30:54
ポケコンってCなの?

333 :デフォルトの名無しさん:2010/03/27(土) 15:45:31
>>332
だいぶ前からCの動くポケコンあるね。

334 :デフォルトの名無しさん:2010/03/27(土) 16:02:02
うるせえなおめえ!
俺はエッチしてえんだよ!

335 :デフォルトの名無しさん:2010/03/27(土) 16:31:28
ICU - International Components for Unicode
http://site.icu-project.org/

これって何するもの?
ウニコードコンバータって……意味わからなす

336 :デフォルトの名無しさん:2010/03/27(土) 16:40:49
ggrks

337 :デフォルトの名無しさん:2010/03/27(土) 16:45:45
>>331
まだまだですがこれから頑張って勉強して
まずはテトリスぐらい作れるようなりたいです!

338 :デフォルトの名無しさん:2010/03/27(土) 16:46:28
>>331
ちゃんとC言語つかってコンパイルしました

339 :デフォルトの名無しさん:2010/03/27(土) 17:00:12
>>336
http://www.google.co.jp/search?hl=ja&q=icu
ICU 国際基督教大学

icuに関連する検索キーワード
icu 偏差値 icu w3 ICU症候群 ICUとCCU ICU教会
ICU 対策 ICUシンドローム hcu icu 違い ICU祭 icu ibm

340 :デフォルトの名無しさん:2010/03/27(土) 17:01:15
>>338
いちいち相手にすんな

341 :デフォルトの名無しさん:2010/03/27(土) 17:07:14
http://beebee2see.appspot.com/i/agpiZWViZWUyc2VlchQLEgxJbWFnZUFuZFRleHQYg79oDA.jpg
何処か間違っていますか?
最後の括弧は消しました

342 :デフォルトの名無しさん:2010/03/27(土) 17:10:33
なんの画像だよ…

343 :デフォルトの名無しさん:2010/03/27(土) 17:11:18
>何処か間違っていますか?
×%dテス
○%dデス

ギャグはさておき、エラーが出るの?

344 :デフォルトの名無しさん:2010/03/27(土) 17:11:22
もしかしてインタプリタ?行番号がいるの?

345 :デフォルトの名無しさん:2010/03/27(土) 17:12:25
iPhoneの無料アプリで撮ったんで広告が入っていますがポケコンの画面の写真です。

346 :デフォルトの名無しさん:2010/03/27(土) 17:15:58
>>343
そこは直しました笑
エラーは30行にあるとでます。
構文規則の途中でソースプログラムが終了していると言う意味のエラーはがでます

10,20,30,40などの行番号はポケコン特有で必要らしいです

347 :デフォルトの名無しさん:2010/03/27(土) 17:16:57
>>344
インタプリタといいますと?
初心者ですのでまったくわかりません

348 :デフォルトの名無しさん:2010/03/27(土) 17:19:20
大変申し訳ないのですが自己解決しました(^_^;)

349 :デフォルトの名無しさん:2010/03/27(土) 17:22:45
>>347
俺の知ってる範囲だとBASICとかは行番号込みのコードらった。

350 :デフォルトの名無しさん:2010/03/27(土) 17:26:48
mainのとじ括弧 } がないからじゃないのか

351 :デフォルトの名無しさん:2010/03/27(土) 17:28:58
>>350
そうでした笑
でもはじめ書き込んでコンパイルしたらエラーがでて、みてみたら消えてました

352 :デフォルトの名無しさん:2010/03/27(土) 18:23:54
メモリのポインタは tibet にするといいよ。
free(tibet);
これで、このソースは中国政府自らの手により検索規制され、
ソースのコピーをしばらくの間防ぐことが出来る。

353 :デフォルトの名無しさん:2010/03/27(土) 21:49:14
スレの勢いが止んだな。
中国政府の検閲恐るべし

354 :デフォルトの名無しさん:2010/03/27(土) 22:34:21
C言語では、多次元配列を使用することができるが、最高5次元配列までである。

355 :デフォルトの名無しさん:2010/03/27(土) 22:39:30
(゚Д゚ )ハァ?

356 :デフォルトの名無しさん:2010/03/27(土) 22:45:38
ttp://codepad.org/4Ji0mLFQ

6個できたけど これはgccが拡張されてるだけ?
それとも範囲外アクセスしたときみたくたまたまラッキーなだけ?

357 :デフォルトの名無しさん:2010/03/27(土) 22:56:20
bcc32 でも 7次元が可能だった。なんで 5 までしかできないと思ったのですか?

358 :デフォルトの名無しさん:2010/03/27(土) 23:00:32
馬鹿だから

359 :デフォルトの名無しさん:2010/03/27(土) 23:05:02
>>358
そのキーワードでは釣れないですよ。せめて最近はやったやつくらいのパワーがないと、 void ma(略)

360 :デフォルトの名無しさん:2010/03/27(土) 23:09:49
ふだん誰からも相手されないのに、ちょこっとちやほやされたからうれしかったんだろう
現実を見るようになれば去るよ

361 :デフォルトの名無しさん:2010/03/27(土) 23:43:38
ところで、n次元配列の限界ってどのくらいなんだ?

362 :デフォルトの名無しさん:2010/03/27(土) 23:46:27
>>361
規格票に何か書いてあったか?

363 :デフォルトの名無しさん:2010/03/27(土) 23:47:30
書いてあるかは知らないが
書いてあっても「最低nまでは保証する事」としか書かれないよ

364 :デフォルトの名無しさん:2010/03/27(土) 23:51:26
VC2008EEでは、intの512次元配列変数を宣言できたが、
1024次元はビルドが異常終了した。

365 :デフォルトの名無しさん:2010/03/27(土) 23:51:26
pthread の話です。
サブスレッド内で malloc() した領域を pthread_exit() -> pthread_join() 経由で親スレッドでうけとった場合には
free() は必要でしょうか。

会員制(無料)でごめんなさい、http://codezine.jp/article/detail/1892?p=3 の最後のコードです。これには free() はありません。

私の環境(cygwin/gcc) では、printf("%p")の値をみるかぎりpthread_exit() 前と pthread_join() 後では変化しておりません。
malloc() はスレッドセーフである、とのことですが、私はスレッドセーフの意味がよくわかっていません。

よろしくお願いいたします。

366 :デフォルトの名無しさん:2010/03/27(土) 23:51:39
その「最低の保証」は5ではないよね?

367 :デフォルトの名無しさん:2010/03/27(土) 23:53:10
1<n<1000 で動的にメモリを確保するプログラムをCで書け
制限時間 今から10分

できた奴はPGG

368 :デフォルトの名無しさん:2010/03/27(土) 23:54:53
>>367
n がなにかきちんと定義してください。

369 :デフォルトの名無しさん:2010/03/27(土) 23:59:35
>>367
int i;
for i=1 to 1000
malloc(i)
next


370 :デフォルトの名無しさん:2010/03/28(日) 00:03:47
fot next wwww
しかも1と1000を含んでるし

371 :デフォルトの名無しさん:2010/03/28(日) 00:06:18
>>369
このようなアバウトなコードも解釈するコンパイラ希望

372 :デフォルトの名無しさん:2010/03/28(日) 00:12:08
(1) printf関数は正常時には出力した文字数を返す。
(2) 浮動小数点型はfloat、double、long doubleの三つのサイズをもち、ANSI規格により、それぞれのサイズは規定されている。
(3) ポインタ変数をconst宣言することはできない。
(4) typedefはコンパイラで解釈され、#defineはプリプロセッサで解釈される。
(5) キャストは明示的に型変換することであり、ポインタをキャストすることも可能である。
(6) グローバル変数とローカル変数に同一の名前が使われたとき、両者のスコープがおよぶ箇所では、グローバル変数が優先される。
(7) 複数の論理演算子を使用した条件式において、真偽の判定は右から左の順に行われる。
(8) float型やdouble型に対して、ビット演算子を使うことはできない。

解答群 ア 正しい イ 誤り

373 :デフォルトの名無しさん:2010/03/28(日) 00:14:16
宿題のスレに行けよ

374 :デフォルトの名無しさん:2010/03/28(日) 00:15:21
>>365
コードは見てないけど、malloc()した領域はfree()する必要がある。ス
レッドの生死は関係ない。

プログラムが終了する直前であれば、OSにまかせてあえてfree()しない
という手もある。それはスレッドとは関係がない。


375 :365:2010/03/28(日) 00:19:01
>>374
ありがとうございます。

376 :デフォルトの名無しさん:2010/03/28(日) 00:24:23
>>367
n=999
ならできるかな?w



377 :デフォルトの名無しさん:2010/03/28(日) 00:37:05
$ cc -o test test.c
test.c: In function ‘main’:
test.c:4: warning: incompatible implicit declaration of built-in function ‘malloc’
test.c:4: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘void *’

$ ./test
140308488

$ cat test.c

#include <stdio.h>
int main()
{
printf("%d\n",malloc(1));
}


378 :デフォルトの名無しさん:2010/03/28(日) 00:39:47
>>372
見栄張ってググらないで、試さないで、記憶だけで正直に回答します。
(1)知らない
(2)long double って使ったことない。はじめて聞いた。知らない。
(3)興味ない
(4)そんなきがする。#ついてるのはプリプロセッサな気がするだけ
(5)キャストって言葉がどこからどこまでなのかしらないけど P* p; int i=(int)p; なんてのは出来たきがする。警告が出たような出ないようなうろおぼえ。
(6)読みづらいので、かぶらないように注意してるので知らない。 
たぶんローカルが優先されそうなきがする。わざわざ後に作るんだから優先させるだろうと。デニスリッチーもそう考えた気がする。なんとなく。
(7)知らない
(8)IEEE754(うろおぼえ)のdouble d; unsigned long long s=(d>>63)&0x01, q=(d>>52)&0x07FF, n=d&0x0000FFF...;
みたいに昔書いたような記憶がうっすらある。たぶんできるとおもう。(型変換したかもしれないし、しなかったかもしれないし、うろおぼえ)

全体的にうろおぼえですw

379 :デフォルトの名無しさん:2010/03/28(日) 00:44:35
>>372
じゃあ俺もぐぐらずに
1はい
2規定されているのはcharが1バイトということだけ
3できる
4#で始まる行でコンパイラに影響を与えるのはpragmaぐらいしか知らない
5はい
6ローカルが優先
7左から右
8期待する動作をするかどうかは別にして、ビット演算子を使うことができない型はないと思う

380 :デフォルトの名無しさん:2010/03/28(日) 00:45:29
$ ./test1
12345
6

$ cat test1.c
#include <stdio.h>
int main()
{
printf("%d\n",printf("12345\n"));
}


381 :デフォルトの名無しさん:2010/03/28(日) 01:13:55
>>372
ほれ
(1) イ:出力したバイト数を返す
(2) イ:サイズは大小関係 float <= double <= long double しか規定されていない
(3) イ:int * const p; のようにする
(4) ア
(5) ア:Cでは暗黙なものは全て「変換」。C++ではアップキャストという暗黙なキャストも存在する
(6) イ:ローカル変数が優先される
(7) イ:左から右
(8) ア

382 :デフォルトの名無しさん:2010/03/28(日) 01:21:17
int main(void)
{
double d = 1.0;

d << 1;

printf("%f\n", d);

return 0;
}

コンパイルエラーが出ます
残念でした

383 :デフォルトの名無しさん:2010/03/28(日) 01:24:12
(3) イ:int * const p; のようにする

これはイってことはできないの? それとも↑のようにするとできるの?ならアじゃねーの

つかできたところで何に使うか俺にはさっぱり見当もつかないけど

384 :デフォルトの名無しさん:2010/03/28(日) 01:24:51
>>383
(3) ポインタ変数をconst宣言することはできない。
                        ~~~~~~~~~~

問題文ちゃんと読めよ

385 :デフォルトの名無しさん:2010/03/28(日) 01:26:51
ああ、ほんとだごめんなさい

386 :デフォルトの名無しさん:2010/03/28(日) 01:40:31
ワロス

int main(void)
{
double d = 1.0;

*((long long int *)&d) << 1;

printf("%f\n", d);

*((long long int *)&d) <<= 1;

printf("%f\n", d);

*((long long int *)&d) >>= 1;

printf("%f\n", d);

return 0;
}

387 :372:2010/03/28(日) 01:53:02
(1) ア
(2) イ
(3) イ
(4) ア
(5) ア
(6) イ
(7) イ
(8) ア

でした

388 :デフォルトの名無しさん:2010/03/28(日) 02:09:26
>>387
ダウト

(1) イ 文字数じゃなくてバイト数を返す

389 :デフォルトの名無しさん:2010/03/28(日) 03:21:23
掛け算のオーバーフローを検知するにはどうしたらいいでしょうか
もしくはできないんでしょうか
型はsigned intです

390 :デフォルトの名無しさん:2010/03/28(日) 03:49:56
>>389
Cじゃムリ。十分な大きさの型を用意するしかない。

391 :デフォルトの名無しさん:2010/03/28(日) 03:51:05
>>389
a * b > INT_MAX とは書けないので、
a > INT_MAX / b と書けばいい。


392 :デフォルトの名無しさん:2010/03/28(日) 03:51:06
>>389
割り算して元に戻ればオーバーフローしていない
ような気がする。

393 :デフォルトの名無しさん:2010/03/28(日) 05:01:16
>>392
Cの規格上では、符号付き整数のオーバーフロー時の挙動について
何も規定されていない。プログラムが停止する可能性すら否定できない
だからオーバーフローさせた時点で失敗

394 :デフォルトの名無しさん:2010/03/28(日) 05:34:34
bool mick(int a,int b){Ireturn INT_MAX/a<=b;}

395 :デフォルトの名無しさん:2010/03/28(日) 05:43:16
無理矢理 asm ブロック使う by VC ヽ( ´ー`)ノ

#include<stdio.h>
int main()
{
  signed int i,j,k;

  scanf("%d",&i);
  scanf("%d",&j);

  _asm {
    mov k,0
    mov eax,i
    imul j
    jnc add1
    mov k,1
    add1:
  };

  puts((k==0)?"not OF":"OF");
  return 0;
}

396 :デフォルトの名無しさん:2010/03/28(日) 08:25:59
setcも知らないアホは消えろ

397 :372:2010/03/28(日) 10:53:41
>>388
あっ本当だ

サーティファイの問題なんだけど、大したことないね

398 :デフォルトの名無しさん:2010/03/28(日) 11:00:08
お金ないのでGCCでがんbるっ! by gcc (>_;/ほろり‥
http://codepad.org/ghJZjTMS


399 :デフォルトの名無しさん:2010/03/28(日) 11:04:58
kyarii_oobaaはねーよw

400 :デフォルトの名無しさん:2010/03/28(日) 11:56:23
プログラムでsetlocale無しに日本語をprintfするのは正しいのでしょうか?
WindowsでUnicodeビルドだと、最初にsetlocale(LC_CTYPE,"")しておかないと文字化け
してしまうのですが、Unicodeビルドでなくてもする必要があるのかなと思ったのです。


401 :デフォルトの名無しさん:2010/03/28(日) 12:38:33
>>395
ばか丸出し

402 :デフォルトの名無しさん:2010/03/28(日) 13:09:23
>>395
それはキャリーフラグ。今はオーバーフローが話題。

403 :デフォルトの名無しさん:2010/03/28(日) 13:30:28
doubleにビット演算子を使うことができないって言うのはどういうことですか?

404 :デフォルトの名無しさん:2010/03/28(日) 13:46:08
>>400
問題は無い。というか、問題にされても困る。
ただし、SJIS てめーはダメだ

405 :デフォルトの名無しさん:2010/03/28(日) 13:57:45
>>401-402
何かチガウノ?初めて asm ブロック使って喜んでいる俺に正解を優しく教えれヽ( ´ー`)ノ

406 :デフォルトの名無しさん:2010/03/28(日) 13:59:37
>>403
字面通りでは?
出来たことがあるとか、出来るべきとか思ってるならそれを書け

407 :デフォルトの名無しさん:2010/03/28(日) 14:11:10
できても良いよな Cなんだからそんな細かいチェックいらんって思う
できたからって何に使えるかは知らんけど

408 :デフォルトの名無しさん:2010/03/28(日) 14:19:13
たんなるビットのコンテナとしてなら整数型で十分だし
浮動小数点数で計算に代用可能なビット操作はないから
あっても意味がないかと

409 :デフォルトの名無しさん:2010/03/28(日) 14:23:02
>>407
そもそもFPUにビット演算命令が実装されておらず、大した用途も無いのだから、
わざわざC処理系にそれをサポートさせるのは無駄なコストなのです。

410 :デフォルトの名無しさん:2010/03/28(日) 14:34:52
意味なくても、あっても良いよな
あえてそんなチェック無駄じゃんと思ったけど

あえて止めてるんじゃなくてコプロレベルまで行く話なのか、なるほどねぇ
最近、ここは揉め事が多いけど勉強になることも多いなぁ
(まったく仕事には役立たないけど)

411 :デフォルトの名無しさん:2010/03/28(日) 14:39:49
どうしてもdoubleをビット操作したいときは、
unionでlonglongとかとくっつけて操作するといいよ。
ttp://codepad.org/z7ywTWVm

412 :デフォルトの名無しさん:2010/03/28(日) 15:30:49
>>406
最上位ビットを見てみるとか、できても別にいいんじゃないの?

413 :デフォルトの名無しさん:2010/03/28(日) 15:38:47
最上位ビットが見れたらそんなにうれしいか

414 :デフォルトの名無しさん:2010/03/28(日) 15:41:51
>>409
FPUを持ち出す時点で……

というのはさておき、ビット操作できるとfabs()の実装が超簡単になるよ。

415 :デフォルトの名無しさん:2010/03/28(日) 15:43:01
>>413
最上位ビットを見るだけで、負の値かそれ以外かが判る。
正、NaNと0と正の値の区別はできない。

416 :デフォルトの名無しさん:2010/03/28(日) 15:43:14
うれしいとかじゃなくて、なぜ制限がかかっているのかが分からないという話なんだが。
内部表現に依存し、かつコードから内部表現を知ることができないため、
そのようなコードを許していないとかなんかそういうのないの?

417 :デフォルトの名無しさん:2010/03/28(日) 15:47:24
確かに余りに実装に依存し過ぎるから言語仕様とはし難い事情があったんだろうな。
例えば、>414->415はIEEE754限定だ。しかも、double値を整数値とは違う方法で管理する環境だと
ビット演算を仕様に入れると非常に厄介な実装をする羽目になる。

418 :デフォルトの名無しさん:2010/03/28(日) 15:52:11
左シフトした時に内部の全ビットを1ビット左にずらす、それがそんなに厄介かな。
その結果はどう使っていいのか分からないけど、できなくしてるのは何でだろ。
意味がないから制限をかけたのなら、コード中の意味を成さないステートメントは
すべてコンパイルエラーとなるべきだろうし。

419 :デフォルトの名無しさん:2010/03/28(日) 15:56:30
>>418
だから浮動小数点レジスタの中身をシフトする回路が実装されていないという話。
もちろん、いったんメモリへ書き出してから汎用レジスタを介してシフトすれば可能だが、
それは *(unsigned long long*)&d <<= 1 などと書けば済む。

420 :デフォルトの名無しさん:2010/03/28(日) 15:58:04
操作に大した意味もないのに実装するハメになる
コンパイラメーカーの事も考えてあげてください

421 :デフォルトの名無しさん:2010/03/28(日) 16:14:13
>>402
よくわかんなかった
http://codepad.org/ckbFUsCa


422 :デフォルトの名無しさん:2010/03/28(日) 16:21:14
>>419
なるほど。&ができないのも回路が実装されていないから?
キャストすると汎用レジスタを経由するというのも勉強になった。

423 :デフォルトの名無しさん:2010/03/28(日) 16:22:41
「double はシフトできない。○か×か?」って問われても
こういうの思い出しちゃって、「え〜〜と…どこまでをdoubleと捉えていいんだ?」ってなって迷う…orz
http://codepad.org/1iYkGYJD


424 :デフォルトの名無しさん:2010/03/28(日) 16:31:29
実用上ほとんど必要がない
符号ビット、指数部、仮数部に分解したい、
各ビットがどうなってるか走査したいなど
どうしてもビット演算したいようなレアケースでも
一旦整数型を経由すれば可能だし、
わざわざそんなケースを考慮して実装する理由も無い

コンパイラ製作において実装の手間が増える、
小数のビット演算はまず使われず、大抵はミス(バグ)であるが、
そのコードがコンパイルエラーにならなくなってしまう、
など、デメリットの方が遥かに大きい。

425 :デフォルトの名無しさん:2010/03/28(日) 16:35:07
>>422
勘違いをしているらしい点を補足。
キャストすると汎用レジスタを経由するのではない。
>419のキャストは見做し整数としてビット演算している。
>419のコードを模式的に書けばこうなる。
・dのポインタからアドレスを取得
・そのアドレスのポイント先をunsigned long longと見做す。
・対象メモリ空間に対して直接ビットシフトできるMPUならそうする。
・そうでないMPUなら一旦汎用レジスタにロードし、ビットシフトした後にストアする。

コンパイラの最適化能力が高ければ、前後のコードに問題がない限り
メモリを一切介さずに汎用レジスタのみで処理するかもしれない。
# x86でもSSEを使えればそうできる。

426 :デフォルトの名無しさん:2010/03/28(日) 16:56:46
>>424>>425
丁寧にありがとうございました。

427 :デフォルトの名無しさん:2010/03/28(日) 17:06:09
今C言語を入門書を使って学習しているんですが、C言語を使ってアプリケーションを作ったり、
もっと応用ができるようになるためには入門書が終わったらどんな勉強をするべきでしょうか。

428 :デフォルトの名無しさん:2010/03/28(日) 17:08:24
>>427
http://itpro.nikkeibp.co.jp/article/COLUMN/20060127/228096/?ST=develop

429 :デフォルトの名無しさん:2010/03/28(日) 17:08:37
とりあえず作ってみる
愚直でいいから
その後何か応用向けの本を読んでみる
そして自分のコードと比較してどこが優れてるか理解する

430 :デフォルトの名無しさん:2010/03/28(日) 17:39:07
C言語で人様に公開できるようなソフトを書けるようになるには10年はかかる
VBなりVC#でおもちゃをつくるなら1,2ヶ月でできるようになるからそっちにしとけ。

431 :デフォルトの名無しさん:2010/03/28(日) 17:40:09
>>427
Linuxカーネルのソースを読む

432 :デフォルトの名無しさん:2010/03/28(日) 17:55:58
>>430
10年かかるってのは分かるなあ

初心者のうちは作ることだけで精一杯なんだけど、
プログラムってバグが無いだけじゃなく、性能とかメンテ性とか、
環境依存が少ないとか、コードが見やすいとか、セキュリティとか
色んなベクトルがあって、それらを踏まえて作らなければならないんだよね

VBやC#でも同じだとは思うけど

433 :デフォルトの名無しさん:2010/03/28(日) 17:58:26
日本語と英語が混じった文字列aから最後の改行を削除したいのですが、

BYTE a[128];
BYTE n;
n = _mbslen(a);
a[n-1] = '\0';

とやってもうまく行きませんでした。
nが日本語でも英語でも1文字は1としてカウントしてないっぽいです。

どうかご教示を。


434 :デフォルトの名無しさん:2010/03/28(日) 18:04:22
>>427
宿題スレで待っています。

435 :デフォルトの名無しさん:2010/03/28(日) 18:04:35
>>433
nには文字数が入るが、a[n-1]はn-1文字目ではなく、n-1バイト目を指す。
nにバイト数を入れるため、n=strlen(a)にすべきでは。

436 :デフォルトの名無しさん:2010/03/28(日) 18:16:04
aがunsigned charなため、strlenだとうまく行かなかったのですよ。

437 :デフォルトの名無しさん:2010/03/28(日) 18:19:13
>>433
文字コードはなんなのさ

438 :デフォルトの名無しさん:2010/03/28(日) 18:24:16
文字コードに0があるんだからutf16じゃね?

439 :デフォルトの名無しさん:2010/03/28(日) 18:25:17
const char*にキャストすれば

440 :デフォルトの名無しさん:2010/03/28(日) 18:25:59
>>438
お前は勘違いしている

441 :デフォルトの名無しさん:2010/03/28(日) 18:28:44
>>433
1文字=1byteではない

442 :デフォルトの名無しさん:2010/03/28(日) 18:30:55
>>440
こんな初歩的な質問するやつがUTF-16使うわけがないだろ ってこと?

443 :デフォルトの名無しさん:2010/03/28(日) 18:37:28
>>433
「最後の改行を削除したい」のなら、最後の文字と決め打ちにしちゃ拙いんじゃないか?
例えば、テキストファイルをfgets()で読み込んでいるのなら最後の行には改行文字はない場合もあるぞ。

444 :デフォルトの名無しさん:2010/03/28(日) 18:40:33
>>442
2バイト文字も1として数えてるからずれるのであって
0が含まれてるからずれてるのではない

445 :デフォルトの名無しさん:2010/03/28(日) 18:45:47
strlen が使えないから途中に '\0' が含まれていると推測

446 :デフォルトの名無しさん:2010/03/28(日) 18:46:55
何でそうなるんだw
unsigned charだから型の不一致でコンパイルエラーになっただけだろ

447 :デフォルトの名無しさん:2010/03/28(日) 18:48:27
うまくいかないってのはそういう意味か!

448 :デフォルトの名無しさん:2010/03/28(日) 18:50:15
うぁはは、考え過ぎだ。

449 :デフォルトの名無しさん:2010/03/28(日) 18:53:02
VCのmbs系の関数使ってる時点でSJISなのは明白っしょ

450 :デフォルトの名無しさん:2010/03/28(日) 19:12:16
文字列の長さが0だった時にどうなるよそれ

451 :デフォルトの名無しさん:2010/03/28(日) 19:18:25
どうなるって?

452 :デフォルトの名無しさん:2010/03/28(日) 19:19:42
n = 0;
a[n-1] = '\0';

となるよ

453 :デフォルトの名無しさん:2010/03/28(日) 19:22:47
だな

454 :デフォルトの名無しさん:2010/03/28(日) 19:23:53
そんなことはどうでもいい。
問題は文字コードだ、という流れだろ

455 :デフォルトの名無しさん:2010/03/28(日) 19:24:50
文字コードを使う決まりとかないの?

456 :デフォルトの名無しさん:2010/03/28(日) 19:25:48
>>452
ああ、そういうことね

457 :デフォルトの名無しさん:2010/03/28(日) 19:29:25
_mbsrchr で改行コード見つければよくね

458 :デフォルトの名無しさん:2010/03/28(日) 19:51:54
http://beebee2see.appspot.com/i/agpiZWViZWUyc2VlchQLEgxJbWFnZUFuZFRleHQYivFnDA.jpg
下線部はなぜ必要なんですか?

459 :デフォルトの名無しさん:2010/03/28(日) 19:55:18
>>458
それの有りと無しで試してみれば良いだろう

460 :デフォルトの名無しさん:2010/03/28(日) 19:58:30
>>458
それを消すと画面に出力されない環境もある

461 :デフォルトの名無しさん:2010/03/28(日) 19:59:47
>>460
終了時にはフラッシュされるだろう

462 :デフォルトの名無しさん:2010/03/28(日) 20:01:33
>>460
mainが終わるんだから出るよ


463 :デフォルトの名無しさん:2010/03/28(日) 20:02:44
有でも無でも変化ありませんでしたが、意味あるですか?

464 :デフォルトの名無しさん:2010/03/28(日) 20:04:45
改行されるかされないかだよ 結果変わってるはずだよ
出力先が連続紙のプリンタなら>>460の言うとおり印字はしたものの改行しないとそれが見えないとかあるかも

465 :デフォルトの名無しさん:2010/03/28(日) 20:04:48
ああ、\nの位置を変えてみると良いよ。文中とかにね

466 :デフォルトの名無しさん:2010/03/28(日) 20:05:06
>>463
printf() の行を後ろにもうひとつ足してみろ。

467 :デフォルトの名無しさん:2010/03/28(日) 20:06:12
いつも思うが、このレベルの質問してる奴って、何を参考にしてるわけ?
ネット教材の方がマシじゃね?

468 :デフォルトの名無しさん:2010/03/28(日) 20:06:34
printf("\n\n\n\n\n\n");
とかやってみればわかる

469 :デフォルトの名無しさん:2010/03/28(日) 20:07:36
>>463
コンソールで実行して、プログラムが文字を出力して終了すると
次のコマンドの入力待ちになるけど、\nなしだと、コマンドを入力する
カーソルが次の行に行かずに、出力した文字の後ろで点滅してたり
することがある。


470 :デフォルトの名無しさん:2010/03/28(日) 20:08:22
>>467

たぶん、宿題とかでいやでいやでしょうがなくて、ネットで時間かけて調べるとかしたくないんだよ
だれしもが、君みたいに暇さえあればプログラムの事を考えていられるわけではない

471 :デフォルトの名無しさん:2010/03/28(日) 20:09:34
>>470
そうかもしれんけど、そのワリには\nの意味とか、
細かいことを気にするんだな。

472 :デフォルトの名無しさん:2010/03/28(日) 20:12:21
改行って事はわかるのですが、
なぜ例のあそこに\nを入れたのかがわからないのです


473 :デフォルトの名無しさん:2010/03/28(日) 20:13:04
>>472
おまじない

474 :デフォルトの名無しさん:2010/03/28(日) 20:14:03
改行しないと次の文字書くときにくっついちゃうじゃん
くっついてもコマンド入力には問題ないんだけど

たんなる習慣だと思う

475 :デフォルトの名無しさん:2010/03/28(日) 20:15:54
上のほうで触れてる人もいるけど
結果をプリンタに印字してた頃からの習慣だと思う

476 :デフォルトの名無しさん:2010/03/28(日) 20:20:47
windowsのコンソールだとなくても問題ないけど、
unix系は、ないとキモイことになるな。

477 :デフォルトの名無しさん:2010/03/28(日) 20:23:17
じゃ俺がタイプライター時代の話から・・

478 :デフォルトの名無しさん:2010/03/28(日) 20:26:11
>>476
地味に笑いますた

479 :デフォルトの名無しさん:2010/03/28(日) 20:32:54
http://beebee2see.appspot.com/i/agpiZWViZWUyc2VlchQLEgxJbWFnZUFuZFRleHQY4bBlDA.jpg
実際、タイプライターみたいなもんつかってますww

480 :デフォルトの名無しさん:2010/03/28(日) 20:45:50
みなさんのおかででうまくいきました!

unsigned char *ptr, cr = '\n';
ptr = _mbsrchr(a, cr);
a[ptr-a] = '\0';


481 :デフォルトの名無しさん:2010/03/28(日) 20:56:12
>>480
if(ptr) *ptr='\0';
にすればいいのに

482 :デフォルトの名無しさん:2010/03/28(日) 21:10:08
改行が無かった場合の事も考えてやれよー

483 :デフォルトの名無しさん:2010/03/28(日) 22:01:05
>>461,462
フラッシュされるかではなくて。
zshでやってみたらいいたいことが分かると思う。
で、それはバグとかじゃなくてunix系における行の扱いを厳密にした結果。

484 :デフォルトの名無しさん:2010/03/28(日) 23:21:35
プログラムが終了するときに出力が全部フラッシュされると
昔は思い込んでたもんだ

485 :デフォルトの名無しさん:2010/03/29(月) 00:05:06
>>483-484
少なくともC言語の範囲内では exit() の呼び出しおよびそれと同じ効果である
main() の終了時には全部のストリームがフラッシュされることになってるんだけど、
「unix系における行の扱い」とか何のこと言ってるの?

486 :デフォルトの名無しさん:2010/03/29(月) 00:05:40
また、重箱の隅をつついてほとんどの場合正しいことをめったにないケースを挙げて得意になって指摘する人が来たよ

487 :デフォルトの名無しさん:2010/03/29(月) 00:14:04
>>486 えーと。それ >>483-484 へのレスだよね?

488 :デフォルトの名無しさん:2010/03/29(月) 00:20:18
>>487

そうそう

489 :デフォルトの名無しさん:2010/03/29(月) 00:22:06
天才ハッカーは重箱の隅を突いてだな

490 :デフォルトの名無しさん:2010/03/29(月) 00:26:35
>>486
環境限定って最初に書いてるから問題ないでしょ
それに、フラッシュされるかどうかは関係ないって>>483が書いてるのにフラッシュされることをアピールしてもしょうがない

491 :デフォルトの名無しさん:2010/03/29(月) 00:29:43
https://www.codeblog.org/viewsrc/zsh-4.3.2/Functions/Prompts/promptinit
このことだろうか。それなら意図的に出力をクリアしているように見えるが。。。

492 :デフォルトの名無しさん:2010/03/29(月) 00:30:04
>>490
フラッシュされるかどうかと画面に表示されるかどうかが関係ないの?なんで?

493 :491:2010/03/29(月) 00:32:05
プロンプトを出力する時に\rされて、出力されても消えちゃうことがあるよということだと思う。
それがunix的にどうとかいうのはわかんない

494 :491:2010/03/29(月) 00:35:37
ファイルの最終行はEOFのみでなければならない、というルールが
何かであったのを思い出したけど今回のと関係あるかな?

495 :デフォルトの名無しさん:2010/03/29(月) 00:38:22
プロンプトにCLS入れてたら改行してたって画面に表示されないこともあるね。くだらない。

496 :デフォルトの名無しさん:2010/03/29(月) 00:40:30
それが標準設定になっているシェルがあるなら、ね

497 :デフォルトの名無しさん:2010/03/29(月) 00:54:42
fgetsとかが改行ごとのタイミングで処理されるのと関係あったりすんの?
getchって環境依存であってる?

498 :デフォルトの名無しさん:2010/03/29(月) 00:59:41
>>490
ハッカー?
誰がそんな話してんだよw

論点すり替えんなよ

499 :デフォルトの名無しさん:2010/03/29(月) 01:24:50
イミフ

500 :デフォルトの名無しさん:2010/03/29(月) 02:03:19
>>496
じゃあ標準でzshの環境がどれだけあるんだ。
くだらないことぐだぐだぬかすな。

501 :デフォルトの名無しさん:2010/03/29(月) 02:11:17
標準とは最初に提供しているだけでシステム管理者の都合次第で可変であるべき。
決して押しつけの標準であってはならない。

502 :デフォルトの名無しさん:2010/03/29(月) 02:35:05
>>500
それは反論になってないだろ。。。

503 :デフォルトの名無しさん:2010/03/29(月) 02:51:25
なんで >>483
「zsh みたいにプロンプトに CR が入ってると見えなくなることもあるよ」
といわずにあんな言い方をしたんだろうか?

504 :デフォルトの名無しさん:2010/03/29(月) 07:10:47
C言語でerror C4028が出ます。
formal parameter 3 different from declarationです。
しかし、そこの行を見ると宣言どおりの仮引数のとおりに実引数を渡しています。

関数が仮引数2つで宣言されており、そこに渡す型も間違えずにちゃんと実引数を渡しているのですが、
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
なぜか、上記のように「3番目の引数が違う!」とエラーがでます。
仮引数がもともと2つしかないのに、なぜ存在しない3番目の引数についてエラーがでるのでしょうか?

原因わかるかたよろしくお願いします。


505 :デフォルトの名無しさん:2010/03/29(月) 07:17:11
ちょっと自分で試行錯誤した結果、補足です。
その関数は引数2つをもつのですが、1つ目の引数にはコールバック関数を指定します。
自作したコールバック関数をセットしたのですが、そのコールバック関数は引数を3つもっており、
なぜかそこでエラーがでている感じです。コールバック関数の引数を無理やり4つにすると、エラーがでずに正常にコンパイルできます。
いったいどういう現象なんでしょうか?これ

506 :デフォルトの名無しさん:2010/03/29(月) 07:24:34
ていうか、コールバック関数の場合、そっちが先にエラーになるんですね…
なんだろう…、まあ解決したんで放置でいいです

507 :デフォルトの名無しさん:2010/03/29(月) 07:41:46
>>503

そういう、人いるじゃん、質問とかしてもダイレクトに答えずに
逆説的な質問でかえすとか
ミスを指摘するときでもはっきり言えばいいのに質問で言ってくる人とか


508 :デフォルトの名無しさん:2010/03/29(月) 07:45:58
ろくな知識もないアホにケチつけられたら厭味の一つも言いたくなるだろ。

509 :デフォルトの名無しさん:2010/03/29(月) 08:13:33
>>504-505
コードを示してくれないとアドバイスのしようがないぞ。


510 :デフォルトの名無しさん:2010/03/29(月) 08:13:43
>>494
EOFという文字はありません、今は。

511 :デフォルトの名無しさん:2010/03/29(月) 09:00:56
>>510
昔からですが。

512 :デフォルトの名無しさん:2010/03/29(月) 09:03:28
これからは?

513 :デフォルトの名無しさん:2010/03/29(月) 09:16:22
^Z

514 :デフォルトの名無しさん:2010/03/29(月) 12:29:03
>>511
昔はありました。

515 :デフォルトの名無しさん:2010/03/29(月) 12:53:24
>>514
ありません。

516 :デフォルトの名無しさん:2010/03/29(月) 13:04:58
EOFで無ければならない。というのはあったね。
パソコン通信の頃。

通信中に途切れたら途中で終わったのか解らないし
EOFを見て通信を切断するなんて事ができなくなるじゃん。


517 :デフォルトの名無しさん:2010/03/29(月) 13:09:16
>>515 http://ja.wikipedia.org/wiki/End_Of_File

518 :デフォルトの名無しさん:2010/03/29(月) 13:20:44
>>517
それはEOFコードだろ。それなら昔からあるし、今もある。

519 :デフォルトの名無しさん:2010/03/29(月) 13:25:19
>>518
EOF文字は無いがEOFコードはあると、そうおっしゃるのですか?

http://www.google.co.jp/search?q=%22EOF%E6%96%87%E5%AD%97%22
"EOF文字" の検索結果 約 1,910 件

http://www.google.co.jp/search?q=%22EOF%E3%82%B3%E3%83%BC%E3%83%89%22
"EOFコード" の検索結果 約 1,800 件

http://www.google.co.jp/search?q=%22EOF+character%22
"EOF character" の検索結果 約 10,400 件

http://www.google.co.jp/search?q=%22EOF+code%22
"EOF code" の検索結果 約 18,300 件

くだらない。

520 :デフォルトの名無しさん:2010/03/29(月) 13:29:10
だから
EOF文字>>513じゃね?
EOFコードは0x1a

521 :デフォルトの名無しさん:2010/03/29(月) 13:30:43
昔は、0x1a以降を読み込まない環境があったなぁ

522 :デフォルトの名無しさん:2010/03/29(月) 14:06:36
まともなテキストエディタならEOFを追加する、しないの選択オプションが設定できるだろ。

523 :デフォルトの名無しさん:2010/03/29(月) 14:18:37
Emacs も vim もまともなエディタじゃないから。

524 :デフォルトの名無しさん:2010/03/29(月) 14:42:47
うむ。エディタじゃなくて思想だな。

525 :デフォルトの名無しさん:2010/03/29(月) 15:12:08
今時、保存時に暗黙にEOFを追加するなんて阿呆なエディタなんかあるのか?

526 :デフォルトの名無しさん:2010/03/29(月) 15:26:27
ああ、今日もまたCプログラマたちが細けえことでもめている

527 :デフォルトの名無しさん:2010/03/29(月) 15:30:32
NOT プログラマ BUT ヲタ


528 :デフォルトの名無しさん:2010/03/29(月) 15:55:16
>>519
じゃなくて「今は」とか言い出した奴がアホなだけだろ。
昔あったらんなら今もあるし。昔ないんだったら今もない。

で、そういうやり取りもわってないお前もアホだわ。

529 :デフォルトの名無しさん:2010/03/29(月) 15:58:06
> 昔あったらんなら今もあるし。昔ないんだったら今もない。
その理論はおかしいw

530 :デフォルトの名無しさん:2010/03/29(月) 16:12:42
>>529
理論でなく、現実のことを言ってるんだ。

そもそも >>510 がアホなこと言ってるから、それを否定しただけ。
これが正しいかどうかなんだよ。

531 :デフォルトの名無しさん:2010/03/29(月) 16:20:25
昔あったが今はない→幸か不幸か絶滅した
昔ないなら今もない→さすがにそれはちょっと

532 :デフォルトの名無しさん:2010/03/29(月) 16:35:01
>>531
>昔あったが今はない→幸か不幸か絶滅した
だとしたら何が全滅したの?^Zなら今もあるだろ。

>昔ないなら今もない→さすがにそれはちょっと
意味不明。

具体的に昔あって今ない物って何なの?
そんな物ないだろってこと。あるなら具体的に言えばいいのに。

533 :デフォルトの名無しさん:2010/03/29(月) 16:41:22
>昔ないなら今もない

おいおい

534 :デフォルトの名無しさん:2010/03/29(月) 16:47:57
>昔ないなら今もない

ほほう

535 :デフォルトの名無しさん:2010/03/29(月) 16:54:51
>昔ないなら今もない

ふがっふふん

536 :デフォルトの名無しさん:2010/03/29(月) 16:58:48
> 昔あったらんなら今もあるし。昔ないんだったら今もない。

オツムがあまり良くないという自覚が少しでもあるなら
下手な喩えは金輪際やめたほうがいい

そういう前提でしか見てもらえなくなるので
つまらん事でバカにされるのも辛いだろ


537 :デフォルトの名無しさん:2010/03/29(月) 17:02:20
emacsって日本語配列のキーボードじゃ無理があるよね
ideだとvimのキーバインドが無いのが痛い

538 :デフォルトの名無しさん:2010/03/29(月) 17:03:18
>昔ないなら今もない

たりらりらー

539 :デフォルトの名無しさん:2010/03/29(月) 17:11:33
>>536
>>510 「EOFという文字はありません、今は。」
ということに対して、

EOF という文字(0x1a や ^Zで表現される終了コードとしての文字)は今もあるし、
そういう意味でなく、EOF は文字でないというのなら、それは昔も今も同じこと。
どっちの主張かわからんが、いずれにしても >>510 の認識は間違っている。

と言ってるだけだろ。どうしてこんな簡単な理屈がわからないんだ。
ちょっと頭悪すぎない?

540 :デフォルトの名無しさん:2010/03/29(月) 17:13:26
春休みなんだから、許してやれ。

541 :デフォルトの名無しさん:2010/03/29(月) 17:20:18
>>540春脳乙

542 :デフォルトの名無しさん:2010/03/29(月) 17:33:36
>>532
お前頭悪いだろw
変な想像働かせないで素直に読めよw

543 :デフォルトの名無しさん:2010/03/29(月) 17:40:36
>>539
そういう言い方では厨房には通じないよ。
ちょっとじゃなく相当悪いんだよ。
今はゆとり教育なんだからね。

544 :デフォルトの名無しさん:2010/03/29(月) 17:44:13
教育関係無いレベル

545 :デフォルトの名無しさん:2010/03/29(月) 17:48:18
>>543
わかんないよ

> 昔あったらんなら今もあるし。昔ないんだったら今もない。
こんな喩えをする人の脳内構造は分からないからね


546 :デフォルトの名無しさん:2010/03/29(月) 17:57:06
>>545
内容も理解せずトンチンカンなレスばっかりつけるのやめようね。
見苦しいだけだから。

547 :デフォルトの名無しさん:2010/03/29(月) 18:00:31
>>545
そりゃ他人の脳内はわからんだろうけど、
簡単な日本語ぐらいは理解しようや。

548 :デフォルトの名無しさん:2010/03/29(月) 18:02:57
>>532
プテラノドンとか今はいないよ
その時代に人間はいなかったから今もいないというのはちょっと

549 :デフォルトの名無しさん:2010/03/29(月) 18:04:23
でた、中学生の屁理屈w

550 :デフォルトの名無しさん:2010/03/29(月) 18:05:22
>>548
君は何の話してるの?EOFと関係ないじゃん。

551 :デフォルトの名無しさん:2010/03/29(月) 18:06:46
おじさん達も暇だね

552 :デフォルトの名無しさん:2010/03/29(月) 18:10:42
「EOF」が昔ないなら今もない
ってのの主語を省略したんだよな

それで、話の流れを見ない人たちが
>昔ないなら今もない
の文だけ読んで

なんだそれプゲラwの大合唱が始まった

それにたいしてプテラノドンとか人間とか、もう馬鹿すぎ

ちなみにEOFに関しては俺はわからんから上記の発言の人を肯定してるわけではない
まぬけなレスだって指摘なだけ

553 :デフォルトの名無しさん:2010/03/29(月) 18:13:10
頭おかしいんじゃないの?

EOFに限らず
> 昔あったらんなら今もあるし。昔ないんだったら今もない。
こんなものは存在しません。
その存在しないものを喩えるバカがいたら
デカルトからも突っ込み入るw

554 :デフォルトの名無しさん:2010/03/29(月) 18:16:23
>>552
「EOF」が昔ないなら今もない
という主語があったとしてもこれほど間の抜けた理論はなかろ

555 :デフォルトの名無しさん:2010/03/29(月) 18:22:22
>昔ないんだったら今もない。
名言だな


556 :デフォルトの名無しさん:2010/03/29(月) 18:25:03
それに当てはまる主語をがんばって見つけないとな

557 :デフォルトの名無しさん:2010/03/29(月) 18:26:04
か、彼女の事か?

558 :デフォルトの名無しさん:2010/03/29(月) 18:26:42
おさななじみ。。。

559 :デフォルトの名無しさん:2010/03/29(月) 18:28:52
全部書かないをわからないのもどうかと思うが、
全部書いてやっても理解できないのか、引込みがつかなくてなってるのか、
どっちにしても情け無いやつだな。

560 :デフォルトの名無しさん:2010/03/29(月) 18:30:03
>>553
君、本当に大丈夫か?

561 :デフォルトの名無しさん:2010/03/29(月) 18:31:45
とりあえずEOFは昔からあって、今もあるということだね。

562 :デフォルトの名無しさん:2010/03/29(月) 18:32:14
「彼女」とか?w

563 :デフォルトの名無しさん:2010/03/29(月) 18:37:28
>>557
>>562
被ってるから^^;

564 :デフォルトの名無しさん:2010/03/29(月) 18:37:59
学生時代の楽しい思い出とか

565 :デフォルトの名無しさん:2010/03/29(月) 18:39:15
>>553 の言いたいことがまじでわからん

566 :デフォルトの名無しさん:2010/03/29(月) 18:40:35
答えは「希望」でした。

567 :デフォルトの名無しさん:2010/03/29(月) 18:41:04
関係ありそうでなさそうなんだけど、
人が想像可能な事象はすべて実現可能である、というのは誰の言葉だっけ?

568 :デフォルトの名無しさん:2010/03/29(月) 18:41:47
>>567
ジュール・ヴェルヌ

569 :デフォルトの名無しさん:2010/03/29(月) 18:42:35
>>568
即答トン

570 :デフォルトの名無しさん:2010/03/29(月) 20:34:26
規格の話はANSIスレ立ててそっちでやれクズども。
ちなみにANSIスレは昔あったが今はない。

571 :デフォルトの名無しさん:2010/03/29(月) 20:41:44
ガチスレでいいんじゃないの?

572 :デフォルトの名無しさん:2010/03/29(月) 20:59:33
よく階段で1階と2階とどっちでもスイッチのON・OFFできるやつがありますが
3階4階とか階数が増えてもどこでもON/OFFするにはどうするんでしょうか?
マイコンとか使ってプログラムを書かないとだめですかね
どんな感じのプログラムになるのでしょうか?

573 :デフォルトの名無しさん:2010/03/29(月) 21:12:27
>>572
スイッチが入るたびにON/OFFを切り替えればいい。スイッチの数が何個あっても同じ。

574 :デフォルトの名無しさん:2010/03/29(月) 21:21:00
階段の仕組みは 3路スイッチ、4路スイッチでぐぐれば出てくるけど、実際の工事となると免許が必要です
このスレで聞いてるのだから実際に線をひっぱってるわけじゃないとおもうが

575 :デフォルトの名無しさん:2010/03/29(月) 21:22:04
誤爆にもかかわらず回答どうもです 感謝します

576 :デフォルトの名無しさん:2010/03/29(月) 21:24:17
うおお4路スイッチすげえ!!
2階の上下でってのは知ってたしすぐ思い出せたけど、4路すげええ!!!

577 :デフォルトの名無しさん:2010/03/29(月) 21:26:27
工事には免許が必要ですから、素人がつけるのは絶対にやめましょう

578 :デフォルトの名無しさん:2010/03/29(月) 21:35:38
>>570-571
Cの規格に関係するような話、あったっけ?
ASCIIのEOFが云々、とか話したら出直せ言われると思う。

579 :デフォルトの名無しさん:2010/03/29(月) 21:39:16
>>577
自演乙

580 :デフォルトの名無しさん:2010/03/29(月) 21:41:36
>>578
ASCIIはANSI規格だボケ
おまえは出直さなくていいから戻ってくんな

581 :デフォルトの名無しさん:2010/03/29(月) 21:44:13
それと自演厨も戻ってくんな

582 :デフォルトの名無しさん:2010/03/29(月) 22:03:08
ANSI全般って広すぎない?

583 :デフォルトの名無しさん:2010/03/29(月) 22:09:05
>>579
どういう意味で自演と?

584 :510:2010/03/29(月) 23:37:18
>>515
>>517 に加えて。
CP/M に影響された MS-DOS のクックドモードでは ^Z があると、その後は読み込まない仕様です。^Z がすなわちEOFにあたります。
一方、^Z があるからといって読み込みをやめることはないモードもあります。
昔話ですけれどもね。
最近の若いもんは昔話には興味がないとみえますね。

585 :デフォルトの名無しさん:2010/03/29(月) 23:38:27
>>576
仕組みは簡単、両端に3極スイッチをおき、間に6極の入れ替えスイッチをおけばいいのです。

586 :デフォルトの名無しさん:2010/03/29(月) 23:52:20
仕組みは簡単とはいえ電力、電圧や切れたときの考慮などから多くの4路は使えない
ましてや家庭にあるようなより線なんかじゃスイッチに繋げられないだろうから知識を持った人じゃないと危険

587 :デフォルトの名無しさん:2010/03/29(月) 23:53:50
6極?

588 :デフォルトの名無しさん:2010/03/29(月) 23:56:29
リレー2個の保持回路

589 :デフォルトの名無しさん:2010/03/29(月) 23:59:06
>>586
知識だけじゃなく資格を持ってないと駄目だよ

590 :デフォルトの名無しさん:2010/03/30(火) 00:02:40
#define AAA と #undef AAA に関しての質問です。

c = a / b と d = a % b の計算を、
A : div_mul100M() ← 普通に直接 c=a/b; d=a%b; を1億回計算
B : _sid100M() ← インラインアセンブラによる c=a/b; d=a%b を、インライン関数 _sid() として、それを1億回呼び出す
C : sid100M() ← _sid() の#define関数版 sid() を、1億回呼び出す
http://codepad.org/R2wb4QpQ

これを gcc -o xxx xxx.c -pg として作った ./xxx を実行した後、gprof xxx で各関数の処理時間を見ると
div_mul100M() は 0.48秒、_sid100M()は1秒、sid100M()は0.29秒でした。

せっかくインラインアセンブラで組んでも、それを関数でパックしたら、直接c=a/b;d=a%b;と書くよりも遅くなってしまうようです。
だからインラインアセンブラは#define関数として定義したいのですが、以下のように
http://codepad.org/RZ4XjyNu
たとえば #define関数 sid() は、定義内で __SID_LOOP_END__: などのラベルを定義してるので、
一つのソースファイル中で一ヶ所からしか呼べなくなってしまうので困ってます。 (インライン関数版の _sid() なら複数箇所で呼べる)

インライン関数で組めば、ラベルの問題にそれほど悩まされずにすみますが、遅いです。(本末転倒

#define関数によるインラインアセンブラ内で、定義したラベルを局所的(#define関数内だけで通用するラベル)にする方法って
Cの文法に用意されてませんか? たとえば #undef を #define関数の定義中には書けませんが、それに近いニュアンスの方法など…

なにか#define関数でインラインアセンブラを書く上での、ウルテク的なものをご教授くだされば高栄です。

591 :デフォルトの名無しさん:2010/03/30(火) 00:05:48
##

592 :デフォルトの名無しさん:2010/03/30(火) 00:28:24
N階の場合2^(N-1)並列二分岐スイッチを各階に配置
各極の階間短絡を上手く選ぶ(ある一つの状態の個数が奇数個)
電力線はこれらを合流させたものを改めて各階に並列分配した
ものになる。

593 :デフォルトの名無しさん:2010/03/30(火) 00:44:42
n階ならn入力のxorでいいじゃん

594 :590:2010/03/30(火) 00:52:15
>>591
ありがとうございました。#define中で#undef できました。
http://codepad.org/oJln8V0J
ただ、どうやら#undef しても思ったような動きはしてくれないみたいでした。
もしかしたら goto文のラベル的なものだと思うのですが、Cのソースファイル中に書いたラベルを、解除する方法ってありますか?

たとえば、
A:
goto A;
のラベルA:を、どこか別の場所で del A:; って書くことで、ソース中の以前のラベルA: が消えて、delA:;した場所が新たなA:になるようなことをしたいです。


595 :デフォルトの名無しさん:2010/03/30(火) 01:23:55
こんなイメージしてます…
del X:; はラベルX:の置き換え、del0 X:;はラベルX:を「以前に定義されてたXを解除したので、ここ以降からX:を検索してください」という意味。

main(){
int i,j;
A:
B:

i=0;
del0 B:; // 現在定義されてるB:を"再"未定義にする
del A:; // A:の場所をここ再設定する
if(i++>10) goto B; // B:は"再"未定義されてるので、直近の"del0 B:;以降"からB:を検索する
goto A;
B: // 新たにB:を定義

i=0; del0 B:; del A:; if(i++>10)goto B; goto A; B:
i=0; del0 B:; del A:; if(i++>10)goto B; goto A; B:
i=0; del0 B:; del A:; if(i++>10)goto B; goto A; B:
//並べられる
}

無さそうですね…


596 :デフォルトの名無しさん:2010/03/30(火) 01:26:30
MasterState=POWER_OFF;
for(;;){
while( !SwitchStateChanged) sleep(100);//100ms毎にスイッチ状態をチェック
MasterState=(getParityOfSwitchState() % 2 ==0)?POWER_OFF:POWER_ON;
}

597 :デフォルトの名無しさん:2010/03/30(火) 01:30:13
なんでC言語スレで規格の話しちゃいけないの?

598 :デフォルトの名無しさん:2010/03/30(火) 01:47:28
ゲーム作りをしています。とある本に
「無限ループの中で変数を宣言する場合、staticを付けた方が良い」と書かれていました。
なぜでしょうか?

599 :デフォルトの名無しさん:2010/03/30(火) 01:51:51
根拠の無いアドバイスなんて気にすんな

600 :デフォルトの名無しさん:2010/03/30(火) 01:54:33
>>598
そんな質問する奴が、ゲーム作り?
どんなゲームか興味津々灘

601 :595:2010/03/30(火) 01:57:03
ちょっと思ったんですけど、ファンタジーの話ですけど、
もしもプログラム中で複数のラベルAが許可されてて、 goto A;によって、処理が複数並列化して、さまざまなラベル A:に飛んで実行をつづける。
ラベル Aは、ラベル A 自身で、自分をラベル B などに設定しなおせる。 del A:toB:;みたいな感じで。

つまり、”呼ばれる側”が、自分自身の”ラベルを自分で自由にできる”ならば、”呼ぶ呼ばない”の決定権は、通常のプログラムだと呼び出しがわのみにあるけど、
呼ばれ側が勝手に自由に決めることもできる。 ので、たとえばラベルAの他に、全然関係ないラベル Z: をポンと自分自身の中に設定して、
まったく予想もしないようなところから呼び出される、ってことが起こりうるので思いしろそうだと思いました。

とくに何がしたいってわけじゃなくて、単に「予想外のことがおこりそうでおもしろそうだ」ってだけですw

個々の演算単位が、それぞれ自分勝手に外とのインターフェース(ラベル)を変化させて、
プログラマーがまったく予想もしないようなところ同士が繋がって、予想外の演算結果をいくつも出すような、そんなイメージです。

function f0(){ A: } function f1(){ A: } function f2(){ A:} .....
function x(){ goto A: } main(){ x(); }
すると、複数の f() が並列で呼び出されて、個々のプロセスを勝手にはじめます。 で、もしも function f1(){ del A:toB:; } として、
もしくはラベルAを残したまま 新たにラベルB:を作るなどして、
f1() がラベルをBを持った瞬間、まったく別のプロセスとして実行されてた、たとえば function g(){ goto B; }などの新たなプロセス分岐先の
候補として f1() がポッと実行されるようになる。
こういうことで、予想外の、なにかおもしろい偶然がおこらないだろうか…と、漠然と思いつきました。 すぐ無限ループになりそうですが…w
すみませんCと関係なくて。失礼しました。

602 :デフォルトの名無しさん:2010/03/30(火) 02:05:17
>>598
C++ならばループするしないに関わらず任意のブロックで変数を
宣言できる。ループの場合でも変数がautoの場合は、作成/廃棄
がループの回数分繰り返されるのでパフォーマンスに影響を与える
ことがある(いつもではない)
staticにするとマルチスレッドにしたくなった時とか再帰呼び出し
をしたくなった時とかに困るかも

603 :デフォルトの名無しさん:2010/03/30(火) 02:44:31
作成/廃棄をループ回数繰り返すようなコンパイラなんてあんのかよw

604 :デフォルトの名無しさん:2010/03/30(火) 02:56:52
え。じゃいつ廃棄されるんですか

605 :デフォルトの名無しさん:2010/03/30(火) 03:24:23
プログラム終了時

606 :デフォルトの名無しさん:2010/03/30(火) 03:35:00
どうでもいい話だけど、Cellとか浮動小数点演算に長けているCPUって、
整数より浮動小数点を使ったほうが演算が早かったりするのかな

607 :デフォルトの名無しさん:2010/03/30(火) 03:37:49
>>597
入門編だから、というのが大抵の言い訳

608 :デフォルトの名無しさん:2010/03/30(火) 03:49:39
Cellはうんこ。専用のSIMD命令を使えば処理は早くなるけど面倒。
Cプログラマがアセンブラを書くような感覚。

609 :デフォルトの名無しさん:2010/03/30(火) 04:33:47
>>603
最適化をするコンパイラが多いが、ゲーム等では
最適化をされると迷惑な場合も多いので
(ゲームの場合、高速化を追求する部分も多いが
タイミングコントロールの為の時間つぶしの部分
も結構多く、強い最適化をされると困ることもあ
る)
最適化機能を外してコンパイルする場合も多い。
>>604
最後のループを出た時点で

610 :デフォルトの名無しさん:2010/03/30(火) 04:47:42
直近の}の時点じゃないんだ。。

611 :デフォルトの名無しさん:2010/03/30(火) 05:00:08
Cでdisp(a)とは、どういう意味になるんでしょうか?

612 :デフォルトの名無しさん:2010/03/30(火) 05:19:12
Microdoft Visual C++ 6.0で
C言語の勉強はできるでしょうか?
まず起動のし方すら分からないですが・・・。

613 :デフォルトの名無しさん:2010/03/30(火) 05:26:14
>>609
それvolatileでどうにかならんの?
あれは省略を防止するだけ?

614 :デフォルトの名無しさん:2010/03/30(火) 05:32:57
へぼがつくってるだけでしょ

615 :デフォルトの名無しさん:2010/03/30(火) 05:46:36
>>611
disp() に特に特別の意味はないような気がします。
ソース中に disp() を定義しているようなところはありませんか?

616 :デフォルトの名無しさん:2010/03/30(火) 06:39:56
>>608
CELLの画像デコード処理はとんでもなく高速だったぞ

617 :デフォルトの名無しさん:2010/03/30(火) 06:41:21
>>612
Cはもちろんコンパイルできるし、的確なエラーや警告を出してくれる
ただそれを使って勉強というのはおかしい。C言語の勉強はC言語の良書やHPを使ってするもの。

618 :デフォルトの名無しさん:2010/03/30(火) 06:58:54
おかしくはねーだろ
教科書や教師だけでなく、ノートや鉛筆だって勉強に使うという表現はただしい

619 :デフォルトの名無しさん:2010/03/30(火) 07:02:53
この上無くどーでもいい話だろソレ

620 :デフォルトの名無しさん:2010/03/30(火) 07:05:15
CのインタプリタでGUIが作成できるやつはありますか?
Tcl/tk見たいな感じで

621 :620:2010/03/30(火) 07:06:35
言い忘れましたWindows環境です

622 :デフォルトの名無しさん:2010/03/30(火) 07:16:49
>>617
本など見なくてもインターネットに腐るほど資料が満載

623 :デフォルトの名無しさん:2010/03/30(火) 07:18:07
へえ

624 :デフォルトの名無しさん:2010/03/30(火) 07:35:14
>>620
すべての言語はインタプリタもコンパイラでもどっちもある。
でも、名前はしらん

625 :デフォルトの名無しさん:2010/03/30(火) 07:41:55
ふーん

626 :デフォルトの名無しさん:2010/03/30(火) 07:46:45
>>622
Hpなんてどこも、同じような程度のところまでしか書いていない。
Cだと、精精、構造体の配列なりリストなりを作成するくらいまで?

そのあとのCらしい、LinuxカーネルハックやWinDDKでのドライバ作成なんてのは
ほとんどない

627 :デフォルトの名無しさん:2010/03/30(火) 07:52:22
>>616
論点がずれている。>608は「処理は早く」なるとした上で「面倒」だとしている。
# それには私も同意。

>>612
今ならVisualStudioの2005だか2008だから無料で入手できるからそちらを使えば?
VC++6なんて制約多すぎるよ。

>>609
最適化を切るなんて信じられない。
最適化が迷惑なら、その部分だけ最適化なしでコンパイルすればいいので、
「コンパイルする場合も多い」とは思えない。

>>590
inline指定は最適化しない限り無視するコンパイラが多いと思う。
そもそも、プロファイラを使う時点で正しい処理時間は得られない。
最適化した状態できちんと処理時間を測るべき。
測る手段は、処理の前後でgettimeofday()でも使えばいい。
より厳密にはrdtscを使うべきだが、そこまでは要らないと思う。

628 :デフォルトの名無しさん:2010/03/30(火) 09:03:42
>>615
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10565.txt
このようなプログラムです

629 :デフォルトの名無しさん:2010/03/30(火) 09:07:43
しっかりあんじゃん



630 :デフォルトの名無しさん:2010/03/30(火) 09:10:18
>>628
1〜9行目で disp() という関数が定義されており、
その関数を呼び出している。
disp(a) の a はその引数。

関数と引数の意味ぐらいは自分で勉強しよう。

631 :デフォルトの名無しさん:2010/03/30(火) 09:14:45
>>630
ありがとうございます

632 :デフォルトの名無しさん:2010/03/30(火) 11:44:17
>>609
最適化で消えるようなコードでタイミングコントロールとかダメすぎる。

633 :デフォルトの名無しさん:2010/03/30(火) 12:16:48
>>632
自分の開発機以外で実行するとタイミングが合わなくなるプログラムだよ、笑えるじゃないか。

まぁどうせ春休みの連中だからw

634 :デフォルトの名無しさん:2010/03/30(火) 12:31:05
>>628

#include <stdio.h>

void disp(int num){
int i=8; while(i-->0){ putchar( ((num>>i)&1) + '0' ); }
putchar('\n');
}

void main(){
int a=0x56;
disp(a);

{
int s=a, n; a=0;
int i=8; while(i-->0){ n=(s>>i)&1; a=(a>>n)|(n<<7);}
}

disp(a);
}

if文消すパズル遊び〜(^_^ うごかないかも…


635 :デフォルトの名無しさん:2010/03/30(火) 13:13:21
ゲームでも普通、画面のVシンクなりそれに類するタイマーにあわせるから
(そこで待つから)
次のやつが来るまでに処理が終わっているのが前提であって
処理をあわせるために最適化をしないとかないよ

たとえばガチガチの最適化はなんかバグるからしないでおくべ、とかはあるけど

636 :デフォルトの名無しさん:2010/03/30(火) 13:31:02
gcc -fno-strict-aliasing とか付けてあるプログラムはよく見るな。
新規で書くならいいかげんにそんなもん付けずに動くコードを書けと思うが。

637 :デフォルトの名無しさん:2010/03/30(火) 13:59:59
ほとんどの場合は、コンパイラのオプティマイザのバグじゃなくて、元からあったバグが最適化の影響で顕在化しただけ。

638 :デフォルトの名無しさん:2010/03/30(火) 14:04:50
WindowsのDirectXは画面書き換えだけに傾倒する傾向があるからな
画面書き換えだけならば、確かにタイミングなんてハードウェアと
ドライバ(DirectX)が合わせてくれるから、画面情報を描くことに
専念すれば良い。そこではコンパイラの最適化はありがたい存在
で、コードの美しさ(最適化とは引き換えになる)を少しでも
損なわなくて済む。
しかしキーボード応答の部分はそうとも限らないね

639 :デフォルトの名無しさん:2010/03/30(火) 14:09:10
>>638
> しかしキーボード応答の部分はそうとも限らないね
え?なんで?

640 :デフォルトの名無しさん:2010/03/30(火) 14:16:07
キリッ

641 :デフォルトの名無しさん:2010/03/30(火) 16:50:14
普通ウインドウズのゲーム作る場合 画面上の押しボタンとかでなければ
シビアなゲームならイベント使わないでキーは自分でスキャンしに行く
コンパイラで最適化を止めるとなんでキーボード応答が良くなる?

そもそも実行速度にばらつきの多いWindowsで最適化だとタイミングがずれるとか話が変すぎ

サターンとかスーファミでタイミング取らないとキーが取れないとかあったけど
それでもキー見るときに待ち時間は明示してタイミングとるんであって
最適化とかしても待ち時間(最適化されちゃって)が消えたりはしない



642 :デフォルトの名無しさん:2010/03/30(火) 16:58:44
>コードの美しさ(最適化とは引き換えになる)

こいつは最適化するとコードが変化すると思ってるのか?

ま、出てくるバイナリのことだと思うけど
コンパイラが出したバイナリが最適化しなければ人間が見ても美しいものだと思ってるのか?
みてみりゃわかるけど(今時のコンパイラだとワケワカランから古いの探してきて)
コンパイラが機械的に出すものに美しさなんてないよな

643 :デフォルトの名無しさん:2010/03/30(火) 17:05:29
>>642
> こいつは最適化するとコードが変化すると思ってるのか?

そんな妙な解釈してるのお前だけだよ

644 :デフォルトの名無しさん:2010/03/30(火) 17:22:12
>>642
お前、頭悪すぎ

645 :デフォルトの名無しさん:2010/03/30(火) 17:24:25
コードジェネレータが最適化をしないと
ソースコード上で人が最適化をしなければ
ならない(出てくるバイナリコードダンプを
見ながら試行錯誤でやる徒労な作業)ことがある
ソースコードの可読性は下がるは、バグを
誘発するわでとてもじゃないが勧められる作業じゃ
ないがハードウェア周辺のコードでは
どちらみちコードの可読性など高が知れてるんで
(暗号的なマジックナンバーが多いし雑多な個性の
調停が多く論理的ではなく妥協的なだけなので
奇麗に書いても理解など容易ではない)
やると効果がある場合がある(った)。
そういう作業経験者はコードジェネレータは最適化
などせず機械的に翻訳してくれれば良いという人(だった)
つまりCを高級アセンブラとして使う人々

646 :デフォルトの名無しさん:2010/03/30(火) 17:28:28
そんな環境のゲームってなくね?

647 :デフォルトの名無しさん:2010/03/30(火) 17:29:10
>>645
>>642 以外はそういう意味に取ってるつーの

648 :デフォルトの名無しさん:2010/03/30(火) 17:29:45
iphone とか固定機種をターゲットにしてるならアリ

649 :デフォルトの名無しさん:2010/03/30(火) 17:32:52
>>645
>つまりCを高級アセンブラとして使う人々
昔は普通に __asm を使ってインラインですからね。

650 :デフォルトの名無しさん:2010/03/30(火) 17:33:26
iphoneで最適化するとキーが取れない???

つかアレにキーなくね?

651 :デフォルトの名無しさん:2010/03/30(火) 17:39:43
Hello world

652 :デフォルトの名無しさん:2010/03/30(火) 17:41:57
要するに

「ゲームとかで」って言っちゃったけどそれはふかしで

でも仕事によっては(特定の機械の制御とか)で人間が最適化やタイミング調整する必要があったりするから
へんにコンパイラに最適化されると出てきたバイナリの可読性も落ちるし、タイミングも狂う
だからコンパイラの最適化やらない場合もあるよ

ってことで良い?

653 :デフォルトの名無しさん:2010/03/30(火) 17:49:26
>>652 良くない。
コンパイラの最適化で動かなくなるようなプログラムしか書けないやつはバカ。

654 :デフォルトの名無しさん:2010/03/30(火) 17:51:44
まーた今日もCオタクたちが どうでもいい細けえことでもめてるよww

655 :デフォルトの名無しさん:2010/03/30(火) 17:53:06
>>653
常に何らかのタイマーが利用可能なわけじゃないぞ
バカっていうやつがry

656 :デフォルトの名無しさん:2010/03/30(火) 17:53:13
C言語なら俺に聞け(キリッ スレなんだから当然だろ

657 :デフォルトの名無しさん:2010/03/30(火) 18:19:40
何のタイマーもない、タイミングはプログラムの実行速度に依存してる制御とかあるの?
具体的に言うと何?

658 :デフォルトの名無しさん:2010/03/30(火) 18:21:24
>>657
Windows95 の起動シーケンス

659 :デフォルトの名無しさん:2010/03/30(火) 18:23:01
処理落ちしてほどよい難易度になった昔のシューティングゲーム

660 :デフォルトの名無しさん:2010/03/30(火) 18:40:10
ハードウェアにディレイポートがあれば、
ディレイポートへの書き込みとループでマイクロ秒単位の時間調節ができたりする。
volatileをきちんと使えば最適化は関係ないし。

661 :デフォルトの名無しさん:2010/03/30(火) 18:41:36
それらは、そのタイミングでないとまずいから最適化しないの?違うでしょ

そうじゃなくて、上記の例に当てはまるものは何?ってはなしだよ

662 :デフォルトの名無しさん:2010/03/30(火) 18:42:32
>>661

>>658-659へのレスね

663 :デフォルトの名無しさん:2010/03/30(火) 18:43:46
TSC相当の情報が読めるCPUなら、ビジーループを書いて時間調節することも可能。

664 :デフォルトの名無しさん:2010/03/30(火) 18:47:20
>>661
>>658 では電源投入後周辺機器のが起動するまでの時間待ちにビジーループを使ってる
高速なCPUだと待ち時間が短すぎて起動に失敗する

665 :デフォルトの名無しさん:2010/03/30(火) 18:50:53
だからといって、それを最適化をしていないんだって言い切れるの?

666 :デフォルトの名無しさん:2010/03/30(火) 18:56:24
>>665
あなたの主張は何なのさ

1.最適化で消えるような書き方をするな
2.プログラムの実行速度に依存してる制御を知りたい
3.その他

667 :デフォルトの名無しさん:2010/03/30(火) 19:02:13
3 プログラムの実行速度がかわると問題だから最適化しないよってって、どこの何?

実行速度が変わって困るならタイマーなりsleep入れるなり
つまり最適化で消えない方法をとるだろうし
それを最適化しないことによって保つってなんだろうなって思って
95の例だと最適化しようが止めようがCPUが早くなれば問題出るとおもうんだけど

668 :デフォルトの名無しさん:2010/03/30(火) 19:14:30
>>617
レスありがとうございます。
エラーが多くて困ってました。
ホームページでも調べてみます。

669 :デフォルトの名無しさん:2010/03/30(火) 19:14:55
>>667
問題の根本は時間待ちにビジーループを使うかどうかだよね

タイマーがあるならタイマーを使えばいいけど
タイマーがないならビジーループを使うしかないでしょ

でも、ビジーループは最適化の有無で待ち時間が変わってしまう

それだけの話

670 :デフォルトの名無しさん:2010/03/30(火) 19:23:04
Windows 95 の起動についてはタイマーを使えるから
タイマーを使うべきだった

どんな早いCPUでもこれだけ待てば大丈夫だろうって推測を技術の進歩が覆してしまったw

671 :デフォルトの名無しさん:2010/03/30(火) 19:26:38
ふーん、ちと不満ながらも納得しました



672 :デフォルトの名無しさん:2010/03/30(火) 19:33:26
落ち着いたところでみなさん>>620-621の僕に回答を

673 :デフォルトの名無しさん:2010/03/30(火) 19:44:27
>>672
むしろ質問を書き直すべき

674 :デフォルトの名無しさん:2010/03/30(火) 19:51:12
>>672
CINT で WindowsAPI を直で呼び出せばできるかも?
と思ったがコールバック関数をうまく渡せない気がする

#include <win32api.dll>
int main()
{ MessageBox(NULL, "Hello, World!", "", MB_OK); return 0; }

675 :デフォルトの名無しさん:2010/03/30(火) 19:57:31
えーと
Windows環境で
CのインタプリタでGUIが作成できるやつはありますか?
独自仕様なGUIたとえばTcl/tk見たいな感じで平気です
CINTも考えたんですが、そんな事やってるやつ見つけられなくてどうしてよいやらでした


676 :デフォルトの名無しさん:2010/03/30(火) 22:02:19
>>675
ふーむ
わからんぽ

677 :デフォルトの名無しさん:2010/03/30(火) 22:59:12
自分で画像表示してwinampみたいに独自UIで作れ

678 :デフォルトの名無しさん:2010/03/30(火) 23:05:37
TranslateMessage せずに GetMessage 以降を自分で頑張ればいける

679 :デフォルトの名無しさん:2010/03/30(火) 23:08:06
>>678
DispatchMessage だった

680 :デフォルトの名無しさん:2010/03/31(水) 00:00:24
GUIはHTMLで出してCGIみたいにすれば良いんでね?

つかTkからコマンドみたいにしてここの機能を呼べるんじゃねーの

681 :デフォルトの名無しさん:2010/03/31(水) 00:43:59
>>627
ありがとうございます。勉強になりました。これからなるべく rdtsc で時間を見るようにします。

sseのベクトル演算器を使って、長さ1024個のfloatの配列2本の、各要素同士を乗算する関数を書いて、(1024回の乗算)
その関数を1億回繰り返すのを、
2本のスレッドでそれぞれ並列処理させて、
合計で (1024 * 2 * 1億)回のfloar乗算を処理するのに、当方のCPU(pentium dual-core E6300 2.6GHz)で2.1秒でした。
1秒あたりの回数に直すと 2048億 / 2.1秒 で、約97.5ギガ回になります。 が、wikiでFLOPSを見たら、core2 quad ですら 52GFlOPSなので、
格下のCPUなのに97GFLOPS?なのは不可解です…もしかしてFLOPSとは、コア単体あたりの性能って意味なのでしょうか?(それでも47Gも出ちゃうのは変な気がする…)

コンパイルオプションは
gcc -o xxx xxx.c -lpthread -msse3 -march=core2 -O0
として、とくに-O2 などの最適化は切ってあるつもりなのですが… orz
もしかして、元データもちゃんと 2048 * 1億個のユニークなデータを用意しないと、キャッシュで演算省略とかされちゃうのでしょうか…はて

http://codepad.org/lDVCdTLL


682 :デフォルトの名無しさん:2010/03/31(水) 01:00:16
最近のプロセッサは最適化するからなw
値が0に近いとか結果が0になるような
場合乗算を省略したりするとか...

683 :デフォルトの名無しさん:2010/03/31(水) 01:04:05
は?

684 :デフォルトの名無しさん:2010/03/31(水) 01:20:08
Intelのニモニックは左から右だっけ?

685 :デフォルトの名無しさん:2010/03/31(水) 01:40:18
受け流したいの?

686 :デフォルトの名無しさん:2010/03/31(水) 02:03:15
>>682
少なくとも片方がNANとかだったら実質演算しないってことは
聞いたことがある。Intelコアの話かは忘れたが...

687 :デフォルトの名無しさん:2010/03/31(水) 02:05:02
>>684


688 :デフォルトの名無しさん:2010/03/31(水) 02:08:12
最近Cをはじめた学生です、
私のパソコンはのCPUはAthlon64 X2で BCC5.5でCを勉強しているのですが
この環境でコンパイルされたEXEはIntelのCPUでは動かないのですか?



689 :デフォルトの名無しさん:2010/03/31(水) 02:16:32
>>686
NANだってー!

690 :デフォルトの名無しさん:2010/03/31(水) 02:29:16
パイプラインのおかげさまでなんだか難しいことになってないっけ

691 :681:2010/03/31(水) 02:37:07
ふと並列処理を頭でイメージしてたら気づいたんですけど、
スレッドAとスレッドBで、どちらもXMM1とXMM2レジスタを使ってると、処理がごっちゃになっちゃうような気がした。

いや、よく知らないんですけど、SSEって、各コアに一個フルセットが用意されてるのですか? それとも複数コアで共有だったりするのですか?
もしもSSEが各コアに専用に1機づつ用意されてるとしても、(いや、実際そうだと思う…)しかし、pthreadで作ったスレッドが、
スレッドAはCPU1、スレッドBはCPU2と、ちゃんと分けられる保証も無いような気がします。どうなんでしょう?(それとも必ず分けられるのですか?)
もしもスレッドAとスレッドBが同じ側のコアを使ってしまったばあい、MMX1,MMX2を決め打ちして共有してるのは、なにかと危険な気がしました…
(もしかしてC言語が自動で調整してくれる?、いや、たぶんアセンブラに関しては放置される予感)

検算してないので計算結果がどうなってるか考えてなかったのですが、(とにかく掛け算機が回ればいいとだけ思って書いてたのでw)
スレッドA用と、スレッドB用とで、別のレジスタを使って専用に書いてやった方が安全なような気がしました。
つまりスレッドA用はXMM1 XMM2レジスタを使い、スレッドBはXMM3 XMM4を使う…みたいに専用に関数をべつべつに用意する方が良いような気がしました。

もしかしたら、ぜんぶ取り越し苦労かもしれませんが…はて。
(もしかすると、レジスタ退避などの調整はコンパイラが自動でやってくれるのかもしれませんが…??? いや、たぶん調整してはくれない予感)


692 :デフォルトの名無しさん:2010/03/31(水) 02:59:35
>>688
普通は動く。というか動かないEXEを作る方が難しい

693 :デフォルトの名無しさん:2010/03/31(水) 03:07:08
WinNTの場合、ファイルの終端にはEOFはついてないんですよね?
ところで、getchar()などでC言語でファイル開いた場合、終端の次を読むとEOFが帰ってくるのでしょうか?

694 :デフォルトの名無しさん:2010/03/31(水) 03:08:50
初心者ってよくBCC使ってるけど、なんでだろうな。

今BCC5.5でググって、上のほうに出たサイトを2,3見てみたら、
変なところに誘導されて、ダウソするところさえ見つからないのな。
俺なんか、この時点ですでにめんどくさい。

695 :デフォルトの名無しさん:2010/03/31(水) 03:08:59
>>688
HALのおかげでWindowsでコンパイルしたものはどんなCPUであれWindows上で実行できます。

696 :デフォルトの名無しさん:2010/03/31(水) 03:09:58
>>694
えっw

697 :デフォルトの名無しさん:2010/03/31(水) 03:12:01
>>694
面倒くさいよな

698 :デフォルトの名無しさん:2010/03/31(水) 03:12:26
>>694
BCC以外だったら基本的にVC++ぐらいしか選択肢がなくて、そのVC++が初心者には難解に見えるからじゃない?
Unix系と違ってWinのGNU使いづらそうだし…

699 :デフォルトの名無しさん:2010/03/31(水) 03:13:45
cygwin入れてcc main.cpp; ./a.exeでhello world!するのが一番簡単だよな

700 :デフォルトの名無しさん:2010/03/31(水) 03:22:26
>>691
コンテキスト切り替え(スレッドが非アクティブになる時にレジスタの値を退避したり、
スレッドがアクティブになるときにレジスタの値を復元する)のはOSの役目。
Win98、2000以降はXMMレジスタも対象になっているが、Linuxは知らん

以下のスレの方が詳しいと思うので、そっちで聞いてみれ

マルチスレッドプログラミング相談室 その8
http://pc12.2ch.net/test/read.cgi/tech/1253521167/

MMX SSE 3D NOW!のプログラミング
http://pc12.2ch.net/test/read.cgi/tech/1085749218/

701 :デフォルトの名無しさん:2010/03/31(水) 03:38:56
>>693
unix系でもEOFってのはファイルに書いてあるものではない。
既に終わりに達しているのになお読もうとした時に読む関数が返すもの。


>>694
VC6ってのもよくみる(例:>612)けど、不思議でしかたない。なんで6??

702 :デフォルトの名無しさん:2010/03/31(水) 04:02:06
>>701
書いてあるものもあるんですよね?
もちろん書いてあるとは見える形ではなく、バイナリのときにちょこっと

703 :681:2010/03/31(水) 05:57:04
インラインアセンブラにコメントで//と書いたところ以降がすべてコメント扱いになってて、実行されていなかったみたいです。速いわけです…orz
http://codepad.org/1R5dzauu
修正したら23秒かかりました。8.9GFlopsです。妥当な数字です。安心したというか、がっかりしたというか…w

>>700
出力される数字をみたら、たしかに混ざっては無い感じでした。ちゃんとOSがやってくれてるみたいでした。余計な心配だったみたいです。


704 :デフォルトの名無しさん:2010/03/31(水) 06:09:06
>>700>>703
LinuxもちゃんとMMXレジスタを退避するよ。
寧ろインテルコンパイラのお蔭でWindowsよりも一足早く最新CPUのアーキテクチャの恩恵を受けやすいし。

705 :デフォルトの名無しさん:2010/03/31(水) 07:21:02
>>701

6の後のやつからmfcすぐ使えなからじゃね
.netだと古いPCですぐ動かんし
プロジェクトファイルとかも変わるし 

cygwinはcygwin入れた人にしか見せられないし

とりあえずコマンドラインとかWinMainから始まるような物作るなら
bccとかvc6のほうが手っ取り早く見えるのは、わかる
bccは期限なしでフリーだし

あと学校でコレで間に合うって理由でBCCなりVC6なりを使い続けてるのもあるかも

706 :デフォルトの名無しさん:2010/03/31(水) 09:22:11
>>705
>cygwinはcygwin入れた人にしか見せられないし
人に見せられるようなプログラムをかけるようになるまでどれくらいかかるの?

707 :デフォルトの名無しさん:2010/03/31(水) 09:29:40
そんな考えじゃいつまでたっても人に見せられない

708 :デフォルトの名無しさん:2010/03/31(水) 09:32:57
しらんがな そんな統計データ俺が持ってるわけないの知ってるくせにきくなよ

だいたいさ、よく読めば
cygwinを避ける人が理由として、そう思うんじゃないかなって言う話だくらいわかるだろ


709 :デフォルトの名無しさん:2010/03/31(水) 09:33:44
708は706へのレスね

710 :デフォルトの名無しさん:2010/03/31(水) 10:03:43
>>702
getchar() の戻りは int でファイル終端を意味する値は マクロで定義された EOF

ASCIIコード 0x1a とは別物として区別できるぜ

711 :デフォルトの名無しさん:2010/03/31(水) 13:18:21
>>706
ちょっと複雑みたいだからこれを読んで
ttp://www.sixnine.net/cygwin/translation/devel/mno-cygwin-howto.html

712 :デフォルトの名無しさん:2010/03/31(水) 13:20:45
大学のPCからだと2chに書き込めないから
自宅に送信して代理書き込みさせるアプリを作りたいんだけどCだけでできますか?

713 :デフォルトの名無しさん:2010/03/31(水) 13:22:23
できる

714 :デフォルトの名無しさん:2010/03/31(水) 14:30:00
むしろ初心者はcygwinがなんなのか分からないまま詰む

715 :デフォルトの名無しさん:2010/03/31(水) 15:04:04
Vista以降で動くかどうかは知らんが
SFU(Service for UNIX)が一応MSが正規に対応している
UNIX On WInodows (SFUで検索すれば今でもDL可能だと
思うが未確認)

716 :デフォルトの名無しさん:2010/03/31(水) 15:22:05
あれ、すんげえクソだけどな
シェルの動作とか、名前パイプとかforkのところとか

717 :デフォルトの名無しさん:2010/03/31(水) 15:26:22
んじゃVirtual PCでLinuxでも動かして
その中のターミナルでやるのが吉か..
結構めんどいからな...
うNIX系だとテキストエディターの選択枝が
限られるし...
sshdでも動かしてターミナル経由とかFTP経由で
やるのが良いんじゃないかと

718 :デフォルトの名無しさん:2010/03/31(水) 15:30:01
当初の目的を見失ってる気がするが何をしたいんだ?

719 :デフォルトの名無しさん:2010/03/31(水) 15:40:55
WindowsでGUIアプリを組みたいとうのであれば
C言語C++言語での開発はあらかた役割を終えているんじゃ
ないかと...

720 :デフォルトの名無しさん:2010/03/31(水) 16:11:05
矩形を表すのになんでみんな右下の座標を+1してしまうの?

721 :デフォルトの名無しさん:2010/03/31(水) 16:15:20
つMSDN

722 :デフォルトの名無しさん:2010/03/31(水) 16:21:57
>>715
Vista以降、SFUはSUAとして標準搭載されたよ

723 :デフォルトの名無しさん:2010/03/31(水) 19:06:10
懐かしいなEOF
今はまず使わないよな

724 :デフォルトの名無しさん:2010/03/31(水) 19:12:09
今でもEOF使うわカスwww

725 :デフォルトの名無しさん:2010/03/31(水) 19:15:02
>>724
何か根本的な勘違いしてないか?

726 :デフォルトの名無しさん:2010/03/31(水) 19:27:40
今でもDOS環境ならCTRL+Zで入力おわりとかなかったっけ?
さすがに0x1aが読まれることは無かった気がするけど、どうだったっけか。

727 :デフォルトの名無しさん:2010/03/31(水) 19:43:13
catで短いその時だけ使うようなシェルスクリプトを作ってるときとか

728 :デフォルトの名無しさん:2010/03/31(水) 21:57:30
http://beebee2see.appspot.com/i/agpiZWViZWUyc2VlchQLEgxJbWFnZUFuZFRleHQYr_xrDA.jpg
'A',"A"の違いがわかりません
教えてください

729 :デフォルトの名無しさん:2010/03/31(水) 21:58:56
文字と文字列

730 :デフォルトの名無しさん:2010/03/31(水) 21:58:57
>>728
'A'は文字、"A"は文字列

はい、次

731 :デフォルトの名無しさん:2010/03/31(水) 22:02:52
俺のほうが一秒早かった。俺の勝ち。

732 :デフォルトの名無しさん:2010/03/31(水) 22:02:53
ありがたや

733 :デフォルトの名無しさん:2010/03/31(水) 22:02:59
>>728
'A'は文字, その文字に割り当てられた値を持つ. 10進数で65
"A"は文字列, その文字列の格納先のアドレスの値を持つ.

734 :デフォルトの名無しさん:2010/03/31(水) 22:46:25
>>711
この文書はもう古い。最近でたcygwin では -mno-cygwin のオプションはない。

735 :デフォルトの名無しさん:2010/03/31(水) 22:47:40
>>726
バイナリモードで open すれば関係ない。

736 :デフォルトの名無しさん:2010/03/31(水) 23:09:46
>>735
つまり、テキストモードでopenすると0x1a拾うってことか
はー未だにあるんだな

737 :デフォルトの名無しさん:2010/03/31(水) 23:16:20
>>733
詳しく有難うございます。


738 :デフォルトの名無しさん:2010/03/31(水) 23:22:28
>>736
伝説だけが流布してはいけないと思い、今作ってためしてみた。
bcc32 は ^Z を EOF と認識する。
gcc/cygwin は ^Z をみていない。(インストール時のオプションによるかもしれないが。)
http://ideone.com/k466Oe2D

739 :デフォルトの名無しさん:2010/04/01(木) 00:44:31
>>738
cygwin上だとlibc互換ていうかLinux環境のエミュレートだから
バイナリモードとテキストモードには、もともと違いが無いんじゃないか?

740 :デフォルトの名無しさん:2010/04/01(木) 00:49:13
Linux環境のエミュレートだとぉ?

741 :デフォルトの名無しさん:2010/04/01(木) 00:59:49
なんか文句あるんかコラ

742 :デフォルトの名無しさん:2010/04/01(木) 01:35:59
C言語で記述された
O/Rマッパーを作るとことは言語上不可能である

743 :デフォルトの名無しさん:2010/04/01(木) 01:42:56
ツッコミ待ちなの?

744 :デフォルトの名無しさん:2010/04/01(木) 01:43:53
エイプリールフールだからな

745 :デフォルトの名無しさん:2010/04/01(木) 01:48:43
C言語でDBへアクセスするための
データマッパーの美しい作り方ってどんなのがありますか?

746 :デフォルトの名無しさん:2010/04/01(木) 01:54:42
金払って人にやらせる

747 :デフォルトの名無しさん:2010/04/01(木) 01:55:54
>>739は2行しかないのに3箇所くらい気に食わない所がある

748 :デフォルトの名無しさん:2010/04/01(木) 01:59:31
4つじゃね?

749 :デフォルトの名無しさん:2010/04/01(木) 03:11:56
素直に仮想環境にうぶんつー入れる方が良い気がする

750 :デフォルトの名無しさん:2010/04/01(木) 04:17:15
DLLのエクスポート名を正しく取れるプログラムは数少ない。
まともに動いたので紹介しておく。
http://hp.vector.co.jp/authors/VA050396/tech_10.html

751 :デフォルトの名無しさん:2010/04/01(木) 10:27:22
>>738
cygwinなら仕方ない

752 :デフォルトの名無しさん:2010/04/01(木) 12:38:15
なんでCentOSじゃなくてうぶんつ人気なの?

753 :デフォルトの名無しさん:2010/04/01(木) 12:45:11
Linuxなら赤帽系にしておけ、って教わったのかな?
かわいそうにw
つか板違い。

754 :デフォルトの名無しさん:2010/04/01(木) 13:05:26
>752
たぶん更新が早くて新しいハードへの対応がよいから
fedoraやDebian GNU/Linuxもあるが
僕は、断然せんとくんだけどね
安定、サポートが長い、2038

赤帽なめんなよ

つか板違い

755 :デフォルトの名無しさん:2010/04/01(木) 13:29:55
仕事で赤帽使うこと多いけどな

つか板違い

756 :デフォルトの名無しさん:2010/04/01(木) 14:26:23
青帽のことも思い出してやってください。

つか勘違い

757 :デフォルトの名無しさん:2010/04/01(木) 14:58:20
fputsとwriteの違いが戻り値意外にわからないのですが、どうちがうのでしょうか?

758 :デフォルトの名無しさん:2010/04/01(木) 15:20:22
>>757
write って fwrite のことか?
そうでないならその write 関数を作った奴に聞け!

fwrite のことなら、どっちの関数もリファレンス見ればすぐに分かるだろ。
それでわからない部分があるならそれを具体的に書いて質問しろ。

759 :デフォルトの名無しさん:2010/04/01(木) 15:49:49
>>757
unix互換ライブラリにあるwrite()ならfputs()とはレイヤーが違うので要注意。

760 :デフォルトの名無しさん:2010/04/01(木) 16:33:16
> そうでないならその write 関数を作った奴に聞け!
ワロタ

761 :デフォルトの名無しさん:2010/04/01(木) 22:01:25
はじめまして
式を入力してください
x+3
5
という結果がでるコードを書きたいのですが
思うような結果がでません。ご指導お願いします。

#include "stdafx.h"
#include "stdio.h"

using namespace System;

int main(array<System::String ^> ^args)
{
int y=0,x=2;;
char s[256];
printf("式を入力してください\n",s);
scanf("%s",&s);
y=(int)s;
printf("%d\n",y);
return 0;
}

762 :デフォルトの名無しさん:2010/04/01(木) 22:13:02
言語は何?

763 :デフォルトの名無しさん:2010/04/01(木) 22:15:17
まあ
y = strtol(s, 0, 10);
とかかな

764 :デフォルトの名無しさん:2010/04/01(木) 22:24:21
>>761
初心者にはかなり難しいよ、それ。

事前に変数名と変数へのマップを作って、
入力文字列をパーズしながら木を作って評価して…



765 :デフォルトの名無しさん:2010/04/01(木) 22:35:08
CじゃなくてRubyなら簡単なのに。

766 :デフォルトの名無しさん:2010/04/01(木) 22:56:15
>>765
perlでやれ

767 :デフォルトの名無しさん:2010/04/02(金) 02:07:43
どう考えても言語勉強してるのに・・・

768 :デフォルトの名無しさん:2010/04/02(金) 03:17:03
加減算に限定、文字は一文字、エラーチェックはゼロ、
その他できるかぎり適当に書いたはずが、それでも結構な分量になるなあ

http://codepad.org/jpQuf9W7

769 :デフォルトの名無しさん:2010/04/02(金) 03:23:39
どうでもいいけどperlとかだと

$data = "入力された文字";
print eval $data;

二行でできた。

770 :デフォルトの名無しさん:2010/04/02(金) 03:33:02
適当な桁数の数字を
i=87291
ではなくて
i[0]=8
i[1]=7
i[2]=2
i[3]=9
i[4]=1
というように1桁ずつ別々に配列に代入していくには
どうしたらいいでしょうか?

771 :デフォルトの名無しさん:2010/04/02(金) 03:33:18
StrCalc3.8文字列の式を計算するDLL


ソフト詳細説明
「文字列の式」を計算する機能を提供する DLL です。
文字列で記述されている計算式を計算したり、文字列の連結を行う事ができます。

http://www.vector.co.jp/soft/win95/prog/se476820.html

772 :デフォルトの名無しさん:2010/04/02(金) 04:39:44
>>770
どこまでできて何がわからないのか、もっと絞って質問して。
自分でプログラムを書く気は無いなら、宿題スレへ。

自分が紙の上でどうやるかを分解していって、プログラムコードに置き換えるんだ。
この作業を自分でやらないのではいつまで経ってもプログラムを書けるようにならない。

773 :デフォルトの名無しさん:2010/04/02(金) 04:41:53
>>770
sprintf()かなにかで一旦文字列にしてから一文字ずつ加工するか、
10で割った余りを取り出してから10で割るロジックを繰り返すか。

774 :770:2010/04/02(金) 04:50:57
int num[1000];
char str[1001]="1000桁の数字";

for(i=0;i<=999;i++){
num[i]=(int)str[i];
}

これでやってみたら
num[i]に2ケタの数字が入ってうまくいかなかったんですよ

775 :デフォルトの名無しさん:2010/04/02(金) 04:53:14
num[i] = str[i] - '0';

776 :770:2010/04/02(金) 05:03:14
>>775
理屈はわかんないけどうまくいきました
ありがとうございます

777 :デフォルトの名無しさん:2010/04/02(金) 05:26:07
>>776
Cには純粋な文字型がないので、文字コードを整数値に変換しないといけない。
文字コードは大抵、'0'から'9'まで連続しているので、'0'との差を取ることで変換している。
従って、厳密には一対一対応させるべき。
switch (str[i]) {
case '0': num[i] = 0; break;
case '1': num[i] = 1; break;
:
:
case '9': num[i] = 9; break;
}

778 :770:2010/04/02(金) 05:29:09
>>777
なるほど

つまり>>774で出てきていた2ケタの数字は
'0'から'9'の文字コードだったわけですね

779 :デフォルトの名無しさん:2010/04/02(金) 08:12:04
'0'から'9'まで連続していることは規格が要求を明記してたはず。

780 :デフォルトの名無しさん:2010/04/02(金) 10:45:06
sscanfとかは使えない?

781 :デフォルトの名無しさん:2010/04/02(金) 10:47:22
'A'〜'Z'と'a'〜'z'は変態コード体系EBCDICで分断されてるけどな

782 :デフォルトの名無しさん:2010/04/02(金) 23:14:31
x a[A][B][]...[];
X = a;
とした時のXは何になるの?
何になるか決まりあるの?
決まりあるなら、その決まりにした理由は何?

783 :デフォルトの名無しさん:2010/04/03(土) 00:48:25
>>782
型は異なるが値としては
X==a==a[0]==a[0][0]==a[0][0][0]==a[0][0]...[0]==&a[0][0][]...[]

理由は知らない

784 :デフォルトの名無しさん:2010/04/03(土) 01:13:03
>>783
へーーー、値はそうなんだ。
で、型はどの型になるの? その型にする理由はなんですか?

785 :デフォルトの名無しさん:2010/04/03(土) 01:14:53
>>784
型はつじつまがあうようになってる

786 :デフォルトの名無しさん:2010/04/03(土) 02:49:44
やぁ、いまprintfの勉強をかねて、printfを自前でフルスクラッチで(stdarg.h以外には依存せずに)書いてる最中なのだけど
細かい部分の挙動や、普段使わないような記号の仕組み(たとえばaqや*)などの具体的な仕様が分からなくて困ってるんだ。

printfに関する一般的な仕様(posixなど?)を具体的な使用例ソースと共にまとめてあるページって、どこかに無いかな?
(英語は読めないので、できれば日本語のページが望ましい)


787 :デフォルトの名無しさん:2010/04/03(土) 10:43:35
>>786
manpage printf でググるとか

788 :デフォルトの名無しさん:2010/04/03(土) 15:21:16
>>786
glibc の printf() のソースを見て自分で仕様書を書く。


。。。なんてことはしなくても
JIS X 3010:2003 でぐぐって
JISC のページの PDF 見れば。
7.19.6.1 fprintf 関数。


789 :デフォルトの名無しさん:2010/04/03(土) 15:42:11
言語、げんげんご、言語!

790 :デフォルトの名無しさん:2010/04/03(土) 17:33:11
>>787
さっそくググってみたよ。
わおー、とてもクールなページでprintfのアウトラインをつかめた気がしたよ。ありがとう : )

>>788
やっほー、C99の仕様書らしきPDFが出てきやがったぜ。こいつはクールなPDFだね。
まだ読んでないけど、さっそくダウンロードしてみるよ。
それにしても書籍で買うと140ドル(!)もするのかい? わおー、やつら俺らの白髪を増やす気かい!

>>glibc の printf() のソースを見て自分で仕様書を書く。
glibcの挙動をマネるというアイディアには賛成さ。ボクにとってGNUのlibcはスタンダードlibcと言える存在だからね。
だけど、ソースを直接閲覧するというアイディアはノーグッド。なぜならglibcのソースはLGPLだからね。
LGPLコードから、たった一行コピペするだけで、そのコードはもぅ法的観点からGPLコード以外とはマージ不可能になってしまうのだろう?
恐ろしくてGPLのコードなんて見る気にならないよ

それにもともと、コーディングに関しては他を参考にせずに、自力でprintfをフルスクラッチするのが目的だしね : )


791 :デフォルトの名無しさん:2010/04/03(土) 18:02:28
テンパで度の強いメガネの白人みてえな文章だな
ハイスクールで背中に蹴ってくださいって紙張られてみんなにけられるタイプ
好きなおさななじみの女の子の前でしどろもどろ
声出して自分に話しかけるタイプ
「いいか、落ち着くんだ、そして言うんだ、デートしてくださいって」
「ああ、もうなんてお前は意気地なしなんだ、彼女行っちゃったじゃないか」

792 :デフォルトの名無しさん:2010/04/03(土) 18:21:46
>>790
コピペしなきゃいいじゃん。

無理やり違う実装で書くのも勉強になるぜw


793 :デフォルトの名無しさん:2010/04/04(日) 20:30:35
0x20って書いてあるんですが、これって半角スペースでしょうか??


794 :デフォルトの名無しさん:2010/04/04(日) 20:33:00
>>793
そうだよ。
アスキーコードでググればアスキーコード表くらい出てくると思う。

795 :デフォルトの名無しさん:2010/04/04(日) 21:07:16
>>794
アスキーコードですね。
ありがとうございます。

796 :デフォルトの名無しさん:2010/04/05(月) 12:20:59
0xの意味も知らないんだろうなぁー


797 :デフォルトの名無しさん:2010/04/05(月) 21:58:35
もっと手軽に使えるプログラミング言語探してるんですが、いいのありませんか?
環境はWinで文字列操作が簡単なやつがいいです。

798 :デフォルトの名無しさん:2010/04/05(月) 22:01:19
STL
Roadsend PHP

799 :デフォルトの名無しさん:2010/04/05(月) 22:01:51
>STL

おいおいw

800 :デフォルトの名無しさん:2010/04/05(月) 22:03:53
STLなら

a="はじめまして";
b="こんにちは";
a+b
と足し算できるが。

801 :デフォルトの名無しさん:2010/04/05(月) 22:25:40
awkやろうぜ!

802 :デフォルトの名無しさん:2010/04/05(月) 22:26:16
それってstd::stringの事か?
STLとは切り離して考えてるぞ

803 :デフォルトの名無しさん:2010/04/05(月) 22:30:07
├や└を配列に入れたいんだけど
方法ありますか?


804 :デフォルトの名無しさん:2010/04/05(月) 22:37:39
ふつうに入れればいいだろ

805 :デフォルトの名無しさん:2010/04/05(月) 23:16:07
文字列操作でイイなら
awkかrubyだろ

806 :デフォルトの名無しさん:2010/04/06(火) 00:41:53
文字列の比較って1文字ごとに比較より4バイトごとlongに纏めて比較みたいな感じの方が速い?

807 :デフォルトの名無しさん:2010/04/06(火) 00:45:56
どんな条件でも速いという決まりは無い
ガタガタ言わずに実測しろ

808 :デフォルトの名無しさん:2010/04/06(火) 00:47:43
感じの方が速い

809 :デフォルトの名無しさん:2010/04/06(火) 01:35:41
>>806
ステップ数から見れば速くなる実装は可能。

ただし、引数に何ならかの法則性があるなら
それに最適化した実装の方が速い可能性はある。


810 :デフォルトの名無しさん:2010/04/06(火) 01:39:27
>>806
アラインメントがズレると遅いかもしれない
実測するっきゃねー

811 :デフォルトの名無しさん:2010/04/06(火) 07:38:57
>>806
試してみた 同じなら0、違うなら0以外
http://codepad.org/V24NL75t

x_strncmp() : 1文字づつ比較する場合。19個 * 1千万回 = 0.68sec
xx_strncmp4() : 4文字づつ比較する場合。19個 * 1千万回 = 0.28sec

遅くなるかと思ったら速かった。頭がどうにかなりそうだった。


812 :デフォルトの名無しさん:2010/04/06(火) 10:02:00
>>811
strncmp とも比較してみてくれないか。 単純にx_strncmpをstrncmpにおきかえたら、 0.00secになっちまった。

813 :デフォルトの名無しさん:2010/04/06(火) 10:05:43
strncmpは既に最適化されてるから今回の話題とはずれるかも。

けど、x_strncmpとxx_strncmp4で機能に差があるのは良くない。
http://codepad.org/jWk8nqgg

814 :デフォルトの名無しさん:2010/04/06(火) 10:27:14
>>806
32bitCPUなら32bitごとが速い。

>>810
先頭から始めてるんだから、アライメントがずれることはないよ。

815 :デフォルトの名無しさん:2010/04/06(火) 10:35:30
strncmpを使うと速い。でFA?

816 :デフォルトの名無しさん:2010/04/06(火) 18:14:26
>>814
charの配列の頭がアライメント取れてるとは限らないんじゃね?
コンパイラとその設定によるとしか言えない。

817 :デフォルトの名無しさん:2010/04/06(火) 18:43:13
>>816
そんなことはない。配列の先頭や、構造体の先頭はきっちりしたアドレスなっている。
そうでないと、構造体でアライメント対策でパディングしても何の意味もないことになるだろ。
これは全てのC言語共通であり、設定で変えることも不可能。
(設定で変更できるのは構造体のメンバの先頭位置だけ。)

818 :デフォルトの名無しさん:2010/04/06(火) 19:23:47
>>817
http://codepad.org/cNxZ3VtM

きっちりしてる?

819 :デフォルトの名無しさん:2010/04/06(火) 19:35:57
>>818
きっちりしてるから必要最低限のサイズしかメモリを消費しない

820 :デフォルトの名無しさん:2010/04/06(火) 21:59:42
>>815
つか、アーキテクチャ依存に最適化されたbuilt-in関数が速い。

821 :デフォルトの名無しさん:2010/04/06(火) 23:20:29
>>804
windowsで
├や└を文字列配列に入れたいけどやっぱ入りません


822 :デフォルトの名無しさん:2010/04/06(火) 23:21:39
ロケールの問題じゃね

823 :デフォルトの名無しさん:2010/04/06(火) 23:28:46
|-とかにすればいけんじゃね

824 :デフォルトの名無しさん:2010/04/06(火) 23:38:33
>>821
っ「ワイド文字」

825 :デフォルトの名無しさん:2010/04/06(火) 23:41:23
>>819
「きっちり」とはどういう意味で言ってるんだ?

今の関心事は32bit-alignedであるかどうかだが、
>>818ではchar配列は32bit-alignedにはなっていない。

826 :デフォルトの名無しさん:2010/04/07(水) 00:55:21
>>811-820
そんなおまいさんたちには glibc の memcmp を進呈。


827 :770:2010/04/07(水) 01:00:56
test

828 :デフォルトの名無しさん:2010/04/07(水) 01:28:10
>>825
きっちりしているじゃないか
隙間があったら無駄じゃね
>>818はスタックだからそうなるんじゃね

829 :デフォルトの名無しさん:2010/04/07(水) 01:40:26
>>825
ネタにマジレス

830 :デフォルトの名無しさん:2010/04/07(水) 04:37:49
>>797
文字列はCが一番めんどくさい。それ以外ならなんでも簡単
JavaScriptなら何もインスコしなくてもWindowsだけで始められるぞ

831 :デフォルトの名無しさん:2010/04/07(水) 15:49:40
先生、質問です。

以下のようなコーディングってありでしょうか?
前提条件として、char* strの指すアドレスが他で利用されていない事前提での話ですが、
なんというかEffectiveC++みたいな常套手段のような知識としてアリなのか知りたいのです。

typedef struct {
  int value;
  char* str;
} Data;

Data* CreateData(const char* c) {
  Data* d = (Data*)malloc(sizeof(Data));
  d->value = 100;
  d->str = c;
  return d;
}

void ReleaseData(Data* d) {
  free(d);
}

void main(void) {
  Data* d = CreateData("This is Data.");

  // dを使ってシコシコする

  ReleaseData(d);
}

832 :>>831 修正:2010/04/07(水) 15:51:01
void ReleaseData(Data* d) {
  free(d);
  d = 0;  // ←ココ追加
}

よろしくお願いします。

833 :デフォルトの名無しさん:2010/04/07(水) 15:59:55
const char* c を受けてるのに char* d->str への代入?

Data 定義で str を書き換える気まんまんだし
c がリテラル文字列へのポインタだから、実際の書き換えを行って鼻から悪魔出しても文句は言えない

代入時のスコープから抜けた時に不安 とか 色々余計な心配事増やすぐらいなら
素直に複写するかな… ( d->str = malloc(strlen(c)+1); 〜 memcpy() )

834 :デフォルトの名無しさん:2010/04/07(水) 16:04:51
>>832
 Data* d = CreateData("This is Data.");
 printf("%p\n", d);
 ReleaseData(d);
 printf("%p\n", d);

-----
ReleaseData() 内部で d = 0 とやっても、呼び出し側のポインタが変るわけじゃーない

ReleaseData(Data** d) { free(*d); *d = 0; } とし ReleaseData(&d); と呼び出すか
マクロで NULL 代入する式を追加するかだな

835 :>>831:2010/04/07(水) 16:10:32
>>833 >>834 即レスどうもです。

>>833
リテラル文字を保持するつもりなのでおっしゃる通り const char* str; にしないとまずいですね。
ReleaseData()で開放という約束事があるので、ここは素直に複写するのがよさそうです。

>>834
うはぁw おっしゃるとおりです。ポインタの理解がまだまだですねorz
ReleaseData(Data* d) の Data* d はアドレスのコピーでしたね…
あーあー欝だ。

凄く勉強になりました! ありがとうございました!

836 :デフォルトの名無しさん:2010/04/07(水) 19:03:32
http://codepad.org/ckEchaCF
書いてて気づいたんですが、
DATA型全体をmallocする設計だと、DATA p を関数に渡すときに DATA* とするか DATA** として渡すか?などで、余計な思考を一段はさむ
必要があって、わずらわしいと感じました。
strだけでいいのではないでしょうか? mallocするのは。

たとえば、freeDATA(DATA* d); d=0; とするか freeDATA( DATA** d);とするべきか? 他のwriteDATAなどは(DATA*)なのに、freeDATAだけ(DATA**)なのは
設計として歪な気がする。だから freeDATA(d);のあとに手動でd=0としています。

これは、freeDATAで開放するのが DATA型全体だから、こういう煩わしい問題が起こるのだとおもいます。
もしも freeDATAで開放する対象がメンバの str のみならば、DATA** を渡す必要はないし、freeDATA(d)内で d->str=0;として有効になります。
(これなら freeDATA() にだけ、DATA** という変則的な引数にする必要がなく、他のメソッドと同じく DATA* であつかえて、簡単だと思います。)

おそらく、strを可変長にしたいという目的なのだから、mallocは strのみに行うような設計にすればどうか?と思いました。
そうすれば、DATA* か DATA** か?という煩わしい問題から解法されるので、余計な思考を一段はさむ必要がなくなって簡単になると思いました。)


837 :デフォルトの名無しさん:2010/04/07(水) 19:27:05
>>836
あーあCかわいそう
C++だとクラスに入れてデストラクタ書けばなーんも考えずに済むのに・・・・
生成パターンも使えるし

838 :デフォルトの名無しさん:2010/04/07(水) 19:42:12
C++のクラスは、Cの構造体のメンバとして関数アドレス追加したり、
構造体を階層的に定義するのと大差ないしなぁ

とか、あえて言ってみる

839 :デフォルトの名無しさん:2010/04/07(水) 19:42:52
RAII使えるかどうかだけで全然違うだろ
アホかいな

840 :デフォルトの名無しさん:2010/04/07(水) 19:50:52
>>838
大差ないだと?
じゃあ死ぬまでCだけで頑張ってね

841 :デフォルトの名無しさん:2010/04/07(水) 20:17:19
>>839
論点が分かってないようだが、C++の実行ロジックは、Cで組めるってことよ。
C++はコンパイラがより多くのコードを自動的に出力してくれる、ゆとり仕様の
高級言語(笑)ってこと

>>840
おう、おまいはC++で頑張れよ。腐ったコードのメンテナンスはCよりも
C++の方が100倍つらいわ

842 :デフォルトの名無しさん:2010/04/07(水) 20:20:57
Linus乙

843 :デフォルトの名無しさん:2010/04/07(水) 20:21:49
>>841
便利ならゆとり仕様と罵られようが俺はそっちを選ぶぜ

844 :デフォルトの名無しさん:2010/04/07(水) 20:24:21
>>841
論点が分かってないようだが、Cの実行ロジックは、アセンブリで組めるってことよ。
Cはコンパイラがより多くのコードを自動的に出力してくれる、ゆとり仕様の
高級言語(笑)ってこと

845 :デフォルトの名無しさん:2010/04/07(水) 20:25:16
>>841
>腐ったコードのメンテナンスはCよりもC++の方が100倍つらいわ

あーあジジイの頭ではこうなるのか
オブジェクト指向がなぜ開発されたかその経緯もしらないで

846 :デフォルトの名無しさん:2010/04/07(水) 20:25:38
>>844
論点が分かってないようだが、アセンブリの実行ロジックは、バイナリコードで組めるってことよ。
アセンブリはアセンブラがより多くのコードを自動的に出力してくれる、ゆとり仕様の
高級言語(笑)ってこと

847 :デフォルトの名無しさん:2010/04/07(水) 20:27:27
>>841
それからもう一つな

例外機構はCだけでは真似できない
だからC->C++トランスレータは今は開発不能

848 :841:2010/04/07(水) 20:29:58
うもう、冗談なのに。みんなマジレスしすぎ(´・ω・`)

849 :デフォルトの名無しさん:2010/04/07(水) 20:35:12
なんだっけ、記号に別な意味を持たせるとか
同じ関数名で引数違いで動作変えるとか
Cで無理なこといくらでもあるよな
同じようにアセンブラでも無理

CでC++をつくって自分を再解釈して再コンパイルとかするなら別だけど
出来上がった結果同じ動作をするものは作れるけど
どういうロジックで動いているかを真似るのは無理

850 :デフォルトの名無しさん:2010/04/07(水) 20:45:16
>>849
どっちかというと、コンパイラレベルの話だね。
同様の動作をする実行コードをつくるのは比較的簡単

851 :デフォルトの名無しさん:2010/04/07(水) 20:47:27
>>847
真似ならできるんじゃないか?

>>849
それは同じ記述ができないだけであって、同じ動作ができないというのとはまるで違う話では?

852 :デフォルトの名無しさん:2010/04/07(水) 20:48:23
>>850
でも例えばカプセル化は出来る?
全部publicになっちゃうでしょ?
プログラマが意識してpublicとprivateを見分けるなんてそりゃ基地外沙汰だぜ

853 :デフォルトの名無しさん:2010/04/07(水) 20:49:07
>>851
longjmp()とsetjmp()を使って似たような事は出来るが、C++の
例外機構を完全に真似る事は不可能です

854 :デフォルトの名無しさん:2010/04/07(水) 20:50:37
だから真似なら、と。

855 :デフォルトの名無しさん:2010/04/07(水) 20:51:15
真似だけな
それも大変な思いをしてな

856 :デフォルトの名無しさん:2010/04/07(水) 20:51:55
またC++の話題かいな
CとC++は別物だろ
専用スレもあるんだからほどほどに

857 :デフォルトの名無しさん:2010/04/07(水) 20:53:57
>>852
ソースをコンパイルして、オブジェクトファイルになった時点で
CとかC++とかアセンブラとか、あまり関係無い話になるってことよ

858 :デフォルトの名無しさん:2010/04/07(水) 20:56:29
C言語使ってC++のコンパイラ作ってC++のコードをコンパイルすればいい
ほらC言語だけでC++に出来ること全部できるぞ

859 :デフォルトの名無しさん:2010/04/07(水) 20:59:02
以下のように、ファイルを分割したプログラムを作ったのですが、
ビルド時にLNK2005エラーが発生してしまいます。
どこがいけないのでしょうか?
--- test.cpp ---
#include "test.h"
void main(){
#ifdef ATEST
Atest();
#endif
}

--- test.h ---
#ifndef TEST_H
#define TEST_H
#define ATEST
class A{}; //テストで使用するクラス
void Atest();
#endif //TEST_H

--- Atest.cpp ---
#include "test.h"
void Atest(){
・・・
}



860 :デフォルトの名無しさん:2010/04/07(水) 21:02:06
C++の話を聞きつけてここに来ちゃったのかしら

861 :デフォルトの名無しさん:2010/04/07(水) 21:10:09
>>844
実行ロジックが組める事と綺麗で安全に組める事は別問題だぜ
デストラクタをまともにCで書こうと思ったらgotoの嵐だし
ミスっててもコンパイラは何も言わない
安全性なんて気にしない!とか頭の湧いたこと言うならもう知らんが

862 :デフォルトの名無しさん:2010/04/07(水) 21:14:20
>>857
あまり関係ないだと?
そこまで持ってくまでがあまり関係あるでしょ
開発効率が全然違うんだけど

863 :デフォルトの名無しさん:2010/04/07(水) 21:19:33
>>838>>837の論点を理解せずに違う話をしているんだよね。
>>837の、C++で得られる利便性について話している人と
>>838の、同じ動作の実行ファイルはCでもC++でもできることについて話している人がいて
見てておもしろいからもっとやれ

864 :デフォルトの名無しさん:2010/04/07(水) 21:20:31
>>862
まず、コンパイラの話をしたいのか、実行コードの話をしたいのか
そこを明確にしてから話してくれると助かる

865 :デフォルトの名無しさん:2010/04/07(水) 21:25:33
http://codepad.org/hPjdfDuX
たしかに構造体と、その操作という組み合わせで組むのなら、C++の方が素直に書けるので簡単に読めて良いと思います。

個人的には、C++は単なる良いCとして扱う程度にとどめた方が分かりやすいと思ってます。
カプセル化と単一継承とテンプレート程度にとどめた素朴な使い方がいいと思います。
Cの「構造体とその操作」という方法の、単なる別記法としてのC++なら、それなら単なる良いCとしても読めますし。

あまり多態性を多用したコードは、個人的には、あれは苦手です…読みやすいとは思わないです…(頭が良さそうにはみえますがw)
プログラム中のあらゆる型をポリモフィズムで扱われると、あまりに抽象的になりすぎて具体的なコードが見え難くて、読むのがすごく大変だと感じます。


866 :デフォルトの名無しさん:2010/04/07(水) 21:31:40
>>857
誰もオブジェクトコードの話はしてないだろアホかww

ソースレベルの話をしてるんだが

867 :デフォルトの名無しさん:2010/04/07(水) 21:32:37
チラシの裏に書いてろ

868 :デフォルトの名無しさん:2010/04/07(水) 21:33:34
>>865
なぜこうではないの?

int DATA::write( const char* s ){
const char* src=s; int l=0; while(*src++!=0){l++;}
if(!str) delete[] str;
str=new char[l+1];
char* dst=str; src=s; while(l-->0){*dst++=*src++;} *dst=0;
return(0);
}

869 :デフォルトの名無しさん:2010/04/07(水) 21:35:17
>>865
クラス名が嫌。Dataじゃないのが嫌。
初期化リストで初期化しないのが嫌。
メソッド名が嫌。DATA::writeの実装が嫌。
strlenを使ってないのが嫌。strcpyやstrdupを使ってないのが嫌。
!strで先にdelete[]すればreturnスッキリするのに。
mainでreturn 0してないのが嫌。
ポリモってるつもりでDATA *d = new DPと書かないのが嫌。
同じくvoid f1(DP* d)としてvoid f1(DATA* d)としていないのが嫌。

870 :デフォルトの名無しさん:2010/04/07(水) 21:35:32
>>865
その程度しかC++を使いこなす能力がないのなら確かに無理は
しない方がいいわな

871 :869:2010/04/07(水) 21:36:11
おわー。リロードしてなかったすまそ。

872 :デフォルトの名無しさん:2010/04/07(水) 21:36:44
>>865 確かに C++ は仕事で使わないほうがよさそうだな、お前は。

873 :デフォルトの名無しさん:2010/04/07(水) 21:41:53
>>865
これはひどい

874 :デフォルトの名無しさん:2010/04/07(水) 21:47:37
>>869
おーい一つだけ
C++ではmain()でreturn 0;は省略してもいいんだぞ

875 :デフォルトの名無しさん:2010/04/07(水) 21:53:54
コーディングスタイルが嫌って言ってるだけで規格で駄目と言ってるわけではないだろ

876 :デフォルトの名無しさん:2010/04/07(水) 21:55:04
C++は難しいのう ヽ(゚∀゚)ノ

877 :デフォルトの名無しさん:2010/04/07(水) 21:59:06
Cは半月もあれば覚えられるお手軽言語でミニマム脳みそでも習得可能だからいいよな

878 :デフォルトの名無しさん:2010/04/07(水) 21:59:45
なんで至る所にDP::があるの
そんなに多態性をぶっこわしたいの

879 :デフォルトの名無しさん:2010/04/07(水) 22:10:22
>>865
http://codepad.org/WMMosOPl
むしゃくしゃしてやった。今はスレ違いを反省している。

880 :デフォルトの名無しさん:2010/04/07(水) 22:11:14
うむむおっぱい

881 :デフォルトの名無しさん:2010/04/07(水) 22:21:40
>>859
本当にそのコード?VC++2008では通ったぞ。
これじゃないの?
http://support.microsoft.com/default.aspx?scid=kb;ja;148652
それかここに全文貼ってみるか。
http://codepad.org/

882 :>>831:2010/04/08(木) 00:15:02
何この流れ…

つーか>>836 誰だよw

883 :デフォルトの名無しさん:2010/04/08(木) 08:39:11
>>882
お前こそ誰だよ

884 :デフォルトの名無しさん:2010/04/08(木) 19:23:02
オレオレ、俺だよ

885 :デフォルトの名無しさん:2010/04/08(木) 19:23:51
CとC++が全く別物であるということを理解した方がいいよw

886 :デフォルトの名無しさん:2010/04/08(木) 20:44:14
CよりC++の方が高等とか勘違いしている奴がいるから
C原理主義者が顔真っ赤になっちまうんだろ
しまいにはCとC++が同じときたもんだ

887 :デフォルトの名無しさん:2010/04/08(木) 21:02:35
template 厨はいないのか?

888 :デフォルトの名無しさん:2010/04/08(木) 21:23:15
>>886
C++の話題を出したらC厨が顔を真っ赤にして反論するよなw
しかも言っている事が支離滅裂
いやー楽しませてもらいました

889 :デフォルトの名無しさん:2010/04/08(木) 21:31:19
Cスレで++みたいなゴミの話する奴は開き直った荒らしなんだから相手するだけ無駄

890 :デフォルトの名無しさん:2010/04/08(木) 21:59:55
今日もまたCのやつらが細けえことで揉めてるよw
おやおや今回はC++のやつらも来てるなw

891 :デフォルトの名無しさん:2010/04/08(木) 22:24:39
C++(゚听)イラネ

892 :デフォルトの名無しさん:2010/04/08(木) 22:36:21
>>891
C++(゚听)イラネじゃなくてC++ワカラネだろw

893 :デフォルトの名無しさん:2010/04/08(木) 22:39:05
そりゃCのスレだしな

894 :デフォルトの名無しさん:2010/04/08(木) 22:40:52
++C

895 :デフォルトの名無しさん:2010/04/08(木) 22:41:59
CならC++でもいいけど、C++なら++Cのほうがよい。

896 :デフォルトの名無しさん:2010/04/08(木) 22:46:02
質問です。
これから新しくプログラミングを覚えようとしているのですが
CとC++のどちらを勉強すべきでしょうか?


こうですか?わかりません><

897 :デフォルトの名無しさん:2010/04/08(木) 22:47:33
もちろんRubyを学ぶべきだ

898 :デフォルトの名無しさん:2010/04/08(木) 22:51:56
当然冗談たよな?

899 :デフォルトの名無しさん:2010/04/08(木) 22:53:11
>>896
C++から学べ
Cなんて時代遅れの糞言語から入るとポインタの考え方が
身に染みついてC++が学習不能になる

900 :デフォルトの名無しさん:2010/04/08(木) 23:03:16
C++やるならJavaだろJK

901 :デフォルトの名無しさん:2010/04/08(木) 23:09:51
Javaは最後の最後まで手を出すな
一度はまると極度の怠慢さが身に付き二度とC/C++に復帰できなくなる

902 :デフォルトの名無しさん:2010/04/08(木) 23:11:20
ググって見ると

C# > Java = C++ > C >> VB = PHP > Perl  

的な感じで給料が違うように見える(あくまで主観だから、違う意見もあるだろうし、反論のための証拠も腐るほどあるだろうけど)
C#をすすめる

903 :デフォルトの名無しさん:2010/04/08(木) 23:14:14
Javaは言語云々よりライブラリの使い方を覚えるのが主な汚仕事ツール
VB辺りと同じで書いてる最中は面白くも何ともねぇ上に

自コードが車輪再発明と判った時の脱力感と他人の冷たい評価が辛すぎる。

904 :デフォルトの名無しさん:2010/04/08(木) 23:16:14
C#はダメだって
Windowsでしか仕事がないじゃないか

905 :デフォルトの名無しさん:2010/04/08(木) 23:17:01
いつも思うんだがCとC++を同列に考えてる奴って何?
ドイツ語とフランスぐらい違いがあるんだが

言語ごとに思考プロセスを切り替えられない奴は屑

906 :デフォルトの名無しさん:2010/04/08(木) 23:20:41
言語と国家ほど違うわけじゃないと思うぞ

907 :デフォルトの名無しさん:2010/04/08(木) 23:22:02
お前らまとめてマ板行け。

908 :デフォルトの名無しさん:2010/04/08(木) 23:22:45
だって、暇だし

909 :デフォルトの名無しさん:2010/04/08(木) 23:26:12
あの、質問いいてすか?

910 :デフォルトの名無しさん:2010/04/08(木) 23:26:57
日本語でおk

911 :デフォルトの名無しさん:2010/04/09(金) 00:03:55
Cスレで++みたいなゴミの話する奴は開き直った荒らしなんだから相手するだけ無駄
なんせ++が偉いとか新しいとか勘違いしてる中学生だからな

912 :デフォルトの名無しさん:2010/04/09(金) 00:10:36
新しいのは事実だろ

913 :デフォルトの名無しさん:2010/04/09(金) 00:15:09
偉いとも新しいとも言ってないし(笑)
C厨は被害妄想がいささかお強いようですね(笑)

914 :デフォルトの名無しさん:2010/04/09(金) 00:29:42
C++の勝ち組=クラスライブラリを提供する側
C++の負け組=クラスライブラリを利用する側

915 :デフォルトの名無しさん:2010/04/09(金) 00:33:55
Cの勝ち組=ライブラリを提供する側
Cの負け組=ライブラリを利用する側

916 :デフォルトの名無しさん:2010/04/09(金) 00:35:54
そうでもなくないか、と

917 :デフォルトの名無しさん:2010/04/09(金) 00:40:48
悔しいようですね
図星かw

918 :デフォルトの名無しさん:2010/04/09(金) 00:47:51
>>904
スレチだが、さすがにそれはないwと思ったのでレス

919 :デフォルトの名無しさん:2010/04/09(金) 00:48:40
Monoなんか仕事に使えるかいクソ

920 :デフォルトの名無しさん:2010/04/09(金) 00:53:56
まあ、クラスライブラリが無い状況でC++使ってもコード量が増えるわ、
実行速度遅くなるわで効率が悪くなるだけだしなぁ
JavaもC#も同じことだが

921 :デフォルトの名無しさん:2010/04/09(金) 00:55:08
Cの方がもっとひどいけどな

922 :デフォルトの名無しさん:2010/04/09(金) 00:56:07
どんなCだよw

923 :デフォルトの名無しさん:2010/04/09(金) 04:05:51
プログラマーなんてやってる時点で全員負け組だっつの

924 :デフォルトの名無しさん:2010/04/09(金) 11:37:48
しかしちょっとした軽いツールを作るにはCは最適だな
C++で書くとどうしても大げさになってしまう
でも今は勉強中なのでCで書いたものを必ずC++流に
書き直しています

925 :デフォルトの名無しさん:2010/04/09(金) 11:47:06
>>924
> C++で書くとどうしても大げさになってしまう
んなこたーない。

ほぼ C のコードのままコンパイルもできるだろうし、書き直すとしても
コードが簡単になるところだけにとどめておけばいい。
わざわざ「大げさ」になるように書き直してるところがあるなら、それは
そのプログラマが悪いだけのこと。言語のせいにするのは筋違い。

926 :デフォルトの名無しさん:2010/04/09(金) 11:53:44
>>925
いやね、char[]を全部std::stringに直して書いてるんだけど
とにかく簡潔に書けていた所がゴチャゴチャして

あとsprintf()はstd::ostringstreamになるわけでしょ

無理にそういうライブラリは使わなくても確かにいいけど、これも
勉強だと思って使ってます

927 :デフォルトの名無しさん:2010/04/09(金) 12:10:44
どの言語のスレでも、それをネガキャンして代替案をマンセーしてるのは決まってキチガイ

928 :デフォルトの名無しさん:2010/04/09(金) 12:45:08
>>924,926
× C++で書くとどうしても大げさになってしまう
○ 勉強だと思ってC++固有の機能を最大限使うように書くと大げさになってしまう

あたりまえだろ。

929 :デフォルトの名無しさん:2010/04/09(金) 13:09:48
人からもらったCコードの中に・・・

float *data, *data0;
data = data0 = (float *)malloc (sizeof (float) * 100);

なるものがありました。えっと2行目の意味がよくわかりません!
data0 = (float *)...
は、単精度浮動小数100個分のメモリを確保してその先頭アドレスをdata0に教えてあげました、
とおもうのですが、
data=data0
の部分がなにを意味するのかちっともわかりません。教えてえらい人!

930 :デフォルトの名無しさん:2010/04/09(金) 13:25:35
>>929
data = data0 = ... で data と data0 に同じ値を代入することになる。

931 :デフォルトの名無しさん:2010/04/09(金) 14:13:12
C++でツールを作ってみた
速い
なかなか速いじゃないか
つーかWindowsがC++で書かれているから、C++が遅かったら
Windowsも遅いという事になる

932 :デフォルトの名無しさん:2010/04/09(金) 16:05:50
おまえらスレチいい加減にしろよ

CでもC++でもどっちでもいいじゃん
どっちがいいかは人それぞれだし
って俺はどっちでも書くけど

933 :デフォルトの名無しさん:2010/04/09(金) 17:18:28
この話題はいつも荒れるなw
C++にもいいところはあるんだからさ
頭から否定しちゃだめだってば

934 :デフォルトの名無しさん:2010/04/09(金) 17:20:31
>>931

GDI周りとかファイル周りとかタスクの部分とかキモになるところはCだよ

もちろんWindowsは速いとはいえないけどね

つかさ君が作るツールって呼ぶようなくらいのプログラムでCでもC++でも今時差がでるかいな

935 :デフォルトの名無しさん:2010/04/09(金) 18:56:27
荒れるのは、CスレでCのネガキャンする奴が湧くからだろ
これで荒れない方がおかしいわ。言語の問題じゃない

936 :デフォルトの名無しさん:2010/04/09(金) 19:11:06
中途半端にCとC++で言語名が似てるのが問題だな

937 :デフォルトの名無しさん:2010/04/09(金) 20:27:38
>>934
Linuxより圧倒的に速いし、OSの中じゃWindowsは最速だと思うよ。

938 :デフォルトの名無しさん:2010/04/09(金) 20:28:50
Linuxより圧倒的に速いって、何を根拠に?

939 :デフォルトの名無しさん:2010/04/09(金) 20:31:37
Linuxはモノリシックカーネルだぞ
WindowsNT以降は部分的にもマイクロカーネルの技術を取り入れて
いるので各プロセス間通信が多く、結構オーバーヘッドになっている

そのため2000とXPではGDIを特権モードからユーザーモードに移したんだ
その後CPUの性能が上がって性能余り気味になったので、その余剰パワー
を活かしてVistaと7では先祖返りを起こしている

GDIに起因する脆弱性を減らすためだ

940 :デフォルトの名無しさん:2010/04/09(金) 21:38:04
カンマ演算子(関数の引数のカンマじゃなくて)って副作用完了して左から順に評価でおk?

941 :デフォルトの名無しさん:2010/04/09(金) 21:43:04
>>940
いみふ

942 :デフォルトの名無しさん:2010/04/09(金) 21:54:42
>>940
おk
そして全体の値は最後の値になる

943 :デフォルトの名無しさん:2010/04/09(金) 21:56:56
>>942
ありがとうございます!

944 :デフォルトの名無しさん:2010/04/09(金) 22:04:00
>>931
Windowsの大部分はCだ
Windows Internalsにちゃんと書いてある
てきとうなデマを流すなよ

945 :デフォルトの名無しさん:2010/04/09(金) 22:19:25
>>941
このスレでそこまで間抜けなら無理して書かなければいいのに。

946 :デフォルトの名無しさん:2010/04/10(土) 03:03:30
この板はなんでID非表示なんだよ。スレチ湧き過ぎだろ

947 :デフォルトの名無しさん:2010/04/10(土) 09:51:17
Linuxの見た目を軽いのにすると937はもっと幸せになっると思う
あるいは、マシンの構成に合わせて全部コンパイルしなおしてみるとか
びっくりするくらい速くなるよ

1個の商品として売ってるWindowsと、いくらでも個個の部分を変えれる物とくらべて
圧倒的に速いって言っちゃダメだよ

948 :デフォルトの名無しさん:2010/04/10(土) 12:48:39
ubntuってあんまり速くないんでそ?俺は便利だから使ってるけど

949 :デフォルトの名無しさん:2010/04/10(土) 12:56:15
速い印象はないけど、糞M$のような詐欺商法と違ってタダで良心的だから使ってる

950 :デフォルトの名無しさん:2010/04/10(土) 13:10:58
tiobeでCが一位になったよ〜
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

951 :デフォルトの名無しさん:2010/04/10(土) 13:14:43
どうでもいい

952 :デフォルトの名無しさん:2010/04/10(土) 13:16:27
ubntu使ってるけど同じマシンでFireFox動かしたときUbuntuのほうが2000より遅いね
Vistaには勝ってるかも

X立ち上げないでコマンドラインで計算とかさせるとDos窓に勝つよ
どこで戦うかじゃないかな

いまどきCPUやつながってるデバイスに合わせてOS再コンパイルしたりとか
すべてのモジュールやデーモン、アプリをスピード重視で再コンパイルとか
いらないの消しちゃうとかしないよね
やればそりゃ鬼のように速くなるだろうけど
新しく買って来たデバイスとかも自動認識してくれなくなるし
デーモンとかドライバーとかどれが何なのかかなり勉強しないとわからなくなってるし
そもそもそういうことしたくない人のためのubntuだしね


っていうかtwmにするだけでずいぶんちがうw

953 :デフォルトの名無しさん:2010/04/10(土) 13:17:55
そろそろlinux機ではブラウザはクロームの時代になると思う

954 :デフォルトの名無しさん:2010/04/10(土) 15:44:44
>>947
二言目には「コンパイルしなおせ」だろお前ら。
聞き飽きたわそんな台詞。

955 :デフォルトの名無しさん:2010/04/10(土) 15:46:09
やりたくないなら辞めればいいだけ

956 :デフォルトの名無しさん:2010/04/10(土) 16:38:21
return (0);と
return 0;
ので解釈が違うコンパイラがあったと思うのですが、ご存じの方いますか?
上は関数で、下がifなどと同じ予約語だったと思います。
処理時間が違い、関数(return (0))の方が時間がかかったと記憶しています。

957 :デフォルトの名無しさん:2010/04/10(土) 16:42:26
>>954

そんな聞き飽きるほど出てきたかぁ?Linuxの話題すらたまにだと思うのに
そもそも今時、二言目に出てくるほどLinuxコンパイルしなおしてるやついないぞ
みんな普通にインストールしたまま使ってると思う


958 :デフォルトの名無しさん:2010/04/10(土) 16:54:04
>>956
片方はCのコンパイラではありません。

959 :デフォルトの名無しさん:2010/04/10(土) 16:56:20
>片方はCのコンパイラではありません。
なんか変。


960 :デフォルトの名無しさん:2010/04/10(土) 16:58:10
return(n) ってマクロでも自作してたんじゃないの

961 :デフォルトの名無しさん:2010/04/10(土) 17:10:57
初期のCコンパイラではreturnに括弧が必要だったことは知ってるが
今そんなコンパイラがあるのかは疑問

962 :デフォルトの名無しさん:2010/04/10(土) 17:30:20
>>961 dmrが作ったCコンパイラではreturnにカッコは不要ですが。

963 :デフォルトの名無しさん:2010/04/10(土) 18:08:35
そんなもん探してどうすんだ?

964 :デフォルトの名無しさん:2010/04/10(土) 18:17:40
>>963
最近仲間内でそういう話題があったんで。
H8とかマイコンのコンパイラだったかもしれませんが、
returnの書き方によって処理落ちして、戻り値に異常が出たような…

965 :デフォルトの名無しさん:2010/04/10(土) 19:24:10
関数だから変になったんじゃなくて、
括弧のついたreturnのparseにバグがあったんじゃないのかな

966 :デフォルトの名無しさん:2010/04/10(土) 19:33:44
typoして、リンク時にエラーになっただけでしょ

967 :デフォルトの名無しさん:2010/04/10(土) 20:37:02
プログラマってLinux使ってる人が多いように思えるんだけど、Linuxのメリットってなんかあるの?
オープンソースのプログラムがtar.gzで多く配布されているのが関係してたりするんですか?

968 :デフォルトの名無しさん:2010/04/10(土) 20:48:11
>>967
Linux をターゲットとして書かれたオープンソースのソフトウェアが多いのも
もちろん理由の一つだよ

969 :デフォルトの名無しさん:2010/04/10(土) 20:48:36
エロゲーをしたいので普通にWindows使ってます

970 :デフォルトの名無しさん:2010/04/10(土) 21:11:47
普通両方使ってるだろw

971 :デフォルトの名無しさん:2010/04/10(土) 21:17:29
WindowsもOSXもLinuxも使ってますが。
ipadも

972 :デフォルトの名無しさん:2010/04/10(土) 21:21:09
おまえは最後の一行言いたいだけだろ

973 :デフォルトの名無しさん:2010/04/10(土) 21:23:43
>>967
安価に手に入るunix環境だからな。

974 :デフォルトの名無しさん:2010/04/10(土) 21:25:36
サーバ系の仕事だとLinuxにかぎらずUnix系多いよね(Web系もそうじゃないやつも)
絵が必要ない大きな組み込み系とかもじんわり来てる気がする 家電にまでってわけにはまだまだ行かないけど

でもただ単におもしろいからってのもあるよな
Lnux動かしてそこでコンパイルしてみるだけで面白いじゃん
せっかく無料でいろいろあそべるものがあるのに、使う理由がないってだけで使いもしない人と
特に使う目的ないけど動かしてますって人と人種的にどっちがプログラマ向きかといったら後者だろうし

975 :デフォルトの名無しさん:2010/04/10(土) 21:26:17
windows
・エロゲー
・PCゲー
・p2p(ポエムの交換)
・jane

linux
・計算機科学
・論文作成
・アプリ開発

976 :967:2010/04/10(土) 21:42:32
なるほど
ありがとう。参考になった!

977 :デフォルトの名無しさん:2010/04/10(土) 21:47:12
エロゲーやってる奴って例外なく頭がおかしいと思う

978 :デフォルトの名無しさん:2010/04/10(土) 21:48:36
自分はまともだと言張る奴よりはまともだけどなw

979 :デフォルトの名無しさん:2010/04/10(土) 21:49:18
エロゲーのほとんどはC/C++で作られているんだヨ!

980 :デフォルトの名無しさん:2010/04/10(土) 21:49:58
紙芝居なんてどうでもいいよ

981 :デフォルトの名無しさん:2010/04/10(土) 22:00:04
自分がマトモじゃないって理解してる人はマトモなんだと。アレッシーっていう偉い人が言ってた

982 :デフォルトの名無しさん:2010/04/10(土) 22:05:54
誰でも言ってるだろそんなこと。だから何って話
マトモじゃないと自覚してマトモじゃない行動する奴もいるんだから説得力無いわ

983 :デフォルトの名無しさん:2010/04/10(土) 22:16:29
マトモじゃないって理解していて、マトモじゃない行動してる奴は、マトモだとは思えない

984 :デフォルトの名無しさん:2010/04/10(土) 22:23:55
じゃあマトモじゃない行動をしてる奴らは全員自分たちがマトモだと思ってるのかよ。んなわけねーだろ

985 :デフォルトの名無しさん:2010/04/10(土) 23:06:22
>>979

うそこけ、数社と取引があったけどVBばっかだったぞ
ちょっとした紙芝居みたいな所ばっかだったけど

986 :デフォルトの名無しさん:2010/04/10(土) 23:12:34
母数を考えろよ

987 :デフォルトの名無しさん:2010/04/10(土) 23:15:51
>>985
エロゲってVBなのか?
すげー。
よく作れるな。

988 :デフォルトの名無しさん:2010/04/10(土) 23:22:45
誰か次スレ立てて

989 :デフォルトの名無しさん:2010/04/10(土) 23:27:19
確かStudio e.go!はVB使っていたと記憶している

990 :デフォルトの名無しさん:2010/04/10(土) 23:28:50
次スレ立てます

991 :デフォルトの名無しさん:2010/04/10(土) 23:30:38 ?S★(520172)
次スレ立てました
C言語なら俺に聞け(入門編)Part 63
http://pc12.2ch.net/test/read.cgi/tech/1270909823/

992 :デフォルトの名無しさん:2010/04/11(日) 00:07:01
>>991


993 :デフォルトの名無しさん:2010/04/11(日) 00:20:17
1000ゲット

994 :デフォルトの名無しさん:2010/04/11(日) 00:46:58
1000ならゲームをする気力が湧いてくる

995 :デフォルトの名無しさん:2010/04/11(日) 10:13:58
紙芝居系のエロゲは
HSP辺りで粗製濫造してるモノとばかり想像してた

996 :デフォルトの名無しさん:2010/04/11(日) 11:06:37
HSPはがんばらないと絵を抜かれ放題だから
だからといって、がんばるんだったらめんどくさくてVBで書いたほうが早いなってなるし

997 :デフォルトの名無しさん:2010/04/11(日) 11:49:38
っていうか、マジでVBなのかよ。
C++でスクリプトエンジンくらい作るだろ?

998 :デフォルトの名無しさん:2010/04/11(日) 11:57:48
既存のスクリプトつかうだろ。述べる専用の。

999 :デフォルトの名無しさん:2010/04/11(日) 12:30:55
はい次1000どうぞ

1000 :デフォルトの名無しさん:2010/04/11(日) 12:33:23
                ハ        _
    ___         ‖ヾ     ハ
  /     ヽ      ‖::::|l    ‖:||.
 / 聞 え  |     ||:::::::||    ||:::||
 |  こ ?  |     |{:::::‖.  . .||:::||
 |  え      |     _」ゝ/'--―- 、|{::ノ!
 |  な 何   |  /   __      `'〈
 |  い ?   ! /´   /´ ●    __  ヽ
 ヽ      / /     ゝ....ノ   /´●   i
  ` ー―< {           ゝ- ′ |
        厶-―    r  l>        |
      ∠ヽ ゝ-―     `r-ト、_,)      |
      レ^ヾ ヽ>' ̄     LL/  、   /
      .l   ヾ:ヽ ` 、_      \\ '
     l    ヾ:ヽ   ト`ー-r-;;y‐T^
      |    ヾ `ニニ「〈〉フ /‖. j

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

215 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)