C言語なら俺に聞け(入門篇) Part 51

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
C言語の*入門者*向け解説スレッドです。
初心者、初級者の方は他の質問スレのほうが良いかもしれません。

教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 129代目
http://pc12.2ch.net/test/read.cgi/tech/1247438792/

・C++言語はスレ違いですが、ある程度なら対応です。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 50
http://pc12.2ch.net/test/read.cgi/tech/1246342847/

過去スレ
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
2デフォルトの名無しさん:2009/07/24(金) 23:23:30
お疲れさまです。
3デフォルトの名無しさん:2009/07/24(金) 23:26:17
でかいソースは、とりあえず
codepad
ttp://codepad.org/
に貼って実行してみてください。
個人情報が含まれないように気をつけて。

4デフォルトの名無しさん:2009/07/25(土) 10:30:04
以下、規格票も読んだことない阿呆は回答しないように
5デフォルトの名無しさん:2009/07/25(土) 12:10:17
プロトタイプ宣言がない、ボトムダウンの場合について質問です
例えば、
int hoge(int a, int b) { return a + b; }
int main() { hoge(10, 10); return 0; }

これは、hoge(10);みたいな呼び出しはできません。それはhogeが呼ばれた時点で、引数の数が違うと判断されるのですよね

でもボトムダウンの場合、
int main() { hoge(10); return 0; }
int hoge(int a. int b) { return a + b; }

こんな呼び出しができてしまいます。
この呼び出しがされた場合、関数が呼び出せてしまう挙動を見せます。引数の数が違うのに、です
こういう書きかたの場合、呼び出し時のhogeの()の中身は無視され、ただhoge番地に飛んでいくだけ、という理解で良いでしょうか
でも飛んで行くということは、用いられている引数の数がわかりますよね、ここで弾かれないのは、やむをえないCの仕様なんでしょうか
6デフォルトの名無しさん:2009/07/25(土) 12:18:08
>>5
それが通るという環境は?
あと警告とかの表示に関連するオプションは?
7デフォルトの名無しさん:2009/07/25(土) 12:36:29
>>5
暗黙のプロトタイプ宣言がなされる。

hogeが宣言されていないときに、hoge(10)を呼ぶと、
int hoge(int) というプロトタイプが宣言されたことになる。

そうすると、int hoge(int ,int) という定義と型が合わないので、そこでエラー。
87:2009/07/25(土) 12:42:35
>>5
ごめんちょっと呆けてた。>7は無視してくれ。正しくは以下の通り。

----

C89では宣言のされていない関数を呼ぶと、暗黙のプロトタイプ宣言がなされる。

hogeが宣言されていないときに、hoge(10) を呼ぶと、
int hoge() というプロトタイプが宣言されたことになる。
括弧の中に何もかかないのは「引数の型チェックをしない」というプロトタイプ。

しかしながら実際のところ、hoge(10) は int hoge(int ,int) という定義と型が合わないので、未定義動作になる。
95:2009/07/25(土) 12:51:40
>>6-8
なるほど、ありがとうございます
ちなみにbcc32をデフォルトでコンパイルさせてます -> bcc32 main.c みたいな感じです

引数の数が違っても、
hoge(10)

int hoge(int a, int b)
この場合、aには10が入っていましたが、bには何かでらたらめな値が入っていました
hoge(10)が呼び出されるより前に、スタックに積まれていた値を4バイト分見てることになるんでしょうかね

引数も、型と個数が合う範囲では取って来れるということがわかったんですが、aは普通に使えそうです。こういう場合でも未定義動作とされるんですね

10デフォルトの名無しさん:2009/07/25(土) 12:55:18
>hoge(10)が呼び出されるより前に、スタックに積まれていた値を4バイト分見てることになるんでしょうかね
たぶん

>aは普通に使えそうです。こういう場合でも未定義動作とされるんですね
未定義かどうか以前に意図しない情報を持ってきてる時点で駄目だし
こんなのを許容するようならバグがあちこちに入って後で死ぬよ
11デフォルトの名無しさん:2009/07/25(土) 12:58:07
やったね!これで乱数を生成できるよ!
12前スレ>>990:2009/07/25(土) 13:00:42
初期化をしています。
cos()とsin()の戻り値マップを用意して高速化しようかとおもいまして。
ラジアン値が分からない友人用のライブラリも同じように作ろうかと思ってたので
13デフォルトの名無しさん:2009/07/25(土) 13:00:46
>>11
全然乱数じゃないよwww
14デフォルトの名無しさん:2009/07/25(土) 13:20:21
>>12
残念、私にはいい方法を思いつきませんね。
分割コンパイルですよね。少々面倒でも、マップを使うモジュールで 識別子にextern をつけるしかないでしょうね。
15デフォルトの名無しさん:2009/07/25(土) 13:22:20
>>9
なにに挑戦してるの?
たまたまうまく動くようなコードのコレクション?
16デフォルトの名無しさん:2009/07/25(土) 14:25:39
>>9
> aは普通に使えそうです。こういう場合でも未定義動作とされるんですね
1箇所でも未定義な動作があれば、そのプログラム全てが未定義の動作になります。
bの値を使わなくてもダメ(未定義の動作)です。
17デフォルトの名無しさん:2009/07/25(土) 14:27:32
>>13
>>11は分かってて冗談で言ってるだけだろ。たぶん。
18デフォルトの名無しさん:2009/07/25(土) 15:20:14
>>5
bccの挙動でCの仕様を推測するのはやめたほうがいいよ。
19デフォルトの名無しさん:2009/07/25(土) 15:45:38
33歳無職童貞ですが今からでもC言語おぼえられますかねぇ
そろそろ就職したいんで
20デフォルトの名無しさん:2009/07/25(土) 15:48:44
33じゃあ無理だよ
この業界35で定年だもん
21デフォルトの名無しさん:2009/07/25(土) 15:50:44
C言語を覚えること自体は一月もあれば十分だし
データベースの知識をちろっと加えれば
販売管理ソフトくらいはあっという間にかけるようになるけど

 仕 事 は な い よ
22デフォルトの名無しさん:2009/07/25(土) 15:51:41
同人ゲームでも作って一発狙ったほうが期待値高いよ
23デフォルトの名無しさん:2009/07/25(土) 15:59:13
それ以前に業務経験のない33歳とか勘弁してください
24デフォルトの名無しさん:2009/07/25(土) 16:03:22
童貞ってところはおkなのなw
2519:2009/07/25(土) 16:10:35
無理そうですね、わかりました。
スレ汚しすいません。
26デフォルトの名無しさん:2009/07/25(土) 16:45:14
ガンバレ33歳っ!
27デフォルトの名無しさん:2009/07/25(土) 18:23:54
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *p;
p=malloc(1);
gets(p);
printf("%s\n",p);
return 0;
}
1バイト割り当てたんだが。
16文字まで読み込めるのは何故?
2バイトになってるんだけど。
28デフォルトの名無しさん:2009/07/25(土) 18:27:31
>>27
使っていいのは1バイト
それを超えてはいけない

管理できないなら
そういうのを自動で面倒見てくれる
別の言語を使えばいい
29デフォルトの名無しさん:2009/07/25(土) 18:28:04
>>27
>16文字まで読み込めるのは何故?
>2バイトになってるんだけど。
意味がわかりません。

>2バイトになってるんだけど。
特にこっちは何をどう確認して2バイトなの?

>16文字まで読み込めるのは何故?
まあこっちはたまたまとか理由はあるんだろうけど
30デフォルトの名無しさん:2009/07/25(土) 18:30:00
>>27
そもそもgets()って何?
どういう動作か説明できr?
31デフォルトの名無しさん:2009/07/25(土) 18:30:16
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
と入力したら、1バイト割り当ててるから8文字までだろ?
だが
16文字
aaaaaaaaaaaaaaaa
とでるんだが。
32デフォルトの名無しさん:2009/07/25(土) 18:32:43
偶然・・・かな
33デフォルトの名無しさん:2009/07/25(土) 18:33:11
これって環境とかが原因してんの?
32bitPCだけど。
34デフォルトの名無しさん:2009/07/25(土) 18:33:12
>>31
> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
> と入力したら、1バイト割り当ててるから8文字までだろ? 
1バイト割り当ててるから0文字までだろ?
35デフォルトの名無しさん:2009/07/25(土) 18:33:47
>1バイト割り当ててるから8文字までだろ?
何かものすごく勘違いされてるようで
36デフォルトの名無しさん:2009/07/25(土) 18:33:52
>>31
ふつー1バイト一文字だよ。

16文字で区切られるのは、変な現象だな。
メモリをぶっ壊してるにしても、どのタイミングで文字列終了の0が入ってるんだろ。
37デフォルトの名無しさん:2009/07/25(土) 18:37:02
1バイト1文字だったそうそう
だが16文字読み込まれるんだけど。
意味が分からない。
独習Cにバイトを割り当てるとか書いてあったので。
1バイト割り当てたら1文字だけ読み込めるかとおもったら全然違ったんだが・・・
38デフォルトの名無しさん:2009/07/25(土) 18:37:02
そのあたりはアセンブラちゃんと相談
39デフォルトの名無しさん:2009/07/25(土) 18:37:44
>>37
1バイト割り当ててるから0文字までだろ? 
1バイト割り当ててるから0文字までだろ? 
1バイト割り当ててるから0文字までだろ? 

ついでにgetsの仕様みてこいば
40デフォルトの名無しさん:2009/07/25(土) 18:39:39
scanfにしても同じだったぞ。
41デフォルトの名無しさん:2009/07/25(土) 18:39:40
>>37
gets()は、確保されているメモリのサイズは考慮しないで入力されただけ読み込む。
42デフォルトの名無しさん:2009/07/25(土) 18:39:50
C言語って回答者もバカが多いのね。
43デフォルトの名無しさん:2009/07/25(土) 18:40:29
>>40
scanf()も、サイズの指定を自分でしないと、どんどん読み込む。
44デフォルトの名無しさん:2009/07/25(土) 18:42:03
1バイト分という約束で割り当ててもらったのに、それ以上に使うのは契約違反。
45デフォルトの名無しさん:2009/07/25(土) 18:43:22
ただ違反だけでエラーがでないってやつ?
手動で割り当てたら。
p="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
今度は16文字以上読み込めた。全てaaaaaaaaaaaaaとでた。
狂ってる。
46デフォルトの名無しさん:2009/07/25(土) 18:44:55
>>45
本気で語ってるんならバカ
冗談にしてもキチガイさが足りない
47デフォルトの名無しさん:2009/07/25(土) 18:45:21
>>45
それは割り当てではない
リテラルを指してるだけ
48デフォルトの名無しさん:2009/07/25(土) 18:46:19
char *x = "abcdef";
char y[] = "abcdef";
49デフォルトの名無しさん:2009/07/25(土) 18:46:24
>>45
> ただ違反だけでエラーがでないってやつ?
そう。

>手動で割り当てたら。
それは入力のバッファに使っちゃだめだ。

50デフォルトの名無しさん:2009/07/25(土) 18:49:28
ポインタと領域割り当てとごっちゃになってる
51デフォルトの名無しさん:2009/07/25(土) 18:50:40
fgets()を使うのがふつーだな。

char s[256];
fgets(s, sizeof s, stdin);

52デフォルトの名無しさん:2009/07/25(土) 19:04:20
解答者のレベルが低すぎて泣けてきた
53デフォルトの名無しさん:2009/07/25(土) 19:07:20
スレタイ嫁よ。「入門篇」って書いてあるだろ。
回答者が入門篇なんだよ。
54デフォルトの名無しさん:2009/07/25(土) 19:12:49
具体的にどのあたりがレベル低いか指摘できななくて、
思わせぶりなことしか書けないから、なんにも書かなくていいよ。
自信がないくせに、自己顕示欲だけは一人前。
55デフォルトの名無しさん:2009/07/25(土) 19:16:12
>>54
おちつけ
回答も質問もしてない人間はこのスレには不要だ
56デフォルトの名無しさん:2009/07/25(土) 19:20:12
解答が「〜だろ」「〜じゃないの」「〜と思う」など、断定を避けていたり、規格書も読まずに妄想を書き込んでいたりするところ。
はいはい、規格準拠スレに帰りますよっと。
57デフォルトの名無しさん:2009/07/25(土) 19:24:07
>>53
> 回答者が入門篇
よく言った!www
58デフォルトの名無しさん:2009/07/25(土) 19:25:15
fgetsもやってもダメだった。
諦めたwwwwwwwwwww
オワタ
59デフォルトの名無しさん:2009/07/25(土) 19:29:29
よく議論のときに、反論できなくなったら内容に関係なく相手の日本語の使い方がおかしい
とか言い出すヤツいるじゃん。
まだ、具体的にどう日本語がおかしいって指摘できるやつならいいけど、
まえに「お前日本語おかしいよ。おれ文系ね」って、本当に頭悪そうな一行レス
してるやつ見たことあるんだよ。

「お前ら規格とかしらねえの? おれ規格スレ読んでるから」って。
60デフォルトの名無しさん:2009/07/25(土) 19:30:24
>>58
char *p = malloc(1);
fgets(p, sizeof p, stdin);

とかやってね?
61デフォルトの名無しさん:2009/07/25(土) 19:31:32
動くから規格に準拠してるって考える輩おおいよな
62デフォルトの名無しさん:2009/07/25(土) 19:33:15
そう思ってるのは規格マニアの頭の中の偶像だけだったりとは思わないのかね
63デフォルトの名無しさん:2009/07/25(土) 19:34:57
>>62

いや、別に揚げ足とりたくて 言ってるんじゃなくて。。。

うん
64デフォルトの名無しさん:2009/07/25(土) 19:37:24
IT系のやつは勝手に人と関わらないからコミュニケーションが低いと思って。
そのコンプレックスの裏返しで国語力とかコミュニケーションとか日本語力を過大評価してるんだと思うよ。
mallocは捨てたwwwとりあえずうまくできないから諦めとく。
回答ありがとう。
65デフォルトの名無しさん:2009/07/25(土) 19:39:21
ITやっててコミュニケーションスキル低いとかもぐりだろwww
66デフォルトの名無しさん:2009/07/25(土) 19:39:27
あきらめは肝心だ^^
67デフォルトの名無しさん:2009/07/25(土) 19:39:32
gets()でオーバーフローするって話題で
規格のどこそに書いてあるとかいちいち
書かないとダメって、いいがかりにだろ。
68デフォルトの名無しさん:2009/07/25(土) 19:40:34
だな、 人とコミュニケーションとれない割には

文書とかになると 理工系の文書はすばらしいとか

人の文章に対して ケチ付けまくるんだよな
69デフォルトの名無しさん:2009/07/25(土) 19:40:56
malloc捨てたらcallocかreallocくらしかのこらない
70デフォルトの名無しさん:2009/07/25(土) 19:41:29
C++に移ってnew使うかSTL使おうぜ!
71デフォルトの名無しさん:2009/07/25(土) 19:42:03
Cを捨てればいい。

Cなんて データ構造とか アルゴリズム云々の話とかが好きなやつしか残らない
72デフォルトの名無しさん:2009/07/25(土) 19:46:13
最近、コミュニケーションとか国語力、日本語力を重視してるせいか。
漢字ドリルとか辞書とか硬筆などなんか売れてるねww
もうITに頼れば良いのにwwオールラウンドを求めたがるよね。
コミュニケーションを売りにしてる企業宣伝HPあるけど、完ぺき必要なのは技術力だと思うよ。
だいたい面接にうけにくるやつなんて、普通に会話などできるとおもうがww
73デフォルトの名無しさん:2009/07/25(土) 19:50:02
プレゼンとかディスカッションで緊張してうまくしゃべれないけど
リラックスしてる普段はすげぇできる学生とか普通にいたし
こういうやつが就職できなかったりしたらかわいそうだって思う
74デフォルトの名無しさん:2009/07/25(土) 20:11:20
>>62
思わないだろ。

例えば、
鍵屋に行って作ってもらった合い鍵がいい加減なできばえだったとして、
「作りは適当ですけど、
偶然でもとりあえず開いたから この合い鍵は有効です。
料金はお返しできません」
って言われたらこまるだろ?

ちゃんと作ってもらわなければ。
プロとして。
75デフォルトの名無しさん:2009/07/25(土) 20:17:10
まあ普通、合い鍵屋は鍵が開け閉めできたら返品うけつけないけどな。
76デフォルトの名無しさん:2009/07/25(土) 20:23:35
「char *p = malloc(1); gets(p); で一文字以上入力できる。なぜだ」って
質問に「gets()はオーバーフローするからww」みたいな答えがついて、それに、
「規格に基づいて回答してない。レベル低いね。プロじゃない」って言うのって、難癖つけてるだけだよな。
77デフォルトの名無しさん:2009/07/25(土) 20:33:53
>>74
ちゃんと読みなよ。
>>62はそんな鍵屋は実在しないんじゃね?と書いてる
78デフォルトの名無しさん:2009/07/25(土) 20:35:10
「gets()はオーバーフローするからww」という回答はあまりよくない。
「gets()はどういう理由があっても使ってはならない」とちゃんと伝えるべき
79デフォルトの名無しさん:2009/07/25(土) 20:37:43
ちょーどうでもいい流れだが、

>>「gets()はどういう理由があっても使ってはならない」とちゃんと伝えるべき

は要らん。gets嫌いは宗教的だから困る。
80デフォルトの名無しさん:2009/07/25(土) 20:40:19
使ってはならないことはないだろー
使っちゃ駄目なのを標準ライブラリに入れてんのかよって話になるしー
81デフォルトの名無しさん:2009/07/25(土) 20:41:51
>>80
互換性のために捨てられないだけだろ。
82デフォルトの名無しさん:2009/07/25(土) 20:42:26
使っちゃ駄目なのを標準ライブラリに入れているんだよ
83デフォルトの名無しさん:2009/07/25(土) 20:45:03
宗教的とかwww
そういうレベルじゃなくて、使っちゃダメなんだわ。禁止事項。
84デフォルトの名無しさん:2009/07/25(土) 20:47:48
分かってて使ってるなら別にいいんじゃないの?
85デフォルトの名無しさん:2009/07/25(土) 20:49:16
後でそれをわからない人が使うかもしれないからだめ
86デフォルトの名無しさん:2009/07/25(土) 20:51:21
マニュアルに「gets() は絶対に使用してはならない。」と書かれてるからだめ
87デフォルトの名無しさん:2009/07/25(土) 20:57:59
getsは、次の標準改定でなくなります。
88デフォルトの名無しさん:2009/07/25(土) 21:07:15
初心者はむしろgetsをどんどん使えといいたい。
セキュリティとか脆弱性とか、そんなことは初心者に要求するもんじゃない。
中級者以降になりゃ自然に使わなくなる。
89デフォルトの名無しさん:2009/07/25(土) 21:10:17
ゆっくりやった結果がこれだよ!
90デフォルトの名無しさん:2009/07/25(土) 21:12:28
最初はこれでいいから
そろそろそれやめなよ
そろそろこれもあれもやめなよ
あ、これも実はやめといた方がいいんだよ言うの忘れてた

初心者から見れば教えられたことをどんどん否定されていく
テンションだだ下がりコースっすね
91デフォルトの名無しさん:2009/07/25(土) 21:14:34
>>86
何のマニュアル?
ヘルプには「絶対使うな」とは書いてないよね
92デフォルトの名無しさん:2009/07/25(土) 21:16:53
最初に問題があること、だけど簡単だから今は目をつぶる事をしっかり伝えれば教えていい
93デフォルトの名無しさん:2009/07/25(土) 21:17:43
初心者が gets 暗記するなら、
せめてこれ scanf("%99[^\n]", buf) 暗記しても同じ。
94デフォルトの名無しさん:2009/07/25(土) 21:19:50
>>93
二行目を読む前に \n を飛ばさないといけない
改行のみの行を読めない
95デフォルトの名無しさん:2009/07/25(土) 21:23:54
>>91
manページをコピペしただけだけど
96デフォルトの名無しさん:2009/07/25(土) 21:25:44
ちなみに英語だと「Never use gets().」
いずれもバグの項に記載されてる。
97デフォルトの名無しさん:2009/07/25(土) 21:29:38
>>90
お前の言う通りだと思う。

初心者なんだから良いんだって。
しばらくは危険性があっても動くコードを優先して書いていて、
危険性・安全性に気を配れるような余裕が出てきた頃に
そういった使うべきでないってのを学んでいけば。
98デフォルトの名無しさん:2009/07/25(土) 21:31:11
manコマンド
[まんこ まんど]
99デフォルトの名無しさん:2009/07/25(土) 21:32:51
>>95-96
それ linux あたりのマニュアルじゃないの?
そうじゃなきゃOSぐらい書け常識的に。

linuxのマニュアルは、宗教として強くそう信じてる人が書いたからでは?
Solarisのマニュアルみたら、特にそういう文章はなかった。
100デフォルトの名無しさん:2009/07/25(土) 21:33:21
初心者が必ず上級者になるなら、そういう考えもありだろう。
しかし、初心者が初心者のまま終わる場合も多い。
getsは使わせないほうがよい。

どうしても初心者には教えていいというのなら、
自分の組織から、getsを当然に使うやつを外に出してはいけない。
社会の害悪になるので、転職させたり首にしたり、
卒業させたり中退させたりしてはいけない。
101デフォルトの名無しさん:2009/07/25(土) 21:33:49
素人でも使いやすいラッパーを書いて使わせる
ころあいを見て教えりゃいい
102デフォルトの名無しさん:2009/07/25(土) 21:36:25
>>95-96
バッファオーバーランの危険性を覚悟の上自己責任で
使うにはいいだろ

絶対使うなは言い過ぎ
10397:2009/07/25(土) 21:36:32
>>100
うーん。

そう言われるとお前の言うことにも
正直 一理あるんだよな。

・・・ま、いっか。
プログラマにとって本当に大事なのは
納期と自由時間だし。
104デフォルトの名無しさん:2009/07/25(土) 21:39:21
一ついいことおせえてやるよ。
こんなもんはな、コンパイルできて動けばいいんだよ。
勉強になったなあ、おっさん!
105デフォルトの名無しさん:2009/07/25(土) 21:40:13
>>96 >>99
Solarisでもこうかいてあるぞ。
For this reason, it is strongly recommended that gets() be avoided in favor of fgets().

Micorosft
gets で読み取る文字数を制限する方法がないため、信頼されない入力ではバッファ オーバーランが発生しやすくなります。代わりに、fgets を使用してください。

FreeBSD
It is strongly suggested that the fgets() function be used in all cases.
106デフォルトの名無しさん:2009/07/25(土) 21:42:04
納期というか仕事で使うようなソースでgetsは論外
素人ってのは入社したての奴も含まれるのか?
107デフォルトの名無しさん:2009/07/25(土) 21:43:33
初心者でも仕事のコードでgetsは無い。
108デフォルトの名無しさん:2009/07/25(土) 21:46:12
俺はいつもscanfをあぼんしているのだが、
このたびgetsもあぼんの仲間入りしました。

109デフォルトの名無しさん:2009/07/25(土) 21:48:57
>>108
そんなのいちいち宣言しなくてもいいよ。
110デフォルトの名無しさん:2009/07/25(土) 21:59:34
fedora

man 3 gets

バグ
gets() は絶対に使用してはならない。前もってデータを知ることなしに gets() が何文字読むかを知ることはできず、 gets() がバッファの終わりを越えて書き込み続けるため、 gets() を使うのは極めて危険である。これを 利
用してコンピュータのセキュリティが破られてきた。代わりに fgets() を使うこと。

入力ストリームのファイルディスクリプタに対して、 stdio ライブラリの入力関数と、低レベル呼び出しの read(2) を混ぜて呼び出す事は勧められない。結果がどうなるかは分からず、おそらくあなたの望んでいる結果にはなら
ないだろう。
111デフォルトの名無しさん:2009/07/25(土) 22:12:49
>>110
そこまで言われると腹立つよな
わかってて使う分にはお前にそこまで言われる筋合いはないよと
言いたい
112デフォルトの名無しさん:2009/07/25(土) 22:15:24
>>110
バグでも何でもないし
パンチカードの時代からgets()はある

キーボードから入力したり、後意図的にバッファオーバーランを
誘発させる馬鹿が増えただけ
113デフォルトの名無しさん:2009/07/25(土) 22:22:25
つまりgetsは時代の変化についていけない老害みたいな関数ということですね
なんだやっぱり削除したほうがいいじゃないですか
114デフォルトの名無しさん:2009/07/25(土) 22:27:01
わかってて使うと言うが
わかってたら使わないよな
115デフォルトの名無しさん:2009/07/25(土) 22:27:04
もうやめて!getsのことを悪く言わないで!
代わりに俺を叩いていいから!
116デフォルトの名無しさん:2009/07/25(土) 22:37:19
よし
ケツを出せ
117デフォルトの名無しさん:2009/07/25(土) 23:07:52
>>113
削除したほうがいいけど、動いているプログラムが動かなくなるので削除しないほうがいい
というトレードオフがあってな
118デフォルトの名無しさん:2009/07/25(土) 23:20:38
バーンクラウド!!
119デフォルトの名無しさん:2009/07/25(土) 23:24:33
オブジェクト指向って意味あんの?
オブジェクト指向でしかできない事とかあるの?
いまC言語をマスったからC++やろうとおもってんだけどww
120デフォルトの名無しさん:2009/07/25(土) 23:26:15
お前は一生そのままでいい
121デフォルトの名無しさん:2009/07/25(土) 23:31:37
>>87
どこの情報だよ。

WG14 N1362 Committee Draft ― March 1, 2009 ISO/IEC 9899:201x
7.19.7.7 The gets function
とやっぱり残されている。
同規格
7.27.9 Input/output <stdio.h>
2 The gets function is obsolescent, and is deprecated.
とあり、標準化委員もあまり好意的ではないみたい。

ごめんスレチだったか。
122デフォルトの名無しさん:2009/07/25(土) 23:37:49
>>119
とりあえず
C++のオブジェクト指向は、
お前みたいなバカを追放することができる言語
だということだけでも覚えておくと良い。
123デフォルトの名無しさん:2009/07/25(土) 23:43:42
>>122
つまり難しいってことだろ?ww
124デフォルトの名無しさん:2009/07/25(土) 23:59:44
オブジェクト指向って考え方は簡単なはずなんだが言葉が難解。
125デフォルトの名無しさん:2009/07/26(日) 00:00:51
>>122
C++で何か嫌な思いでもしましたかwww
126デフォルトの名無しさん:2009/07/26(日) 00:03:24
ここでC++の話をするのは止めていただきたい。
C++の話がしたいのなら別のスレッドでお願いします。
127デフォルトの名無しさん:2009/07/26(日) 00:05:42
>>125
お前みたいなバカが俺の周りで…(ry
128デフォルトの名無しさん:2009/07/26(日) 00:11:35
ん?悔しかったのかい?
129デフォルトの名無しさん:2009/07/26(日) 00:17:22
>>128
> ん?悔しかったのかい?
> ん?悔しかったのかい?
> ん?悔しかったのかい?

何が ん? wwww
130デフォルトの名無しさん:2009/07/26(日) 00:25:53
>>129
よほど悔しかったんだねw涙拭けよw
131デフォルトの名無しさん:2009/07/26(日) 00:26:30
日本語でおk
132デフォルトの名無しさん:2009/07/26(日) 00:28:44
せっかくだからC++で(ry
133デフォルトの名無しさん:2009/07/26(日) 00:31:31
まあこんな入門者を見下すような低級言語スレにいるよりJavaスレおいでよ
134デフォルトの名無しさん:2009/07/26(日) 00:31:59
マスタしたとか言ってる奴に業務やらせたら
分割コンパイルとmakeのメンテができなかったという事はあった
135デフォルトの名無しさん:2009/07/26(日) 00:35:33
>>133
同意、せっかくこれからプログラミングの世界に入ってくる将来有望な若者に悪影響を与えかねない。
オブジェクト指向が学びたいのであれば、javaのほうが最適です。
136デフォルトの名無しさん:2009/07/26(日) 00:38:48
makeはもうレジェンドへ追い遣られようとしてる時代だから
仕方がないよ
137デフォルトの名無しさん:2009/07/26(日) 00:47:46
VARIANT型をWCHAR型に変換するにはどうすればよいでしょうか?
138デフォルトの名無しさん:2009/07/26(日) 00:51:35
何がわかればコイツはCを知っている、というレベルなんでしょか
139デフォルトの名無しさん:2009/07/26(日) 00:53:13
>>138
どこが穴か分かっていること
140デフォルトの名無しさん:2009/07/26(日) 01:29:44
>>137
VariantChangeTypeでVT_BSTRを指定して確実に文字列にしておく。
その後、VARIANTのbstrValメンバを読み取る。
これはBSTR型だが、WCHAR*型として使用可能。
141137:2009/07/26(日) 01:44:10
>>140
ありがとうございました!!
142デフォルトの名無しさん:2009/07/26(日) 10:28:17
gcc (GCC) 4.2.4 です、vc でのFindFirstFile に相応する
フォルダ名を取得する関数名を教えてもらえないでしょうか。
143デフォルトの名無しさん:2009/07/26(日) 10:30:52
>>141です
すみません、FindFirstFile はファイル名を取得する関数でしたね
gcc でファイル名、下層のフォルダ名を取得す関数を教えてもらえませんでしょうか。
144デフォルトの名無しさん:2009/07/26(日) 10:35:56
>>143
Windowsなら同じじゃねーの?
145デフォルトの名無しさん:2009/07/26(日) 10:37:21
>>144
linux です
146デフォルトの名無しさん:2009/07/26(日) 10:44:46
自力でopendir()していっこずつreaddir()して各エントリをstat()でしらべてディレクトリかどうか検査
いまはもっと便利な関数あるかな。scandir()とか
147デフォルトの名無しさん:2009/07/26(日) 10:48:28
>>146
Thx です。
148デフォルトの名無しさん:2009/07/26(日) 10:53:17
>>145
先に書けアホ
149デフォルトの名無しさん:2009/07/26(日) 14:17:17
GCCとVCで分けて考えている・・・だと
150デフォルトの名無しさん:2009/07/26(日) 14:32:32
>>142を読んで理解できないのはよっぽどだめじゃね?
151デフォルトの名無しさん:2009/07/26(日) 14:34:49
>>150
そんな「gccならnixにちげぇねぇwwww」なんて自己中な人はかわいそうだとおもう
152デフォルトの名無しさん:2009/07/26(日) 14:44:00
ちがうちがう。gccだからじゃないよ。
FindFirstFile に相応する関数名が分からないという流れで
少なくともWindowsではないことは分かるじゃん
153デフォルトの名無しさん:2009/07/26(日) 14:45:10
>>152
じゃあ何?ってことで>>144て書き込みされたと思うんだが
154デフォルトの名無しさん:2009/07/26(日) 14:46:48
Windowsじゃないと思いながらWindowsなら同じでしょ?って聞くとかどうかしてる
155デフォルトの名無しさん:2009/07/26(日) 14:49:29
>>151
>>150をみて「「gccならnixにちげぇねぇwwww」なんて自己中な人」と決めるのもかわいそうなもので
156デフォルトの名無しさん:2009/07/26(日) 14:49:51
最近他人のレスにケチつけるのが流行ってるのか?
157デフォルトの名無しさん:2009/07/26(日) 14:50:31
最近じゃなく前から
158デフォルトの名無しさん:2009/07/26(日) 14:50:45
という話だったのさ
オープンクエスチョンはしんでいい
159デフォルトの名無しさん:2009/07/26(日) 14:51:43
みんな!
これからはクローズドクエスチョンで行きましょう!!
160デフォルトの名無しさん:2009/07/26(日) 14:52:16
いつものことじゃん。
自演が多分に含まれてそうな気配がするのもいつものこと
161デフォルトの名無しさん:2009/07/26(日) 14:53:17
>>154
俺はどうかしてるとは思わない

>>155
俺はかわいそうだと思わなかったwww
162デフォルトの名無しさん:2009/07/26(日) 14:54:37
>>160
IDがほしいお

IDチェンジで自演されてもいいからIDほしいお
163デフォルトの名無しさん:2009/07/26(日) 14:55:56
IDつけろって話も何度も出てるのにねぇ。
164162:2009/07/26(日) 14:58:20
まあID欲しい理由は他にもあって質問者が最初に書き込んだレス番を名前欄にその後入れないことが多いからなんだよな
質問者の発言なんのかを見分けにくいときあるし質問が近い時期に重なった際はどっちのことなのかこれまた見分けにくいとかあるし
165デフォルトの名無しさん:2009/07/26(日) 15:03:43
にしてもlinuxならフォルダじゃなくてディレクトリって呼んで欲しいな
166デフォルトの名無しさん:2009/07/26(日) 15:06:11
急に伸びたな
167デフォルトの名無しさん:2009/07/26(日) 23:14:35
read()とwrite()で画面に文字を表示するにはどうすれば…?
168デフォルトの名無しさん:2009/07/26(日) 23:15:41
>>167
read は無理
169デフォルトの名無しさん:2009/07/26(日) 23:16:54
下記のマクロが引数なしでよばれても動作するようにするにはどうしたらいいでしょうか。
2回目のsprintfの部分でコンパイルエラーになるます

#define DBG_PRINT(...) {       \
  FILE* fp;              \
  char str[100];           \
  fp = fopen("dbg.txt", "a+");    \
  sprintf(str, "line: %d", __LINE__); \
  fputs(str, fp);           \
  sprintf(str, __VA_ARGS__);    \
  fputs(str, fp);           \
  fclose(fp);             \
}
170デフォルトの名無しさん:2009/07/26(日) 23:17:29
恐ろしい方法だが
スクリーンバッファにreadで読み込めば表示は可能
171デフォルトの名無しさん:2009/07/26(日) 23:26:53
>>169
無理
話は変わるけど fprintf は使わないの?
172デフォルトの名無しさん:2009/07/26(日) 23:30:47
>>169
書式指定フォーマットが即値のリテラルの場合に限られる場合のみこれでおk

#define DBG_PRINT(...) { \
FILE* fp; \
fp = fopen("dbg.txt", "a+"); \
fprintf(fp, "line: %d ", __LINE__); \
fprintf(fp, "" __VA_ARGS__); \
fclose(fp); \
}
173デフォルトの名無しさん:2009/07/26(日) 23:32:01
引数がどうであれ改行したいんでしょう
174デフォルトの名無しさん:2009/07/26(日) 23:32:56
うそつきました。
175デフォルトの名無しさん:2009/07/26(日) 23:54:05
#define の効果範囲ってどこまでなの?
ソースファイルを分割してる場合とかって、#defineをしてるソースファイル内だけが定義範囲になるの?
176デフォルトの名無しさん:2009/07/26(日) 23:56:43
コンパイル単位でのみ有効
.cに書いてて、それをincludeしているファイルが無ければそのファイルに閉じられるよ
177デフォルトの名無しさん:2009/07/27(月) 00:09:48
Cプリプロセッサ言語はC言語と別系統
178デフォルトの名無しさん:2009/07/27(月) 00:11:50
a→b→a→a→c→d→b→c→c→d
のようなリストがあるときに、a,b,c,dの出現回数を調べたいときは
どうやるといいですか?
179デフォルトの名無しさん:2009/07/27(月) 00:13:59
普通にリストを巡回して現れた文字に対応する整数を++すればいいよ
180デフォルトの名無しさん:2009/07/27(月) 00:14:07
リストを全走査
181デフォルトの名無しさん:2009/07/27(月) 00:15:09
>>178
リストにぶら下がってる各情報の種別がわかるような識別情報を割り当てておいて先頭からチェック
182デフォルトの名無しさん:2009/07/27(月) 00:24:55
>>179-181
ありがとうございます。やってみます。
183デフォルトの名無しさん:2009/07/27(月) 00:28:50
char list[] = "a→b→a→a→c→d→b→c→c→d";
char *p = list;
int count['z' % 'a' + 1] = {0}, i;

while(*p) if('a' <= *p && *p << 'z') ++count[*(p++) % 'a'];
184デフォルトの名無しさん:2009/07/27(月) 00:32:33
>>176-177
ありがとう。
185デフォルトの名無しさん:2009/07/27(月) 00:33:17
>>183
ほうっへ

こっちの方がよくね?
char list[] = "a→b→a→a→c→d→b→c→c→d";
printf("count(list(a))=%d\n", 3);
printf("count(list(b))=%d\n", 1);
printf("count(list(c))=%d\n", 3);
printf("count(list(d))=%d\n", 2);

存在するリスト全体に対して個別に定義すれば問題ない
186デフォルトの名無しさん:2009/07/27(月) 04:04:58
調べると表示するは違う
187デフォルトの名無しさん:2009/07/27(月) 10:25:50
自分で調べるか、プログラムを作ってコンピュータに調べさせるかの違いだな
リストが1つで要素が10個なら自分で数えた方が早い
188デフォルトの名無しさん:2009/07/27(月) 10:28:34
なぜCプログラマは>>183>>185のような回答をしたがるのか
189デフォルトの名無しさん:2009/07/27(月) 10:46:10
・ヒマだから
・要求が明確ではない場合にこうなるという教え
・ヒマだから
190デフォルトの名無しさん:2009/07/27(月) 10:48:32
もう一つ
・IOCCCモドキの書き方をしたがる
191デフォルトの名無しさん:2009/07/27(月) 10:51:32
あーたしかに。
今回のはそれにあたらないけど、、、っていうか*p <= 'z'だろ
192デフォルトの名無しさん:2009/07/27(月) 10:52:03
・要求が明確ではない場合にこうなるという教え
明確になるように話を引き出せばいい

あ、できないからこんなところで初心者に嫌がらせして楽しんでるのか・・・
193デフォルトの名無しさん:2009/07/27(月) 10:54:24
このような外野がうるさくなる現象に何か名前をつけようず
194デフォルトの名無しさん:2009/07/27(月) 10:55:16
だってテンプレに書いてあるんだもの。
今回のだってリストの実装が分からなければコードの示しようがないし
概略でいいならすでに回答者は満足を得られたようだし
195デフォルトの名無しさん:2009/07/27(月) 10:55:18
>>192
まずはテメーでな^^
196デフォルトの名無しさん:2009/07/27(月) 10:55:54
>>193
>>183>>185のようなアホな回答しなければ静かだよ>ここ
197デフォルトの名無しさん:2009/07/27(月) 11:02:10
198デフォルトの名無しさん:2009/07/27(月) 11:03:42
>>183
2文字目でpが++されないから無限ループ
199デフォルトの名無しさん:2009/07/27(月) 11:07:17
>>198
ほい
while(*p){if('a' <= *p && *p <= 'z')++count[*p % 'a'];p++;}
200デフォルトの名無しさん:2009/07/27(月) 11:08:01
いやそのコードはもういいって
201デフォルトの名無しさん:2009/07/27(月) 11:09:28
あほみたいな質問するのも答えるのも禁止したらこのスレなんか必要ないじゃん
202デフォルトの名無しさん:2009/07/27(月) 11:11:35
言い方悪いけど、勝手に騒いでろ、って感性で行けばどうってことない
203デフォルトの名無しさん:2009/07/27(月) 11:11:49
あほみたいな質問は禁止してない
アホみたいな回答をするな、その回答をネタに雑談するなと言ってる
204デフォルトの名無しさん:2009/07/27(月) 11:12:01
いやいいじゃないか
暇なCプログラマがじゃれ合うスレが一つぐらいあっても
ここが潰れたら皆他のスレに迷惑掛けに行くだろ?w
205デフォルトの名無しさん:2009/07/27(月) 12:12:28
>>203
よい回答の例をおながいします
206デフォルトの名無しさん:2009/07/27(月) 12:19:34
「アホみたいな回答」にちゃちゃ入れて悦に入るのもkのスレの目的
207デフォルトの名無しさん:2009/07/27(月) 13:10:51
データをそのまま配列のインデックスに使うのってありふれた手法だよなあ
バグやインデントはともかく、>>183がアホみたいな回答と言われる理由がわからん
208デフォルトの名無しさん:2009/07/27(月) 13:37:46
いちいち説明しないとわからないほどアホなんだろうけど
それに説明するのはもっとアホらしいなぁ。
209デフォルトの名無しさん:2009/07/27(月) 13:59:36
質問をよく嫁
178が調べたいのは配列じゃなくてリスト
179-182で解決済
210デフォルトの名無しさん:2009/07/27(月) 16:00:08
ソースコード中に直書きした文字列の文字コードはどう決まるの?
コンパイラが決めるの?それともソースファイルの文字コード?
211デフォルトの名無しさん:2009/07/27(月) 16:06:07
あ、それとコマンドラインから入力した文字の文字コードもよくわからないです
212デフォルトの名無しさん:2009/07/27(月) 16:13:22
>>210
文字コードを決めるのはソースファイルを入力する人間。
コンパイラ、というかプリプロセッサはソースファイルの中に非アスキー文字が混じっていたら
16進の形式に変換するだけ。

で、ソースファイルの文字コードとコマンドラインの文字コードが一致していないと
プログラムがうまく動かなかったり文字化けしたり、たまにコンパイルできなかったりする。
213デフォルトの名無しさん:2009/07/27(月) 16:27:05
>>211
コンパイラ次第。例えばgccの場合、ソースとバイナリと入出力のエンコーディングを個別に指定できる。
214デフォルトの名無しさん:2009/07/27(月) 19:30:14
thx
XPのVC++IDEだとソースもコマンドラインもshift_jisっぽいですね
215デフォルトの名無しさん:2009/07/27(月) 20:03:31
Unicodeだよ?
Shift JISの場合はコード変換されるので遅くなるって
msdnに書いてある。
216デフォルトの名無しさん:2009/07/27(月) 22:07:12
VCはBOM付きのソースファイルを扱える。 UTF-16でも、UTF-8でも可。
217デフォルトの名無しさん:2009/07/27(月) 23:25:32
質問です
下のprintf(...............);に入る文を教えてください。
実行結果は下の通りです

要素x[0]は 7.526 y[0]は 2.474 z[0]は10.000
要素x[1]は 3.125 y[1]は 6.785 z]1]は10.000

#include <stdio.h>
double sum(double x,double y);
int main(void)
{
int i,n=2;
double x[2]={7.526,3.125};
double y[2]={2.474,6.785};
double z[2];
for(i=0;i<n;i++)
{
z[i]=sum(x[i],y[i]);
printf(.........................);
}
return 0;
}

double sum(double a,double b);
{
double c; c=a+b;return c;
}

218デフォルトの名無しさん:2009/07/27(月) 23:27:15
要素x[0]は 7.526 y[0]は 2.474 z[0]は10.000
要素x[1]は 3.125 y[1]は 6.785 z]1]は10.000
こういう感じで表示されればいいの?
219デフォルトの名無しさん:2009/07/27(月) 23:35:29
printf("要素x[%d]は%f y[%d]は%f z[%d]は%f\n", i, x[i], i, y[i], i, z[i])
220デフォルトの名無しさん:2009/07/27(月) 23:40:04
>>218
なんか不安な点があったの?
221デフォルトの名無しさん:2009/07/27(月) 23:41:41
小数点表示の制限もあるっぽいな
printf("要素x[%d]は%.3f y[%d]は%.3f z[%d]は%.3f\n", i, x[i], i, y[i], i, z[i]);
になるのか
222デフォルトの名無しさん:2009/07/27(月) 23:43:54
ああ、z]1]か。
3項演算子が放り込まれたコードが出てくるかね。
223デフォルトの名無しさん:2009/07/27(月) 23:44:49
printf("要素x[0]は 7.526 y[0]は 2.474 z[0]は10.000\n要素x[1]は 3.125 y[1]は 6.785 z]1]は10.000");

あほな質問はやめろって言ってんだろ
224デフォルトの名無しさん:2009/07/27(月) 23:48:50
何のひねりもなくてつまらんかった
225デフォルトの名無しさん:2009/07/27(月) 23:54:38
宿題は宿題スレへ
226デフォルトの名無しさん:2009/07/28(火) 07:07:07
宿題は自分でやれ
227デフォルトの名無しさん:2009/07/28(火) 08:51:20
宿題終わらせないと9月が来ないからな。
228デフォルトの名無しさん:2009/07/28(火) 09:03:01
9月が来ないなら、人生を終わらせておけばいいじゃない。
229デフォルトの名無しさん:2009/07/28(火) 09:33:21
>>223
あほな回答はやめろって言ってんだろw
230デフォルトの名無しさん:2009/07/28(火) 09:55:14
ハルヒを押し倒さないと9月は来ませんよ
231デフォルトの名無しさん:2009/07/28(火) 09:57:24
で、ループは抜けたのか?
232デフォルトの名無しさん:2009/07/28(火) 11:03:08
>>227
それって最高だろw
233デフォルトの名無しさん:2009/07/28(火) 14:20:39
配列の初期化で質問です。
配列を0で埋めたい場合、
int a[100] = {0};
というサンプルを見たのですが、0xffffで埋めたい場合はどう書けばいいのでしょうか?
234デフォルトの名無しさん:2009/07/28(火) 14:22:45
>>233
それで埋まるんだっけ?
235デフォルトの名無しさん:2009/07/28(火) 14:29:24
足りない分は0で埋める仕様
初期化時に任意の値で足りない分を埋める仕様は無い
236デフォルトの名無しさん:2009/07/28(火) 14:32:07
じゃあfor文で埋めるか
int i;int a[100];for ( i=0; i<100; i++ ) { a[i] = 0xffff; }
237デフォルトの名無しさん:2009/07/28(火) 14:32:35
#include <stdio.h>
int main()
{
for (int ic = 0; ic < 100; ++ic) printf("0xffff, ");
return 0;
}
--
というプログラムを作って./a.out > foo.i とでもしてfoo.iを作ったら、
int a[100] = {
#include "foo.i"
};
--
でOK。
238デフォルトの名無しさん:2009/07/28(火) 14:43:32
>237CXXerか。

C99なら、いや、やっぱり何でもない。オナニーは一人でするもんだ。
239デフォルトの名無しさん:2009/07/28(火) 15:03:06
int a[100];
memset(a, 0xff, sizeof(a));
240デフォルトの名無しさん:2009/07/28(火) 15:11:07
>>239残念
241デフォルトの名無しさん:2009/07/28(火) 15:12:37
int が 16bit のときだけおkだ
242デフォルトの名無しさん:2009/07/28(火) 15:20:34
8bitでなくて?
243デフォルトの名無しさん:2009/07/28(火) 15:21:21
ん?
>>239でも問題ないよ。
244デフォルトの名無しさん:2009/07/28(火) 15:23:38
問題あるわ
245デフォルトの名無しさん:2009/07/28(火) 15:25:07
sizeof(a) はちゃんと400になったぞ?
246デフォルトの名無しさん:2009/07/28(火) 15:26:16
全部 0xff で埋めちゃだめ。
247243:2009/07/28(火) 15:27:44
ああ、0x0000ffffか。
ごめん、俺が間違えてた。
248デフォルトの名無しさん:2009/07/28(火) 15:34:20
int a[10];
とか書いたらスタックメモリ(?)にプログラムの最初から最後までint 10個分のメモリは存在し続けるんでしょうか?
それともその配列のあるスコープに入ったら確保されるんでしょうか?
249デフォルトの名無しさん:2009/07/28(火) 15:36:16
実装依存。
スコープよりも少し広く、関数に入った時点で確保する実装もありそう。
250デフォルトの名無しさん:2009/07/28(火) 16:03:23
最適化の影響もあるだろうしな。
251デフォルトの名無しさん:2009/07/28(火) 16:04:11
スコープに入っている間は少なくとも有効であることは保証される

っていうだけで、いつから確保するか、いつ捨てるかは特に規定されていない。
252239:2009/07/28(火) 16:18:56
ああそうか、0xffffか。
すまんかった><
253デフォルトの名無しさん:2009/07/28(火) 17:22:47
ありがとうございます。
省略せずにきちんと0x0000ffffと書くべきでしたね。すみませんでした。
一発で埋める方法はなさそうなので、関数かマクロを作ることにします。
254デフォルトの名無しさん:2009/07/28(火) 17:28:39
>>253
そう言う君は
C++でコンストラクタを学ぶととても幸せになれるかもしれない。

255デフォルトの名無しさん:2009/07/28(火) 17:35:08
いやいや、こっちの勘違いなので。
256デフォルトの名無しさん:2009/07/28(火) 19:54:51
int型をdouble型に変換してから計算することをなんというのですか?
257デフォルトの名無しさん:2009/07/28(火) 19:58:17
トランスフォーメーション
258デフォルトの名無しさん:2009/07/28(火) 20:02:19
>>256
全然たいした技法ではないので
特に呼び名はありません。

・・・もしかしてキャストとカンチガイしている?
259デフォルトの名無しさん:2009/07/28(火) 20:59:22
>>258
下のような説明文の()に入る言葉です。

イント型変数で除算を行うと演算結果の少数部が切り捨てられて正しい値が得られない。これを避けるためにイント型の数値をdouble型に変換してから計算する。これを( )といい…
260デフォルトの名無しさん:2009/07/28(火) 21:01:17
>>259
初めて聞いた。

そんなクソ参考書 捨ててしまえ。
焼却処分しろ。
261デフォルトの名無しさん:2009/07/28(火) 21:02:38
その参考書を知りたいw
市販の物?それとも学校の教員とかが作ったもの?
262デフォルトの名無しさん:2009/07/28(火) 21:12:03
文字通り
 「尻も拭けない紙」
ってヤツか?
263デフォルトの名無しさん:2009/07/28(火) 21:13:21
教員が作ったものです
264デフォルトの名無しさん:2009/07/28(火) 21:23:42
>>259
「型変換」で通じる。
265デフォルトの名無しさん:2009/07/28(火) 21:26:44
ドラゴンキャストといいます
266デフォルトの名無しさん:2009/07/28(火) 21:26:44
ちょwww
それが答えか!
もしかして高校生?
267デフォルトの名無しさん:2009/07/28(火) 21:30:31
イントーダブル変換
ですかね
268デフォルトの名無しさん:2009/07/28(火) 21:33:26
int i;
double d,b;

i = 50;
b = 50.3;

d = b + (double)i;

みたいなことするってこと?
269デフォルトの名無しさん:2009/07/28(火) 21:35:33
インド型変数…
なんかすごいトリッキーな計算してくれそうじゃね?
270デフォルトの名無しさん:2009/07/28(火) 21:36:31
>>268
そうです
271デフォルトの名無しさん:2009/07/28(火) 21:40:06
%(剰余演算)をせずにint型の整数が奇数か偶数か判別する方法はありますか?
ビット演算でできるといわれたんですが
272デフォルトの名無しさん:2009/07/28(火) 21:40:56
うちの流派じゃそういうのはよくない例として禁止してる
273デフォルトの名無しさん:2009/07/28(火) 21:41:32
>>271
0x01でANDをとればいい
274デフォルトの名無しさん:2009/07/28(火) 21:42:03
>>272
ソースみたときに
わかりにくいからですか?
275デフォルトの名無しさん:2009/07/28(火) 21:42:15
ごめん
1でいいや
276デフォルトの名無しさん:2009/07/28(火) 21:44:24
「工夫」でいいんじゃね?

>>268その例だとキャストの必要ないし
d = b + i;
277デフォルトの名無しさん:2009/07/28(火) 21:46:12
>>274
負の数で誤爆するから
278デフォルトの名無しさん:2009/07/28(火) 21:46:54
あ、ごめん間違えた
279>>273 >>275:2009/07/28(火) 21:54:42
>>271
intの場合(整数ならどれも同じだけど)2進数として考えた場合の各ビットの重みは

・・・32 16 8 4 2 1

という感じになります

つまり0ビット目のみ奇数か偶数を取り残りのビットは常に偶数になります
280デフォルトの名無しさん:2009/07/28(火) 22:04:13
iが奇数の場合、i & 1が真になることがCの文法で保証されているの?
281デフォルトの名無しさん:2009/07/28(火) 22:05:40
正数に限って、はい。
282デフォルトの名無しさん:2009/07/28(火) 22:07:24
-1も16進でみると

0xFFFF・・・FFFで1は立つので問題ないか
283271:2009/07/28(火) 22:12:57
http://ufcpp.net/study/algorithm/col_circular.html

この循環バッファをCで実装したいんですが・・・


うまくできません。考え方だけでいいので教えてくださいませんか
284デフォルトの名無しさん:2009/07/28(火) 22:14:26
>>283
>うまくできません。
これではさっぱり分かりません
285デフォルトの名無しさん:2009/07/28(火) 22:17:33
考え方がわかりません。剰余をANDで置き換える部分です
286デフォルトの名無しさん:2009/07/28(火) 22:19:12
#define Free_NUM_MIN 0
#defien Free_NUM_MAX 16

int FreeNum = Free_NUM_MIN;

int FreeNumGet()
{
int ret = FreeNum;
FreeNum++;
if(FreeNum > Free_NUM_MAX) FreeNum = Free_NUM_MIN;
return ret;
}

こんな感じであいてるバッファの位置を管理する機能を作ってFreeNumGet関数が返した位置を元に
バッファにアクセスすればOK
287デフォルトの名無しさん:2009/07/28(火) 22:25:59
どっちが早いんやろうか?
288デフォルトの名無しさん:2009/07/28(火) 22:27:38
>>282
負数が2の補数で表現される保証はない
289デフォルトの名無しさん:2009/07/28(火) 22:29:54
>>285
正整数の 2 のべき乗の剰余に限り可能
x を正整数とする
x % 4 = x & 3
x % 16 = x & 0xf
x % 65536 = x & 0xffff
290デフォルトの名無しさん:2009/07/28(火) 22:38:29
・4の倍数ってのは2進表記をした場合に下二桁は常に0になる
・4で割ったあまりは2進数表記をした場合の下二桁と同じ
・下二桁を取るには、二進表記での11、つまり3とandを取ることで取得できる
どこから分からないのかな
291デフォルトの名無しさん:2009/07/28(火) 22:40:51
x % 4 = x & 3

っておかしくないっすか?
292デフォルトの名無しさん:2009/07/28(火) 22:44:11
>>291
3は二進数にすると0011
4は二進数にすると0100
4で割った余りだから2ビットを残せばいい
293デフォルトの名無しさん:2009/07/28(火) 22:47:15
4で割ったことを想定してもいい

右に2ビットシフトだろ?
つまり無くなるのは2ビット
これが余りになる
294デフォルトの名無しさん:2009/07/28(火) 22:54:51
>>291
代入するのはおかしいっていってる?
何がおかしいと思ってるか伝わらんよ
295デフォルトの名無しさん:2009/07/28(火) 22:55:18
#if

こういうのは何て言うんですか?
C言語 シャープでググルとC#が出てしまう。
296デフォルトの名無しさん:2009/07/28(火) 22:57:12
プリプロセッサ
297デフォルトの名無しさん:2009/07/28(火) 23:01:47
プリプロセッシングディレクティブ preprocessing directives
ISO/IEC 9899:1999 (E)
6.10 Preprocessing directives
298デフォルトの名無しさん:2009/07/28(火) 23:02:07
>>296
ありがとう。
299デフォルトの名無しさん:2009/07/28(火) 23:08:16
プリプロセッサ制御子とかプリプロセッサ指示子とかプリプロセッサ命令とか言われているけど
英語は>>297にあるようにpreprocessing directives
300デフォルトの名無しさん:2009/07/28(火) 23:50:04
クルマとか バイクの エンジンの制御プログラミングって
どうなってるの? さわりとか すこしでいいから書いてみせて
301デフォルトの名無しさん:2009/07/28(火) 23:53:31
>>300
じゃあ少しだけだぞ
if
302デフォルトの名無しさん:2009/07/28(火) 23:55:29
エンジンの 制御とかのプログラミングソフトとかが あって 数値を
入力すれば 適正馬力とか エンジンが回転して 出力を出すように シュミレートされる とか とにかく 数値を入力していくだけでいいとかかなあ
303デフォルトの名無しさん:2009/07/28(火) 23:57:06
あの手のファームはデータベースと隣り合わせだろ

304デフォルトの名無しさん:2009/07/28(火) 23:57:55
小学生ですか?
305デフォルトの名無しさん:2009/07/29(水) 00:02:42
interfaceでも読んでろ
306デフォルトの名無しさん:2009/07/29(水) 00:31:57
>>300
さわりを教えるわけにはいかんだろ企業秘密的に
307デフォルトの名無しさん:2009/07/29(水) 01:17:56
最近句読点がないのがはやってるのか?
http://pc12.2ch.net/test/read.cgi/tech/1184483810/141
308デフォルトの名無しさん:2009/07/29(水) 02:24:51
>>305
毎年なんだろうけど4月号か5月号が組み込みの基礎だったな
アセンブリから入ってC言語のポインタ辺りまでさらっと書いてあった
309デフォルトの名無しさん:2009/07/29(水) 06:01:04
パチスロ制御はZ80アセンブラ
310デフォルトの名無しさん:2009/07/29(水) 09:52:39
>>309
メイン基板は面白味も何もなさそうだね。
311デフォルトの名無しさん:2009/07/29(水) 10:04:06
新幹線のモーターはH8で制御してる
312デフォルトの名無しさん:2009/07/29(水) 10:06:50
まあリレーのオンオフできればあとは大容量の電気が流せるリレーとかをさらに制御してと
段階を踏めばいいからな
313デフォルトの名無しさん:2009/07/29(水) 14:58:24
入力信号を割り込みで受け取り、うじゃうじゃと計算して出力ポートに信号を送る。
314デフォルトの名無しさん:2009/07/29(水) 15:01:20
うじゃうじゃ
315デフォルトの名無しさん:2009/07/29(水) 15:02:21
関数Aでva_listを宣言、va_startをし、
そのva_listを関数Bに引数で渡し、
関数Bでva_argしても、強制終了し、
また、ポインタにして渡しても、
値が指定値になってくれないのですが、
使用できないやり方なんですかね。
316デフォルトの名無しさん:2009/07/29(水) 15:13:55
初心者はサンプル通りに書いとけ
317デフォルトの名無しさん:2009/07/29(水) 15:15:24
>>316
ありがとうございます。そうします。
318デフォルトの名無しさん:2009/07/29(水) 15:26:08
0÷0の答えが「NaN」と表示されます。
答えを0にしたい場合はどうすればいいですか?
319デフォルトの名無しさん:2009/07/29(水) 15:28:56
その前に0では割れない
分母が0になることがあるならif文などでチェックしておくしかない
320315:2009/07/29(水) 15:30:16
>>316
マクロで書くという方法があるんですね。
行末に \を付けるのがめんどくさいですが。
321デフォルトの名無しさん:2009/07/29(水) 15:31:47
double division(a, b) {
if(a == 0.0 && b == 0.0)
return 0.0;
else
return a / b;
}
322デフォルトの名無しさん:2009/07/29(水) 15:36:26
>>321
a != 0.0 && b == 0.0のときは
323デフォルトの名無しさん:2009/07/29(水) 15:36:48
>>321
division(1.0, 0.0) であぼん
324318:2009/07/29(水) 15:38:24
>>319>>321
ありがとうございます!
0で割れないのなら、割り算の過程を飛ばし、0を返すってことですね。
よく分かりました。ありがとうございました。
325321:2009/07/29(水) 15:38:47
>>318から、ただのゼロ除算については未定義だからあえて書かなかった
326デフォルトの名無しさん:2009/07/29(水) 15:42:11
>>325
それは悪かった
327デフォルトの名無しさん:2009/07/29(水) 15:52:23
0÷0は計算できないって義務教育で習ったはずだけど、
その答えを0にしたいとか…、この人学校行ってないのかな?
328デフォルトの名無しさん:2009/07/29(水) 15:54:57
>>327
その辺はわかってるでしょ
コンピューターだから勝手に0にしてくれると思ってたとかそういうオチじゃないの?
329デフォルトの名無しさん:2009/07/29(水) 15:55:42
>>327
おまいは小・中・高どれだ?
330デフォルトの名無しさん:2009/07/29(水) 16:09:59
>>329
今年の夏はいちいちつっかかるのが流行りなのか?
331328:2009/07/29(水) 16:12:33
それを書かなければ終わってたのに・・・
332デフォルトの名無しさん:2009/07/29(水) 17:01:00
>>328のまるでよく分からない推測もいらんよね

それはそうと0/0の値はNaNではなくて不定であるべきだという疑問を持つんだが
333デフォルトの名無しさん:2009/07/29(水) 17:03:59
不定で何を返すの?
334デフォルトの名無しさん:2009/07/29(水) 17:04:17
not a number じゃないのw
335デフォルトの名無しさん:2009/07/29(水) 17:05:02
ゼロ除算は例外を投げるべき
336デフォルトの名無しさん:2009/07/29(水) 17:10:43
>>332
標準規格では0で割った場合の動作は未定義。
NaNを返そうが例外を投げようが鼻から悪魔が出ようが構わない。

ところで、標準Cとは全く関係ない蛇足だけど
IEEE 754としては不定を表すことを意図した値がNaNだろ。
337デフォルトの名無しさん:2009/07/29(水) 17:14:28
>>315
それはなんか間違いをしているだけのはず。
vprintfなどva_listを引数に渡す実例はある。
338デフォルトの名無しさん:2009/07/29(水) 17:32:12
1/0はNaNで問題ないと思うが、0/0は違う解釈も十分できるんじゃないかと思って。
339デフォルトの名無しさん:2009/07/29(水) 17:34:22
0割りはとにかくNaNでしょ
プロセッサが処理できないはず
340デフォルトの名無しさん:2009/07/29(水) 17:36:44
1/0 => +Inf
-1/0 => -Inf
0/0 => NaN
341デフォルトの名無しさん:2009/07/29(水) 17:39:18
カレー食いたくなってきた
342デフォルトの名無しさん:2009/07/29(水) 17:39:32
#include <float.h>
_control87(0, _MCW_EM);
343315:2009/07/29(水) 17:53:21
>>337
ありがとうございます。
確かにvprintfとかありますもんね。
もう一度実験した所、ポインタで渡すやり方はうまくいきました。
そのまま渡すと、一つ目の内容のみが表示されます。

ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9858.txt
344デフォルトの名無しさん:2009/07/29(水) 19:24:54
void FooFoo(int marker) {
printf("%d\n", marker++);
}
void Foo(int suu) {
int i, marker = 0;
for(i = 0; i < suu; i++)
FooFoo(marker);
}
みたいなのと同じで、
関数の中で値を変更しても呼び出し元に影響しないせいでは?
345315:2009/07/29(水) 19:52:39
>>344
ありがとうございます。
なるほど、確かにそうですね。
以下のでいけました。

>>315のも>>343のFooやBarみたいな感じでやりつつ、
さらに別の所にエラーがあり、落ちたのかもしれません。

//別の関数 + カウンタを別の関数で
void PiyoPiyo(va_list marker, int suu)
{
int i;

for(i = 0; i < suu; i++)
printf("%d\n", va_arg(marker, int));
}
void Piyo(int suu, ...)
{
va_list marker;

va_start(marker, suu);
PiyoPiyo(marker, suu);
va_end(marker);
}
346デフォルトの名無しさん:2009/07/29(水) 20:30:17
piyoとかhogeとかfooとかふざけやがって
347デフォルトの名無しさん:2009/07/29(水) 20:39:17
他の人が作ったライブラリを使って自分用のライブラリを作ろうと思ったんだけど
出来たものは前のライブラリのlibが無けりゃ動かないとんだ欠陥品だった。

自分が生成したlibファイル一個で動くようには出来ないの?
348デフォルトの名無しさん:2009/07/29(水) 20:46:28
>>347
そんな欠陥品使わずに自分で作ればおk
349315:2009/07/29(水) 20:51:42
>>346
すいません。
一時的に名前を使いたい時などに
hogeなどを使うといいらしいので使ってしまいました。
質問する時は、ちゃんと分かりやすい名前にした方がいいですね。
350デフォルトの名無しさん:2009/07/29(水) 21:00:47
aaaaaaaaaaaaaaaaaaaaaaaaaaa
351デフォルトの名無しさん:2009/07/29(水) 21:38:07
>>310
パチンコ用ハードの流通ルートは面白いよ
原価100円もしないZ80互換チップが、なぜか何十倍もの値段で……

おっと誰か来たようだ
352デフォルトの名無しさん:2009/07/30(木) 09:46:00
>>351
気をつけろ組織の奴らかもしれないぞ
353デフォルトの名無しさん:2009/07/30(木) 12:11:50
>>351
いまはLETEC社製のCPU,ROM内蔵型のV4チップ
354デフォルトの名無しさん:2009/07/30(木) 23:09:36
自決しました
355デフォルトの名無しさん:2009/07/30(木) 23:51:36
C勉強して何になるんだよ。うんこが。
356デフォルトの名無しさん:2009/07/30(木) 23:53:24
Cってでも入門用にはいい言語だと思う
シンプルだし
357デフォルトの名無しさん:2009/07/31(金) 00:03:51
信頼性のあるものを作るときはやっぱりCかなと思う
358デフォルトの名無しさん:2009/07/31(金) 00:05:53
それはない
359デフォルトの名無しさん:2009/07/31(金) 00:11:32
世の中、OSカーネルとかドライバとかファームウエアとかは、ほとんどCだろう
アプリでも重要な部分はCで作ることが多い
360デフォルトの名無しさん:2009/07/31(金) 00:18:28
あんまり関係ない
361デフォルトの名無しさん:2009/07/31(金) 00:39:13
C普通に仕事で使うよ
カリカリッと動くのがいいやね
362デフォルトの名無しさん:2009/07/31(金) 00:48:34
使わんことはないがCで書くかどうかは信頼性で決まる事じゃないな
363デフォルトの名無しさん:2009/07/31(金) 00:54:51
折角Cになって開発効率あがると思ったのに性能上げるためにキャッシュ効率まで考えなければいけない時の絶望感といったら
364デフォルトの名無しさん:2009/07/31(金) 00:56:44
信頼性って具体的に何だよ
365デフォルトの名無しさん:2009/07/31(金) 00:59:00
色々な事に使われてるという実績があるってだけじゃね
366デフォルトの名無しさん:2009/07/31(金) 07:04:48
開発環境自体のバグは少なそうな気がする
マイコン用とかASIC用とかそういう特殊な分野においては
367デフォルトの名無しさん:2009/07/31(金) 09:24:32
アプリエラーで死んでもいいさ、原因不明打ち切りでもいいさ
ってプログラムしか作らない人はなんでもいいんじゃね?
368デフォルトの名無しさん:2009/07/31(金) 13:25:14
>>356
文法がシンプルだから入門者向けとは必ずしもいえない。
369名無しさん:2009/07/31(金) 18:36:02
intへのポインタってint *x であってる?
370デフォルトの名無しさん:2009/07/31(金) 18:42:50
yes
371デフォルトの名無しさん:2009/07/31(金) 18:43:10
no
372デフォルトの名無しさん:2009/07/31(金) 18:43:29
not yet
373デフォルトの名無しさん:2009/07/31(金) 18:51:45
intへのポインタはint*
変数名まで書くと、それはポインタじゃなくてポインタ変数
374デフォルトの名無しさん:2009/07/31(金) 18:53:33
またなんかメンドクサイ話に発展しそう
375デフォルトの名無しさん:2009/07/31(金) 21:57:18
久しぶりにこのスレ見たんだが、相変わらずCを使わせたくない人が定期的に沸くんだな。
どういう意図かは知らんがウザいことこの上ない。
376デフォルトの名無しさん:2009/07/31(金) 22:19:56
どなたか K&R の間違い集についてご存知の方はおられませんか。
昔みたときは、演算子の評価順序についてまで事細かに指摘されていたのですが。
ご存知の方はよろしくお願いいたします。
377デフォルトの名無しさん:2009/07/31(金) 23:04:53
378デフォルトの名無しさん:2009/07/31(金) 23:59:57
シンプルな言語だと入門用には向かないんかな?
複雑な方が入門向けってことなの?
379デフォルトの名無しさん:2009/08/01(土) 00:12:40
複雑じゃないと教え甲斐がないだろ……
380デフォルトの名無しさん:2009/08/01(土) 00:34:09
>>378
ポインタという概念がシンプルかどうかで異論があると思います。
pascal にポインタってありましたっけ?
381デフォルトの名無しさん:2009/08/01(土) 00:41:11
PASCALでも
a: ^integer;
とか
b: Pointer;

とかポインタ型はたしかあるよ
382デフォルトの名無しさん:2009/08/01(土) 00:44:43
ポインタ自体は別に難しくないと思うけど。メモリ上の位置を記憶するだけだし。
むしろ表記に問題があるんじゃないかね?*やら&やら他にも意味を持つ記号を使うあたりが。
383デフォルトの名無しさん:2009/08/01(土) 00:50:24
例えばFORTRANはシンプルだ。
しかし、恐らく、多くのプログラム初心者の夢や希望には応えられない。
いまどきの初心者はWindowsやMacといったリッチなコンピュータ環境が当たり前だから
真っ黒な背景にテキストを表示するのが精一杯のような言語を学ぶのを楽しいと思うだろうか?
384デフォルトの名無しさん:2009/08/01(土) 00:51:59
ゲームの改造コード自力サーチや、メモリ直接いじりなどをやっていたから
ポインタ自体はすぐに理解したが、ポインタを使っているコードは中々理解できなかった
385デフォルトの名無しさん:2009/08/01(土) 00:58:21
CASLをやれよ一番先に
386デフォルトの名無しさん:2009/08/01(土) 00:59:13
そもそも入門書にはポインタの利点がわかるようなサンプルが少なくない?

int a;
int *b;
b = &a;

これでbは&aを指しますので、*bへの代入結果はaへの代入結果となります^^
とかいう説明で終わってる。必要性を感じれないようなサンプルの本が多い気がするのだけど気のせいかしら?
387デフォルトの名無しさん:2009/08/01(土) 01:01:40
>>386
アセンブラレベルでみればポインタ使うなあという箇所もCだとそれっぽくならないからねえ
リストとか使い出してはじめてわかる
388デフォルトの名無しさん:2009/08/01(土) 01:03:27
>>385
casl 実装があるならまだしも。そういう教科書はみたことがあるが思い出せない、ポインタ求む。
389デフォルトの名無しさん:2009/08/01(土) 01:04:28
何を言ってるのだ。

Cでは文字列を扱うといやおうなくポインタを使う羽目になる。
そして、文字列をまったく必要としないプログラムはそれほど多くない。
390デフォルトの名無しさん:2009/08/01(土) 01:23:44
文字列定数の先頭アドレスとしてポインタ渡しするって事実も、別にポインタなんかわからなくても
ああ、こういう書き方するのか、ふーん、で書き方として納得して終わってしまう

ポインタで書くと便利だ!ということから便利さを感じる例ってのが意外と少ないよ
391デフォルトの名無しさん:2009/08/01(土) 01:34:51
まあ小さいプログラムじゃあ必要性は見出しにくいのは事実だね
規模が大きくなればポインタは使うようになるよ。
大きな配列を動的に確保して管理するために使うような簡単な物から
リストとかいった若干手の込んだ使い方まで

高度になってくると、状態遷移を切り替えるためにポインタ使うとかあるけど
392デフォルトの名無しさん:2009/08/01(土) 01:46:50
8bitニーモニックのモトローラ派(ポインタを意識する)とザイログ派(ポインタを( ) で包むなどポインタを意識しない)で差があったようなきが。
393デフォルトの名無しさん:2009/08/01(土) 02:07:15
山積みした書類から先週月曜辺りと目算して必要な資料を取り出せるのが ぽいんた
394デフォルトの名無しさん:2009/08/01(土) 02:07:41
>>386
全ての変数をポインタとメモリ割り当てで作ってみてはどうか?
int a;
という処理が
int *a = malloc(sizeof(int) * 1);
という処理とほぼ同義とすぐ理解できると思うのだが。
395デフォルトの名無しさん:2009/08/01(土) 02:18:27
>>394
それって java?
396デフォルトの名無しさん:2009/08/01(土) 02:32:22
>>394
ありまに くなだらい ので そいうう わけの わかならい こと を いうの やめて くさだい。
397デフォルトの名無しさん:2009/08/01(土) 02:36:58
バカでっかいキューを実装するのはいい経験にならないかな?
配列風に連続領域を確保すると都度コピーが必要なのに対し、リストだとデータ1つ分追加だけで済む。
で、目に見えて速度差が出てリストすげー!ポインタすげー!となったらいいなあ。
398デフォルトの名無しさん:2009/08/01(土) 02:44:35
>>378
言語がシンプルだと、複雑なことを全部自分で面倒見ないといけないからな。
399デフォルトの名無しさん:2009/08/01(土) 05:52:31
オートマとマニュアルの違いみたいなもんだな。
400デフォルトの名無しさん:2009/08/01(土) 08:30:47
ポインタが
ヒープ領域の割り当てをするために必要な場合と
スタック領域の変数を示す場合に必要な場合で
前者を使わない限り特に利点がな
401デフォルトの名無しさん:2009/08/01(土) 08:47:11
スタック領域をポインタでいじるの怖すぎ
402名無しさん:2009/08/01(土) 09:36:28
オブジェクト指向やってから再びCを見ると
なんでこんなに簡単なんだろうって思う。
403デフォルトの名無しさん:2009/08/01(土) 10:13:07
C++勉強し始めると、C++は糞だからC一本で行こうっていう時期が必ず来るよね
404394:2009/08/01(土) 10:19:50
通常変数とポインタ変数の使い分けを強要されるから混乱するんだよ初心者は。
・変数や関数は全てメモリ内のどこかのアドレスに配置されること。
・アドレスが存在する以上ポインタと言えること。(実際ポインタで表現できること)
この2つを最初に学習して、後から「実は簡単な表現方法もあるんだよ」と教えればいい。
まあコンピュータの仕組みを覚えるにはアセンブラが一番なんだが。
405デフォルトの名無しさん:2009/08/01(土) 10:25:11
>>403
言い方を変えると「俺は頭が悪くてC++を理解できないや」と
自覚する時期の事だね
406デフォルトの名無しさん:2009/08/01(土) 11:15:19
>・変数や関数は全てメモリ内のどこかのアドレスに配置されること。
こういう妄想に囚われていると、よりよいコードを書けなくなる訳で。
407デフォルトの名無しさん:2009/08/01(土) 11:19:03
それのどこが妄想なんだ?
408デフォルトの名無しさん:2009/08/01(土) 11:19:10
>>406
でもCの場合そういうことも理解してないとだめだしなあ
double型の糞でかい配列を確保してエラーになりましたとか質問してくるのは最たる例だし
409デフォルトの名無しさん:2009/08/01(土) 11:25:31
>>407
変数はレジスタに割り当てられるかもしれないし、そもそも最適化で消えてなくなるかもしれない。
関数もまた然り。インライン展開で事実上存在しなくなることはよくある。
410デフォルトの名無しさん:2009/08/01(土) 11:27:17
>>409
最適化されないベタイメージを知っておくのは悪くない
411デフォルトの名無しさん:2009/08/01(土) 12:16:49
アクセス制御何とか汁
412394:2009/08/01(土) 12:27:33
>>409
アホか。
コード上でポインタとして使われてる関数が最適化で無くなるわけねーだろ。
おまえコンパイラの最適化を何だと思ってるんだ?
413デフォルトの名無しさん:2009/08/01(土) 12:50:32
>コード上でポインタとして使われてる関数
???
関数ポインタのことか?
関数ポインタ経由の関数呼び出しが、インライン展開されることもなくはない。
414デフォルトの名無しさん:2009/08/01(土) 13:10:08
そんなことできたらいいのにね
415394:2009/08/01(土) 13:13:18
>>413
あのさ、そもそもコーディング時の考え方と、最適化時の考え方は分けるべきだろ。
「極めて無駄な書き方をしたときだけ」という条件付きで「関数も消える」って?
それがコーディング時の「関数もメモリに存在する」という考え方と何の関係があるの?
416デフォルトの名無しさん:2009/08/01(土) 13:13:32
関数ポインタがインライン展開されるコンパイラ名を是非披露してくれ
417デフォルトの名無しさん:2009/08/01(土) 13:35:54
gcc

定数なら余裕でインライン展開される
418デフォルトの名無しさん:2009/08/01(土) 14:20:37
たとえインライン展開されても、元の関数はメモリ上に存在するんじゃないの?
他の場所から(インライン展開されずに)呼ばれるかもしれないし。
419デフォルトの名無しさん:2009/08/01(土) 14:27:04
外部リンケージならね
420デフォルトの名無しさん:2009/08/01(土) 14:29:15
外部リンケージを持つ関数がインライン展開されることもある。
421デフォルトの名無しさん:2009/08/01(土) 14:38:44
だからコーディング時の話とコンパイル時の話を一緒にすんなっつーのw
コーディング時に「この関数はインライン展開されるはずだからポインタは使えない」とか考えるの?
アフォだろどう考えても。
422デフォルトの名無しさん:2009/08/01(土) 14:40:40
また無駄に伸びるな・・・
423デフォルトの名無しさん:2009/08/01(土) 15:15:24
でも、みんな知ってのとおり、C言語の規格票には

>変数や関数は全てメモリ内のどこかのアドレスに配置される

なんてことは一言も書いてないんだよね。
424デフォルトの名無しさん:2009/08/01(土) 15:21:48
関数ポインタを別な何かと勘違いしてるとか
425デフォルトの名無しさん:2009/08/01(土) 15:36:52
だからなんだっつーの?関数へのポインタは規格にちゃんと存在するだろうが。

つーか考える順番が逆なんだよ。最適化が先じゃない。コードが先だ。
コード上で、どこかのメモリをアクセスするポインタが使われているなら、それはコード上はメモリにあるんだよ。
その後の最適化で実質消えても、コード上の考え方、使われ方が変わったわけじゃない。
426デフォルトの名無しさん:2009/08/01(土) 15:43:09
>どこかのメモリをアクセスするポインタが使われている

だから、そんなことは規格票のどこにも書いてないんだよね。
多くのコンピュータでポインタの実装にメモリアドレスを利用しているというだけで
別の原理で実装してもいい。
スタックやヒープのないコンピュータシステムだってあるのだから。
そもそもC言語ではポインタ変数やポインタ値に「型」があるけど
メモリ上のアドレスにはそんなものないし、
領域の確保なんてものも言語の都合であって、コンピュータの都合じゃない。
この辺りのことは確か、ポインタ完全制覇の著者も書いてたように思う。

なんのための抽象化なのか、ってことね。
事これがC++になると、ポインタの理解で
アドレスとかメモリとかの実装に縛られるのはいよいよ危険になる。
427デフォルトの名無しさん:2009/08/01(土) 16:00:56
お前は「限定条件付き」で物事を否定するのが好きなの?
多くのコンピュータでメモリアドレスを使用してるならそれが一般的な考えだろうが。

それともう一つ。
どんな原理で実装されていようとも、それがC規格に準拠しているのならコーディングには影響しない。
428デフォルトの名無しさん:2009/08/01(土) 16:06:45
>多くのコンピュータでメモリアドレスを使用してるならそれが一般的な考えだろうが。

「一般的」と思っているのは君だけで、標準規格がすべてだよ。
解釈が分かれたときの決定打こそが標準規格の存在価値なのだと
メイヤーズ先生もおっしゃってたでしょ?

僕は別のコーディングの話がどうとかいうのはしていない。
ポインタとアドレスは別物だから、同じとみなすのは危険だよと言ってるだけ。
429デフォルトの名無しさん:2009/08/01(土) 16:16:39
先生、入門者のみなさんがどん引きしてます!
430デフォルトの名無しさん:2009/08/01(土) 16:25:31
>>428
めんどくさいヤツだなw
最適化がどうのインライン展開がどうのと、最終的に出来るバイナリコードの話ばっかしてたのは誰だよ?
オレは最初っから初心者のコーディングの考え方の話をしてんだろうが。
431デフォルトの名無しさん:2009/08/01(土) 16:39:11
だから私はコードだけで勝手な仮定はするべきじゃないと思うのよね。
432デフォルトの名無しさん:2009/08/01(土) 16:50:07
>>410 のいわれるとおり、べたイメージを踏まえた上で規格を知っておくのは、私のような初学者にはありがたいんですが、
それでも >>428 の立場の人もいるんですね。
433デフォルトの名無しさん:2009/08/01(土) 17:14:54
>>430
>最適化がどうのインライン展開がどうのと、最終的に出来るバイナリコードの話ばっかしてたのは誰だよ

僕じゃないよ^^;;; 自分は423,426,428だけ。
IDないのとレス番をつけなかったからいろいろまじっちゃったかな。

K&R第2版ではmallocの実装を通して、
抽象(ポインタ)と実装(メモリ)との関連を理解できるようになるんだけど
そういう教科書は他にあんまりないんだよね…。
434デフォルトの名無しさん:2009/08/01(土) 17:16:49
IDつけてくれよ
435デフォルトの名無しさん:2009/08/01(土) 17:30:45
C言語の標準云々を議論するやつらを隔離するためのスレがあったはずなんだが。。
436デフォルトの名無しさん:2009/08/01(土) 18:43:31
>>435
規格スレはCの規格の文言をソースにして議論するためのスレなので、
ここで嬉々として規格規格言ってるような馬鹿には来ていただきたくないです。
437デフォルトの名無しさん:2009/08/01(土) 20:02:03
バカ専用のスレに来ているあなたも相当なバカですね
438デフォルトの名無しさん:2009/08/01(土) 20:20:57
int型からstd::string型への型変換はどうしたらできますか?
439デフォルトの名無しさん:2009/08/01(土) 20:22:09
>>438
C言語の範疇では無理
440デフォルトの名無しさん:2009/08/01(土) 20:26:09
>>439
レスありがとうございます。
スレタイ見たらC言語だけ見たいですね・・・
スレ汚してすいませんでした。
441デフォルトの名無しさん:2009/08/01(土) 20:54:47
& は address-of 演算子。
442デフォルトの名無しさん:2009/08/01(土) 21:55:23
1.itoa(非標準)
2.sprintf → char配列 → std::string
3.
int a;
stringstream ss;
ss << a;
string s = ss.str();
443デフォルトの名無しさん:2009/08/01(土) 23:04:11
EOFまで標準入力を読み込むプログラムを書きたいんですが、getcで一文字ずつ読み込む際、
Ctrl+Zが改行の直後のみEOFを返し、それ以外ではEOFではなく制御文字SUBを返してるっぽいです。
これは普通の挙動ですか?
444デフォルトの名無しさん:2009/08/01(土) 23:10:02
ターミナルエミュレータの使い方は板違い
445デフォルトの名無しさん:2009/08/01(土) 23:17:14
STREAMの挙動はスレ違い
446デフォルトの名無しさん:2009/08/01(土) 23:29:18
すいません。それっぽいスレ探してきます。
447デフォルトの名無しさん:2009/08/01(土) 23:35:16
>>446
てか、使っているターミナルの仕様を調べたほうがはやいんじゃね
448デフォルトの名無しさん:2009/08/02(日) 02:11:59
Cコンパイラ(visual stdio 2005)とテキストエディタ(Tera Pad)をインストールしてから、visual stdioのコマンドプロンプトで動作させるにはどうすればいいですか?お願いします。
449デフォルトの名無しさん:2009/08/02(日) 02:30:06
>>448
VisualStudioスレ辺りへどうぞ。
450デフォルトの名無しさん:2009/08/02(日) 04:28:03
>>448
Visual C++を始めWindows上のCコンパイラは、Linuxとかの
UNIX上でC開発をある程度やった人じゃなきゃ扱いは難しいよ。
(IDEもそれなりに難しいが、コマンドラインツール群を
使うのはもっと難しい)

C/C++(特にC)がUNIXと深い関わりがあるってことは
知ってるだろ?参考書とか教科書もどうしてもUNIXを
引きずることになる。

Windows上ではそれに加えてWindows上の色々な特殊事情が
差分として加わるんで。
451デフォルトの名無しさん:2009/08/02(日) 05:43:57
おもしろすぎる
452デフォルトの名無しさん:2009/08/02(日) 12:03:35
449>>
ありがとうございます。
450>>
授業で使う程度なので、UNIXとかは聞いたことがあるぐらいです。
普段なら、学校で使えるのですけど。
453デフォルトの名無しさん:2009/08/02(日) 12:49:02
>>450
何わけのわからん事言ってるんだボケが
454デフォルトの名無しさん:2009/08/02(日) 13:07:49
コマンドライン難しいとかこの先大丈夫かよ
455デフォルトの名無しさん:2009/08/02(日) 13:34:08
学習のためにWindowsでとりあえずコンパイルできればいい、ってことならMinGWおすすめ。
できあがるバイナリもかなり小さくて済む。
456デフォルトの名無しさん:2009/08/02(日) 13:34:52
bcc32が良くない?シンプルだし一瞬でコンパイル終わるし
457デフォルトの名無しさん:2009/08/02(日) 13:36:54
cygwin
458デフォルトの名無しさん:2009/08/02(日) 13:39:03
いまどきbccで学習するのは罠でしかない。
上級者が事情わかって使うのならいいけど。
459デフォルトの名無しさん:2009/08/02(日) 13:45:13
冷めたからぶりかえすか

Cの言語規格が実装と分かれてるのがおっぱい
メモリがシームレスかつシーケンシャルに存在するっていう一般的な実装に準拠してない環境なんてザラ
460デフォルトの名無しさん:2009/08/02(日) 13:46:59
bccってなんか悪いことがあるん?
簡単なソースのコンパイルくらいなら問題なさそうな問題?
461デフォルトの名無しさん:2009/08/02(日) 13:48:39
>>460
template周りが腐っとる
それにバグてんこもり
462デフォルトの名無しさん:2009/08/02(日) 13:48:41
例えばどの環境かを具体的に2,3個挙げてみて
463デフォルトの名無しさん:2009/08/02(日) 13:51:14
>>459
> メモリがシームレスかつシーケンシャルに存在する
そんな主張してた人いたっけ?
464デフォルトの名無しさん:2009/08/02(日) 13:54:10
>>461
C++関連のバグはVCにもある。準拠度が一番高いのはgcc。
つーかCの学習する限りはbccでも何ら問題ない。リリースが古いというのは確かだけどね。
最適化のレベルが低いかわりにコンパイルが爆速というメリットがある。
465デフォルトの名無しさん:2009/08/02(日) 13:57:49
>>464
何が「何ら問題ない」だよカス
実際に使ってみて言ってんのか
466デフォルトの名無しさん:2009/08/02(日) 14:00:59
>>465
yes
467デフォルトの名無しさん:2009/08/02(日) 14:03:56
>>460
・学習するためだけに覚えないといけないことが多い
 (その後、bccを実用コンパイラとして使うなら別だが)
・ユーザが少ないため問題がおきたときに情報が少ない
というのが初学者の学習用途には向いてない点。
468デフォルトの名無しさん:2009/08/02(日) 14:04:38
過去スレで、bccだけが明らかに規格に違反した結果になるヤツがあった気がする。
469デフォルトの名無しさん:2009/08/02(日) 14:08:40
>>468
すごく興味深いです
コンパイラは絶対だと思ってたけど、コンパイラにもバグってあるんですね
知りませんでした。恥ずかしい
470デフォルトの名無しさん:2009/08/02(日) 14:14:04
>>468
だからCじゃなくてC++のバグだっての。
471デフォルトの名無しさん:2009/08/02(日) 14:40:21
ここは、C言語のスレです。
Cの学習として、Cの機能だけ使うなら、Cが正しく動けば問題ない。
472デフォルトの名無しさん:2009/08/02(日) 14:50:00
Cコンパイラとしてはbccでも構わないけど、
bcc32.cfgにまつわる質問が絶えないから初心者に勧めるのはやめたほうがいいと思う。
473デフォルトの名無しさん:2009/08/02(日) 15:51:59
Javaしか知らないC初心者です。
質問させてください。

C言語で定数を定義する場合、
#define MAX 999
のように記述しますよね。

でも調べてみるとconstという修飾子があり、これを使うと、
const int MAX = 99;
のように記述できます。
Java出身の自分にはこちらの方が自然に見えます。
定数の型も明瞭ですし。

しかし一般的に#defineの方が使われているのは何か理由があるのですか?
よろしくおねがいします。
474デフォルトの名無しさん:2009/08/02(日) 15:57:23
>>473
const int だと配列宣言するときにうまくいかないコンパイラが多いから
475デフォルトの名無しさん:2009/08/02(日) 16:05:20
const intは定数ではないから
476デフォルトの名無しさん:2009/08/02(日) 16:09:54
constでいいよ
477デフォルトの名無しさん:2009/08/02(日) 16:11:49
Cだと、

const int TBL_SIZE = 100;
int tbl[TBL_SIZE];

みたいなことができない。
C++だとできる。
478デフォルトの名無しさん:2009/08/02(日) 16:15:37
まあ後発の言語か否かってところだねえ
Cは後の言語で可能になってることができないとか結構ある。
479デフォルトの名無しさん:2009/08/02(日) 16:19:07
constは変数に対して読取属性を付けるだけなので、本質は変数
そんでもってCは配列サイズに変数を指定できないから、>>474の言うように
配列サイズにconst intで定義された値を指定するとエラーになる

あと挙動が違うよ
#define MAX 999だと、コンパイル前にソース中からMAXという単語を探して、
そこを999に置き換えた後にソースのコンパイルが始まるという感じ
だからこの場合は、具体的に変数領域に値が確保されるというよりは、コードに値を直接書き込む感じ
constの
480デフォルトの名無しさん:2009/08/02(日) 16:20:50
>>473
constは型修飾子なのでスコープが存在する。
主に、ある関数で引数として受け取った値を、不用意に変更しないように「その関数内に限り変更不可」の印を押すためのもの。
一方プリプロセッサによる置き換えはコンパイルの時点で定数として固定される。
つまり、プログラムの初めから終わりまで変わらない値を定義するなら、プリプロセッサによる置き換えを使うべき。
481デフォルトの名無しさん:2009/08/02(日) 16:33:07
プルプロセッサでは重複があってもエラーにならにやい
482473:2009/08/02(日) 16:43:09
たくさんの返答ありがとうございます。

>>479
>Cは配列サイズに変数を指定できない

これは知りませんでした。。。
なるほど、constはJavaでいうfinal修飾子と同様に変数に属性を持たすだけ。
しかし#defineはプリプロセッサによって本当に定数になるので配列宣言時に使えるわけですね。

>>480
>constは型修飾子なのでスコープが存在する。
>主に、ある関数で引数として受け取った値を、不用意に変更しないように「その関数内に限り変更不可」の印を押すためのもの。

これはJavaのfinalとは違いますね。
char *strcpy(char *dest, const char *src);
のように関数定義の引数でconstが使われていたのもずっと謎でしたが(Javaのfinalをこのように使うのは不可)これも理解できました。

勉強になりました。ありがとうございました。
483デフォルトの名無しさん:2009/08/02(日) 16:50:04
int hoge;


if( hoge & 4 !=0)

この条件式はどういう意味でしょうか?4とANDをとっている部分がわかりません
484デフォルトの名無しさん:2009/08/02(日) 16:52:26
hogeの右から3ビット目が1ならば
485デフォルトの名無しさん:2009/08/02(日) 16:53:47
って & より != のが優先順位高いかw
486デフォルトの名無しさん:2009/08/02(日) 16:56:10
>>485
じゃ、バグだな。
487デフォルトの名無しさん:2009/08/02(日) 16:59:18
優先順位が曖昧な時は括弧付けてる
488デフォルトの名無しさん:2009/08/02(日) 17:00:55
>>483
ビット演算の定数をは10進数でなく2進数にするとわかりやすい。

if( hoge & 0x0000000000000100 !=0)
489デフォルトの名無しさん:2009/08/02(日) 17:01:27
0xって16進では
490488:2009/08/02(日) 17:02:13
!=0はいらない

if( hoge & 0x0000000000000100)

でいい。
491デフォルトの名無しさん:2009/08/02(日) 17:04:11
4 != 0 ⇒ 1
hoge & 1 ⇒ hoge が奇数なら真。hogeが偶数なら偽。
492488:2009/08/02(日) 17:05:47
そうだな。16進数でやるしかないのか。
493デフォルトの名無しさん:2009/08/02(日) 17:06:36
>>483
演算子の優先順位に従うと
hoge & (4 != 0)
となる。つまりhogeと1のANDだから、hogeの1ビット目が1ならば真。
494デフォルトの名無しさん:2009/08/02(日) 17:10:26
0bで2進数じゃne
495デフォルトの名無しさん:2009/08/02(日) 17:12:52
マジックナンバー反対!
496デフォルトの名無しさん:2009/08/02(日) 17:13:43
for文回すときに
for(int i=0;i!=10;i++)
のように、条件判定のところに!=を使うコードは
今まで見たことがないのですが、なぜこれは書かないのでしょうか?
497デフォルトの名無しさん:2009/08/02(日) 17:14:53
i==10
498デフォルトの名無しさん:2009/08/02(日) 17:18:01
>>496
iが11以上になって意図しない動作をする可能性があるから。
499デフォルトの名無しさん:2009/08/02(日) 17:21:02
先生それはただのバグだと思います
500デフォルトの名無しさん:2009/08/02(日) 17:23:09
>>496
・習慣による。
・例えばループ内でiに11を代入してもループを脱出できるように。
・iの型が整数型じゃなかったり初期値が外部からの引き数だったりしてもいいように。
501デフォルトの名無しさん:2009/08/02(日) 17:23:21
>496
範囲として曖昧であるから

C99はもういいから
経験がまだないだけで使うときには使う
例えばリストなどをイテレータのように扱いたいときに
502496:2009/08/02(日) 17:41:13
>>498 >>500 >>501
ありがとうございました。
503デフォルトの名無しさん:2009/08/02(日) 18:11:26
ここの住人的にswitch文ってどうなの

504デフォルトの名無しさん:2009/08/02(日) 18:16:46
ラベルなのが気にくわないとかそういう議論をしたいのであれば
ガチスレで聞いた方がいろいろな意見が出ると思うよ。
505デフォルトの名無しさん:2009/08/02(日) 18:18:20
できるだけ使わないようにしている

異論はあるだろうが、あれはgotoと同じくらい危険だ
整数定数しか使えないこともよくない
if-elseでぶら下がらせまくるかテーブルを作った方が直感的である
また、switchを使うと関数が長くなる傾向にあるので作法的に良くなとされている
506デフォルトの名無しさん:2009/08/02(日) 18:24:45
そうなのかーif-elseがずーっと並んでるより
見やすいときもあると思ってたんだけどな
507デフォルトの名無しさん:2009/08/02(日) 18:51:37
なんでswitchの中で変数宣言できないのだよ
508デフォルトの名無しさん:2009/08/02(日) 18:52:13
ブロックを使えよ
509デフォルトの名無しさん:2009/08/02(日) 18:55:23
>>507
gccなんだかだと
{
}
で囲えばできるけど

swicth(hoge)
{
case 1:
  {
   int a;
   a = ・・・・
  }
  break;
case 2:



}
510デフォルトの名無しさん:2009/08/02(日) 19:05:16
むしろそれでできない環境はあるのかっていう。
511デフォルトの名無しさん:2009/08/02(日) 19:06:05
VCでも同じことできるよ。でもまぁ、見た目が汚い・・・。
512デフォルトの名無しさん:2009/08/02(日) 19:11:39
>>510>>511
そうなんだ
あれこれ使ってるわけじゃないのでよそまでは知らんかった
513デフォルトの名無しさん:2009/08/02(日) 19:12:54
処理速度的にはif-elseよりswitchのほうが効率いいからな。
あまり深いif-elseは考えもの。
514デフォルトの名無しさん:2009/08/02(日) 19:16:23
switch(x) {
    int y, z;

    case 0:
// 〜
}
でだめなの?
515デフォルトの名無しさん:2009/08/02(日) 19:17:04
まあif elseもswitchもジャンプテーブルもその時々で使い分ければいいんでないの?
516デフォルトの名無しさん:2009/08/02(日) 19:18:25
>>514
それはないわw
まだcase単位でスコープ切った方がましだろ
517デフォルトの名無しさん:2009/08/02(日) 19:21:39
>>505
他の所も異論はあるけど。

>また、switchを使うと関数が長くなる傾向にあるので作法的に良くなとされている

初耳。
同じように書けばif-elseでも同様に長くなると思うんだが。
どういうケースでswitch-caseのが長くなるんだ?
518デフォルトの名無しさん:2009/08/02(日) 19:35:31
微妙なボケにマジレスするなよ。。
519デフォルトの名無しさん:2009/08/02(日) 19:55:11
for (int i = 0; i < 10; i++) {
}
みたいにforの条件文の中で変数宣言って出来ないんですか?
手元の書籍では
int i;
for (i = 0; i < 10; i++){
}
のようになってます。
520デフォルトの名無しさん:2009/08/02(日) 19:55:56
Cはできない
C++は可能
521デフォルトの名無しさん:2009/08/02(日) 20:03:06
C99からできるようになった
522デフォルトの名無しさん:2009/08/02(日) 20:10:11
>>513
思い込みは捨てよう。今のコンパイラにとって、効率の差は(最適化を抑制しない限り)殆どない。

>>514
初期化できないので、コンパイラの警告を抑制しにくいと言う問題はある。
因みに、同じ理由でC++ではできない(筈)。
523デフォルトの名無しさん:2009/08/02(日) 20:16:01
C++はコンストラクタ・デストラクタの実行タイミングという問題があるからなぁ。
524デフォルトの名無しさん:2009/08/02(日) 21:38:14
strncpyをvc++で使おうとしたら警告されたんですけど
文字列の最後に'\0'代入を忘れなければ他は別に問題ないですよね?
525デフォルトの名無しさん:2009/08/02(日) 21:45:14
ないです。VCはいちいちうるさいですよね。
526デフォルトの名無しさん:2009/08/02(日) 21:46:08
#include <stdio.h>
void main(void)
{
int a;
for(a=0;a<1000000;a++){
printf("%d\n",a);
}
}
変数aの値が1ずつ増加するプログラムですが、これを実行するとパソコンの方は本気でこのプログラムを実行し、
幾つかコレと同じプログラムを実行するとCPU使用率がすぐ100%に到達してしまいます。
そこで
パソコンがこのプログラムを一秒間に10回程度処理するくらいに控えさせる。
ようにしたいと思います。時間稼ぎ用のfor文を作ってしましたが、それでは時間稼ぎを行うためにパソコンが無駄な処理をしてしまます。
つまり複数同時に実行した時にCPU使用率がすぐ100%に到達してしまいます。
どのようにすれば解決できますか?
527デフォルトの名無しさん:2009/08/02(日) 21:46:59
sleep
528526:2009/08/02(日) 21:55:49
>>527
有難うございます。解決しました
529デフォルトの名無しさん:2009/08/02(日) 23:42:23
以下の問題についてさっぱりわからないので教えてくださいますか?

任意の自然数aと実数bを受け取り,方程式
x^a=b
の解を計算するプログラムを作成せよ(ここでx^aはxのa乗).
ただし,累乗根の計算には,ニュートン法などの数値解法を用いること.
また,解が無い場合はその旨を出力するよう例外処理をすること.
530デフォルトの名無しさん:2009/08/02(日) 23:45:52
この辺とかあるけど過疎ってるなw

プログラミングの為の数学と算数 vol.3
http://pc12.2ch.net/test/read.cgi/tech/1197063023/

こっちでもいいかもね。こっちだと人はいるし
C/C++の宿題片付けます 129代目
http://pc12.2ch.net/test/read.cgi/tech/1247438792/

531デフォルトの名無しさん:2009/08/02(日) 23:54:00
転載言われるからこっちを無しにしてから移動するのおすすめ
532デフォルトの名無しさん:2009/08/03(月) 00:00:35
宿題スレ行け
533デフォルトの名無しさん:2009/08/03(月) 01:41:17
宿題は自分でやれ
534デフォルトの名無しさん:2009/08/03(月) 05:29:55
先生!
DLLから構造体を返すと値がおかしくなります!

LoadLibraryしたdllからint** suuzi_a;とか含む構造体(DLL側で2回mallocしてる)を返す関数を呼ぶと中身が意味不に。
同構造体内のint suuzi_b;とかはきちんと返されるんですが…
exe側からは
kouzoutai = (*dllFunc)();
みたいな呼び方で呼んでます。
dllはまんま
return kouzoutai;
で返してます。

これってもしかしてDLLからのリターンはコピー扱いになってるとかそういうオチですか…
535デフォルトの名無しさん:2009/08/03(月) 05:41:22
>>534
C言語自体にDLLなんて機能はありません。ドザは素直にAPIスレかVisualStudioスレ辺りに引っ込んでなさい。
536534:2009/08/03(月) 05:49:36
アッー
いかん寝ぼけてるなorz CじゃねぇWinAPIだ
この系列のスレは半年ROMるよ…
537デフォルトの名無しさん:2009/08/03(月) 06:32:38
WinAPIの問題ですらないな
538デフォルトの名無しさん:2009/08/03(月) 10:09:16
>>534
こいつコールバック関数の意味もわかってなさそうだな
539デフォルトの名無しさん:2009/08/03(月) 10:14:11
どこにコールバックの話が
540デフォルトの名無しさん:2009/08/03(月) 12:32:28
WindowsXPはリトルエンディアンなの?
541デフォルトの名無しさん:2009/08/03(月) 12:43:06
>>540
そのOSが動作しているハードのアーキテクチャがIA-32なら、内部データはリトルエンディアンで扱われているはず。
542デフォルトの名無しさん:2009/08/03(月) 13:52:55
ソース見なけりゃなんとも言えないがWINAPIとか__stdcall
辺りがあやすい。
いずれにせよMS特有のC文法拡張問題があるから
Windows上でC/C++を学んでしまうと別言語を学んでしま
うのと同じになっちゃうって感じ
543デフォルトの名無しさん:2009/08/03(月) 14:42:52
リトルエンディアンでコンパイルしたバイナリをビッグエンディアンで使うとどうなるの?
544デフォルトの名無しさん:2009/08/03(月) 14:45:55
>>543
動かない
ただし bochs みたいな CPUエミュレータを使えば動かすことも可能
545デフォルトの名無しさん:2009/08/03(月) 14:47:47
>>543
俺もやったことないから実験レポートよろ
546デフォルトの名無しさん:2009/08/03(月) 15:17:35
そもそもバイエンディアンなCPUでないと、
リトルエンディアンのバイナリをビッグエンディアンで動かしてみることすらできないのでは
547デフォルトの名無しさん:2009/08/03(月) 15:27:42
オープンエラー
548デフォルトの名無しさん:2009/08/03(月) 18:07:39
ビッグエンディアン
しばしばリトルエンディアンよりも優れているとされる

リトルエンディアン
しばしばビッグエンディアンよりも優れているとされる
549デフォルトの名無しさん:2009/08/03(月) 18:12:32
どちらが正しいかで戦争までおきているからな。
550デフォルトの名無しさん:2009/08/03(月) 18:13:41
ミドルエンディアンはどうでしょう
551デフォルトの名無しさん:2009/08/03(月) 18:15:01
アメリカインディアンならどうでしょう
552デフォルトの名無しさん:2009/08/03(月) 18:15:09
>>550
戦争を起こそうとも思わないレベルw
553デフォルトの名無しさん:2009/08/03(月) 18:19:36
0x12345678 をバイト列に変換すると……

リトルエンディアン → 0x78, 0x56, 0x34, 0x12
ビッグエンディアン → 0x12, 0x34, 0x56, 0x78
ミドルエンディアン → 0x34, 0x12, 0x78, 0x56
アメリカインディアン → バイト列?なにそれ。
554デフォルトの名無しさん:2009/08/03(月) 18:32:05
Cの浮動小数点型ってよくわからないです
例えばfloat。8388608から小数を表わせなくなりますよね
これは2の23乗

floatの指数部は8ビットで+乗方向は2の127乗まで表せますよね
でも上のように2の23乗から小数すら表せなくなる
せっかくの小数型なのに小数点を表せなくなるくらいなら、
指数部ビット数を削って仮数部を増やせば良かったのになぁと思います

精度を大きく落としてまで大きな値(3.402823e+38)を格納できるようにしたのは、
何か理由があるんですかね
それとも、「これはこういうもの」なんですかね
555デフォルトの名無しさん:2009/08/03(月) 18:33:51
>>554
固定小数点でも使ってろよ
556デフォルトの名無しさん:2009/08/03(月) 18:40:37
>指数部ビット数を削って仮数部を増やせば

指数部を 0 ビットまで削って仮数部を最大限に増やした int という型がありますよ
557デフォルトの名無しさん:2009/08/03(月) 18:47:03
floatでたりなければdoubleもあるし、C言語は採用してるのIEEEで定められた規格のやつだろ?
気に入らないならIEEEに言った方がいいよ
558デフォルトの名無しさん:2009/08/03(月) 18:50:33
どの言語の浮動小数点型ならよくわかるのか?
559デフォルトの名無しさん:2009/08/03(月) 18:53:24
リトルエンディアンから見ればビッグエンディアンプロセッサが
解釈して書き込んだ0x12345678は0x1E6A2C48になるんじゃ?
(その逆も同じ)
560デフォルトの名無しさん:2009/08/03(月) 18:55:36
何か理由があるかって大きな数を格納したいからに決まってるだろ
561デフォルトの名無しさん:2009/08/03(月) 18:57:07
>>559
メンドクサイので推測だがそれビットの並びまで上下変えてないか?
リトルエンディアン、ビッグエンディアンをぐぐってこい
562デフォルトの名無しさん:2009/08/03(月) 19:53:18
>>554
たとえばGDI+のインターフェース
座標はfloatだろ
単純に言えばバンド幅はdoubleの半分で済む
精度はfloatで十分
そういう場合に使われる
563デフォルトの名無しさん:2009/08/03(月) 20:09:11
>>559
8bit なら8bit の中まで反転するようなシステムはみたことないですね。
564デフォルトの名無しさん:2009/08/03(月) 20:22:20
>>554
それはそのとおりですが、機械イプシロンの精度よりも表現できるレンジを優先するような用途はあると思います。
たしか 80x87 って double がデフォじゃなかったかと。
565デフォルトの名無しさん:2009/08/03(月) 20:51:17
>>564
80bitがデフォだよ
外部インターフェースとしてfloatとdoubleのフォーマットを
持っているだけで内部計算は全部80bitで行っている
566デフォルトの名無しさん:2009/08/03(月) 20:52:50
SSE関係はfloatだったと思う
567デフォルトの名無しさん:2009/08/03(月) 21:19:09
FPUの話だよ
568デフォルトの名無しさん:2009/08/03(月) 22:53:32
longが4byteじゃない環境なんてめったに無いよね?
569デフォルトの名無しさん:2009/08/03(月) 22:58:05
>>568
そんなあいまいな確認をしないで自分の環境でsizeof(long int)とかやってサイズを調べた方がいい
というかそういう癖をつけろ
570デフォルトの名無しさん:2009/08/03(月) 22:58:38
めったに?
571デフォルトの名無しさん:2009/08/03(月) 23:02:44
Windows以外の64ビット環境ではsizeof (long) == 8のことが多いと思う。
572デフォルトの名無しさん:2009/08/04(火) 00:19:33
って64ビットwindowsは4なの?
573デフォルトの名無しさん:2009/08/04(火) 00:21:33
sizeofで調べろといわれたのはスルーかよ
574デフォルトの名無しさん:2009/08/04(火) 03:38:22
ごめんごめん。
>>568じゃないんだ。
が、Windows以外のと前置きされてるから気になっただけなんだ。
実際その環境向けに作ることがあって、サイズが重要なら調べてるよ
575デフォルトの名無しさん:2009/08/04(火) 06:35:02
int = longって同じサイズの型が2種類あっても無駄だよな
int = 4
long = 8
でいいんじゃね
576デフォルトの名無しさん:2009/08/04(火) 07:58:41
intやlongが適当な大きさなのはいいけど
それとは別にint32とかint64とかの型も作ればよかったのに。
577デフォルトの名無しさん:2009/08/04(火) 08:16:55
<stdint.h>
578デフォルトの名無しさん:2009/08/04(火) 08:24:45
>>576
10年前に作られたんだけど、MSが無視しているんだ
579デフォルトの名無しさん:2009/08/04(火) 09:08:54
int=2、long=4の環境のことも忘れないでください
580デフォルトの名無しさん:2009/08/04(火) 10:17:22
今までに読んだ、これはなかなかいい入門書だ!っていうのと
これはいいステップアップの書籍だ!っていうCの本があれば
教えていただけますか?

ってこの内容だとスレチですかね…
581デフォルトの名無しさん:2009/08/04(火) 10:19:30
わかってんなら書くなクソが
582デフォルトの名無しさん:2009/08/04(火) 10:28:50
>>572
LLP64でググる
583デフォルトの名無しさん:2009/08/04(火) 10:37:55
>>579
VC++ 1.5 とか、もう忘れたい…
584デフォルトの名無しさん:2009/08/04(火) 13:42:38
規格で明確に固定されてるのはchar = 1だけだよな。他は環境依存。
585デフォルトの名無しさん:2009/08/04(火) 15:05:19
しかし1バイトが何ビットかは決まっていないという罠
586デフォルトの名無しさん:2009/08/04(火) 17:11:24
数値の桁揃えをしています。
%桁数d、と入力すれば桁数に入れた数字の分だけ空白が入りますが
実際に数字が入った時より空白が小さくなってるみたいです。

http://homepage3.nifty.com/mmgames/c_guide/05-04.html
ちょうどこのページの2回目の実行結果のように、微妙にズレてるのですが
これも調整して桁揃えさせる方法はありますか?
587デフォルトの名無しさん:2009/08/04(火) 17:13:54
それはフォントの種類によるんじゃないの?
588デフォルトの名無しさん:2009/08/04(火) 17:17:21
等幅フォントじゃないと揃えられない
589デフォルトの名無しさん:2009/08/04(火) 17:18:35
等幅フォントなのに半角文字が等幅じゃないフォントもあるよ
身近なところに。
590デフォルトの名無しさん:2009/08/04(火) 17:23:15
MS 明朝で フォントサイズが 1.5ポイントの倍数ではないとき ズレるんだっけか
591デフォルトの名無しさん:2009/08/04(火) 17:25:23
俺にはズレてるようには見えない
592デフォルトの名無しさん:2009/08/04(火) 17:51:18
私にもずれているようには見えない。
それはさておき、そんな間違いだらけのサイトでわざわざ苦しんでまで覚えようとする理由を教えて欲しい。
593デフォルトの名無しさん:2009/08/04(火) 17:54:01
コピペしてテキストエディタに貼ってみたが
わざわざ全角スペース入れてるんだなw
594デフォルトの名無しさん:2009/08/04(火) 17:55:27
--
結果を見てもわかる通り、数字はそのまま表示されており、
他の数字との位置関係がズレてしまっています。
もっと桁数の多い数字をいくつも表示する場合は非常に読みにくくなります。
--
本当に桁数が多かったら桁ぞろえしたら却って読みにくくなるわけで。
結果ありきで、確認せずに文章を書いているのがばればれだよね。

595デフォルトの名無しさん:2009/08/04(火) 17:56:41
こっちか
ttp://support.microsoft.com/kb/417434/ja

固定ピッチフォントでも
漢字混在で 全角文字が半角文字の2倍の幅にならないケース 有りと。 (XP以前)
596デフォルトの名無しさん:2009/08/04(火) 17:56:42
>>586
どんな質問するにしてもせめて環境くらい書け。
597デフォルトの名無しさん:2009/08/04(火) 19:28:37
>>593
誰か<TT>とか<PRE>タグとかスタイルシートの使い方教えてやれよ。
テーブルでもいいかもな。
598デフォルトの名無しさん:2009/08/04(火) 23:58:57
>>578
stdint.hならVC++2010にはあるぞ。C++0x対応の一環としてだけど。
599デフォルトの名無しさん:2009/08/05(水) 00:26:37
でも、DWORDが使われるんだろうな。
600デフォルトの名無しさん:2009/08/05(水) 01:23:21
__int64とかをtypedefしとくとか
601デフォルトの名無しさん:2009/08/05(水) 01:29:09
すいません質問よろしいでしょうか。
VC++2008ExpressのWin32コンソールアプリケーションで素因数分解プログラムを作っているのですが、大きい数(4ケタくらい)を入れるとこのようなエラーが出てしまいます。

---------------------------
Microsoft Visual C++ Debug Library
---------------------------
Debug Assertion Failed!

Program: ...A\Documents\Visual Studio 2008\Projects\素因数分解\Debug\素因数分解.exe
File: f:\dd\vctools\crt_bld\self_x86\crt\src\isctype.c
Line: 56

Expression: (unsigned)(c + 1) <= 256

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)
---------------------------
中止(A) 再試行(R) 無視(I)
---------------------------

Cはまだ始めたばかりなのでよくわからない点も多いのですがオーバーフローですかね?
長文失礼しました。
602デフォルトの名無しさん:2009/08/05(水) 01:34:35
>>601
変数cの型は何?
256と比較してる時点でなんとなく想像はつくけど
603601:2009/08/05(水) 01:37:50
cという名の変数は使ってないんですよ。
(unsigned)(c + 1) <= 256 でググったりもしたんですけど英語のサイトばかりで…

604デフォルトの名無しさん:2009/08/05(水) 01:37:55
charでやってそうだねw
というかなんでメモリがアホみたいにある時代にそんな小さいエリアでやってるのやら
605601:2009/08/05(水) 01:40:16
charは使ってます。
何か改善策等ありますか?
606デフォルトの名無しさん:2009/08/05(水) 01:43:14
factorコマンド
607デフォルトの名無しさん:2009/08/05(水) 01:43:19
charより大きいのを使えばいいw
608601:2009/08/05(水) 01:47:26
>>606
Windowsなので無理ぽ。

>>607
そんなのあるんですか?
609デフォルトの名無しさん:2009/08/05(水) 01:49:18
というかソース晒せよw
610601:2009/08/05(水) 01:56:47
>>609
了解。

ファイル管理情報 6232

オリジナルファイル名 : source.txt [www.dotup.org6232.txt]
ファイル管理番号 : 6232
ダウンロードパスワード : C/C++
削除用パスワード : 非公開
611デフォルトの名無しさん:2009/08/05(水) 02:01:50
パスワードなんかかけるなよめんどくさい
612デフォルトの名無しさん:2009/08/05(水) 02:02:10
効率悪そうなソースだな
613デフォルトの名無しさん:2009/08/05(水) 02:02:25
問題のコードはどこにあるんだ?
614601:2009/08/05(水) 02:03:21
>>611
大したソースじゃないんであまり公開されてる感を出したくなかったんですよ。
615デフォルトの名無しさん:2009/08/05(水) 02:03:37
5行くらいしか書いてないのに「長文失礼しました。」とかいうのって何のネタ?
616デフォルトの名無しさん:2009/08/05(水) 02:04:49
>>614
わけわからん。
人にみてほしいなら、クリック一つでみられる場所にあげてそのURLを貼るのが当然だろ。
617デフォルトの名無しさん:2009/08/05(水) 02:05:23
>>610
> inta = inta;

これなんなの?ふざけてるの?
618601:2009/08/05(水) 02:06:25
>>612
サーセン総当たり式です。

>>613
奴の指摘する56行目はただ}があるだけです。
問題は他のところにあるかと。

>>615
エラーのメッセージボックスそのままコピペしたんで長いかなと思っただけです。
619デフォルトの名無しさん:2009/08/05(水) 02:09:28
これ何がしたいの.
if (isdigit(inta)) { inta *= i; }
620601:2009/08/05(水) 02:09:28
>>616
どうもお手数をかけてすいません。

>>617
すいません消し忘れです。
最初は最後にintaをもう一回使う予定だったのでintbに代入していたんですが使わなかったので置換でintbをintaに変えた結果がそれです。
621デフォルトの名無しさん:2009/08/05(水) 02:10:44
>>620
おいおい
そういうのはコメントにしておけよ
622601:2009/08/05(水) 02:11:46
>>619
intaをiで割り過ぎて小数になることがあるのでその時割り過ぎた分を元に戻すための措置です。

>>620
どうもすいません。
もっとコメント増やした方がいいですね。
623601:2009/08/05(水) 02:13:23
安価ミス。
>>621
624デフォルトの名無しさん:2009/08/05(水) 02:34:29
素数を求めるループは無駄に処理重くするだけで意味がないw
625601:2009/08/05(水) 02:36:18
>>624
そうですか…
奇数で割ってくとか別のアルゴリズムを使うとかした方がいいですかね。
626デフォルトの名無しさん:2009/08/05(水) 02:39:03
>>622
isdigitの仕様を理解していない。
とりあえず
>if (isdigit(inta)) { inta *= i; }
こいつを消して実行してみたら?
627601:2009/08/05(水) 02:43:26
>>626
行けました。
よく考えたらまずisdigitには!をつけとかないと駄目でしたね。
!をつけても駄目でしたが。
とりあえず消してうまく行ったので良かったです。
ありがとうございました。
628デフォルトの名無しさん:2009/08/05(水) 02:47:40
まったくわかってないw
isdigit(inta)が1を返すときにとんでもないことになるのが原因
629デフォルトの名無しさん:2009/08/05(水) 02:50:42
と、isdigitが返すのは1じゃねーか。
真を返すときだな。
630デフォルトの名無しさん:2009/08/05(水) 02:51:49
>>629
返すのは1だよ。
631デフォルトの名無しさん:2009/08/05(水) 02:52:33
1じゃねえよ。
632601:2009/08/05(水) 02:53:12
>>628
よく考えればこの一文要りませんね。
要らないことをしたせいですか。
633デフォルトの名無しさん:2009/08/05(水) 02:53:57
0以外であって1とは限らない(1である可能性もある)が正しいな。
634601:2009/08/05(水) 02:54:20
>>629-631
・・・1じゃないに一票。
635デフォルトの名無しさん:2009/08/05(水) 03:02:26
因数分解なんて
#include <stdio.h>
int main(void)
{
int i, j, n;

scanf("%d", &n);

for(i=2; n>=i; i++) {
for(j=0; n%i==0; j++) n /= i;
if(j) printf("%d^%d\n", i, j);
}

return 0;
}

程度で十分だろ
636601:2009/08/05(水) 03:08:48
>>635
なるほど。
参考になります。
637デフォルトの名無しさん:2009/08/05(水) 07:27:17
>>628
え?
そこでつっこむべきはisdigitのパラメータについてじゃないのか?
638601:2009/08/05(水) 08:21:43
>>637
「0から9の数値であれば」ってとこですね。
639デフォルトの名無しさん:2009/08/05(水) 08:28:55
>>634
1じゃないって何が返るの?(真の時)
640デフォルトの名無しさん:2009/08/05(水) 08:40:09
>>637
そもそもおかしいのは、
>inta *= i;
これ。

intaは文字用の変数じゃないからisdigit(inta)はだいたい偽になって実行されないが、
'0'<=inta<='9'になったときに実行されてしまい無限ループになってしまうのが問題点。
641デフォルトの名無しさん:2009/08/05(水) 08:59:34
>>639
非0 であれば適合なのだから、その先は実装による。

グローバル変数で table[256] なテーブルが居て各文字の属性をビットパターンで保持
 可視文字 (1<<0)
 数値 (1<<1)
 アルファベット小文字 (1<<2)
 アルファベット大文字 (1<<3)
  :
is〜 系は マスクの and で戻す ってな場合 そのマスク後の値が戻る (非0 なら適合してるからね

※ ASCII セットのみ限定の空間縛りをつければ、テーブル参照は都合よさそうだものなぁ
642601:2009/08/05(水) 09:16:42
>>640
よくわかる解説をありがとうございます。
isdigitの使い方を物凄く間違えてましたね。
助かりました。
643デフォルトの名無しさん:2009/08/05(水) 09:30:15
なぜ素数かどうかを求めるループが駄目かというと、
素数かどうか確認するための除算の回数が数が大きくなるほどとんでもない回数に
膨れ上がっていくから。
644601:2009/08/05(水) 09:39:12
>>643
確かにそうですね。
そこの部分はカットします。
645デフォルトの名無しさん:2009/08/05(水) 10:38:58
>>601
もう関係ないかもしれんが、仕様ではisdigitにはunsigned charの値(0〜255)およびEOFしか渡せない
その範囲外の値を渡した結果出たのがそのエラーと思われ
646デフォルトの名無しさん:2009/08/05(水) 14:47:07
周期画像を作成するプログラムをお願いします
647デフォルトの名無しさん:2009/08/05(水) 14:52:20
わかりました
648デフォルトの名無しさん:2009/08/05(水) 15:18:51
がってんだ!
649601:2009/08/05(水) 15:28:28
>>645
そうなんですか。
勉強になります。
ありがとうございます。
650デフォルトの名無しさん:2009/08/05(水) 15:32:47
>>649
Debug Assertionのメッセージが出ているじゃない。↓

Expression: (unsigned)(c + 1) <= 256

Releaseモードだとすっぽ抜けると思われる。
651601:2009/08/05(水) 15:45:06
>>650
すっぽ抜けるとは?
652デフォルトの名無しさん:2009/08/05(水) 15:50:51
びよーんすっぽすっぽ
653デフォルトの名無しさん:2009/08/05(水) 15:50:52
Assertはリリースビルドでは無くなる
654デフォルトの名無しさん:2009/08/05(水) 15:51:24
>>651
0を返すということ。
655デフォルトの名無しさん:2009/08/05(水) 16:11:40
656デフォルトの名無しさん:2009/08/05(水) 16:26:23
>>640
ちがうよ。
永久ループになるのは今回の主問題じゃない。

assertの直接の原因はisdigitのパラメータ不正。
657601:2009/08/05(水) 16:32:23
>>652-654
意味がわかりました。
とにかく今回の問題はisdigitの使い方だったんですね。
本屋で関数リファレンスかなんか買ってきて勉強しようと思います。
ありがとうございました。
658655:2009/08/05(水) 16:46:48
calloc の引数順 意味的には逆だた

フルスクラッチで書いてみると意外に手間かかるな (所々 端折って0入れてるし…)
main だけで現張りきれなかったーよ
659デフォルトの名無しさん:2009/08/05(水) 18:07:25
Visual Studio 2005でシリアル通信(GPSデータの受信)
を行いたいのですが、シリアルからのデータを取得する方法が分からずに困っています。
Visual Studio2005でコンパイル可能なサンプルなど有りませんでしょうか?
660デフォルトの名無しさん:2009/08/05(水) 18:09:56
VC++でいいの?
VSといわれても
661デフォルトの名無しさん:2009/08/05(水) 18:10:58
662デフォルトの名無しさん:2009/08/05(水) 18:11:34
VC++でお願いします。 C言語スレだったのでこう書けばVC++のとこでOKだと思っていました。すみません。
663デフォルトの名無しさん:2009/08/05(水) 18:15:10
>>661
VCで検索すれば良かったんですね。こんな事で質問してしまってお恥ずかしいです。
ありがとうございました。
664デフォルトの名無しさん:2009/08/05(水) 18:41:37
Cを勉強し始めて一週間文法はちょっとずつ覚えてきてますが
アルゴリズムの理解が苦しくてくじけそうです
665デフォルトの名無しさん:2009/08/05(水) 18:42:38
がんばれ
666デフォルトの名無しさん:2009/08/05(水) 19:08:03
C関係ないし
667デフォルトの名無しさん:2009/08/05(水) 22:37:55
6要素配列を使わなければならないのですが
そのうち、任意の要素に書き込みをするときはどうすればいいのですか。

要素を定数で書けばアクセスは可能ですが柔軟性に欠けることと、
必ずそこに格納されるわけではないため、変数で制御しようとしたら今度は
「定数が必要」などとコンパイラに拒否されました。
どうすればいいのですか。

A[AI1][AI2][AI3][AI4][AI5][AI6]
こんな感じで変数をそれぞれ回してチェックし、
何も書かれず空いていればそこに書き込むようにしたいのですが

たとえば3要素目が空いているとして
scanf("10s", &A[AI1][AI2][AI3]);

などとしても入力を受け付けてくれません。
668デフォルトの名無しさん:2009/08/05(水) 22:50:27
それは書き込む要素の型を間違えているから。
6次元配列の3次元目の配列が持つ要素の型は
型[AI4][AI5][AI6]となる。

もちろん、そんなものを書き込むのは無理であり
ゼロから勉強しなおしたほうがいいよ。
669デフォルトの名無しさん:2009/08/05(水) 22:55:58
6要素配列ってなんぞや?本当に6次元必要?
char *A[6];
scanf("%s", A[2]);
でいいんじゃないの?
面倒だからメモリ確保すっぽかしたけれど…
670デフォルトの名無しさん:2009/08/05(水) 23:05:48
>>667
配列の宣言では要素数に変数を使えない。つまり以下はNGとなる。
int index = 6;
int array[index] = {0,};

配列の各要素にアクセスするときは変数で可。
int array[6] = {0,}, count, index = 6;
for(count=0; count < index; count++) {
 if(array[index] == 0) {
  scanf("%d", &array[index]);
 }
}

つーか普通に要素が6個ある1次元配列だろ?多次元じゃなくて。
671670:2009/08/05(水) 23:15:13
>>670
なんか色々間違ってるわ。ふぅ…
672デフォルトの名無しさん:2009/08/06(木) 06:20:45
小数を引数とし 戻り値の値だけ倍すれば小数点がなくなる(?)ようなユーザー関数を作りたいんですが
どうしてもうまくいきません

BorlandとCPadを使ってます

#include <stdio.h>

int dtoi( double d );

void main(void)
{
double d ;
int bai ;
printf("小数の入力 ==> ");
scanf("%lf", &d);
bai = dtoi( d );
printf("%fを%d倍すれば小数点が消える\n", d, bai);
return ;
}

int dtoi( double d )
{
int bai ;
for( bai = 1 ; d * bai - (int)( d * bai ) > 0 ; bai *= 10 ){
printf("引かれる数 = %f\n", d * bai);
printf("引く数 = %d\n", (int)( d * bai ));
printf("差 = %f\n", d * bai - (int)( d * bai ));
}
return bai ;
}

お願いします
673デフォルトの名無しさん:2009/08/06(木) 07:27:50
何のためにそんな関数がほしいの?
1/3は何桁ずらせば整数になるの?
674デフォルトの名無しさん:2009/08/06(木) 07:52:15
分数の場合は他の関数に引き渡すので有限小数を前提に作りました
675デフォルトの名無しさん:2009/08/06(木) 09:45:41
整数になるまで10倍していって、整数になったらその値で掛けた倍数を割る(切り上げ)
676デフォルトの名無しさん:2009/08/06(木) 09:46:37
有限小数を戻すこと自体を排除できないの?
≒ 分数として戻せないの?
677デフォルトの名無しさん:2009/08/06(木) 11:35:17
>>674
コンピュータの内部では小数も2進数で扱われるから、
有限小数というのは 0.5、0.25、0.125 などに限られる
0.1 とか 1.3 とかは無限小数になる
2進数的に有限小数なら、そのプログラムのままで問題なく動作している
2進数的に無限小数の場合は対象外だから問題なし
でおk?
678デフォルトの名無しさん:2009/08/06(木) 11:36:44
文字列として入力するなら有限でおkじゃないかと
679デフォルトの名無しさん:2009/08/06(木) 16:26:26
拡張子が「.c」のファイルをメモ帳で開くように関連付けを設定してしまったのですが、
どのプログラムで開くように変更すればいいか教えてください
680デフォルトの名無しさん:2009/08/06(木) 16:28:28
>>679
あなたが開きたいプログラムで開いてください><
681デフォルトの名無しさん:2009/08/06(木) 16:31:45
>>679
.cファイルを右クリックして、
プログラムから開くを選択。

XPの場合は、プログラムから開く
vistaの場合は、規定のプログラムを設定
をクリック。

そうするとプログラム一覧が現れるので、指定したいプログラムを選択。
この種類のファイルを開くときは、選択したプログラムをいつも使うっていう設定を有効にしたら、OKをクリック。

これでうまく行くと思うよ。
682デフォルトの名無しさん:2009/08/06(木) 16:47:13
>>680
>>681
とくに決まってないんですか?
 
開くプログラムを設定してから「.c」のファイルのプログラム実行がうまくいかなくなったんですが
683デフォルトの名無しさん:2009/08/06(木) 16:50:09
プログラムの質問じゃなくてWindowsの使い方の質問じゃないのそれ
684デフォルトの名無しさん:2009/08/06(木) 16:55:37
>>682
別に決まってないよ。
標準で設定されているものはいくつかあるけど、それは強制じゃないし、
さらに言うなら標準では.cを実行することはできない
685デフォルトの名無しさん:2009/08/06(木) 16:56:55
>>684
ありがとうございます
ほかの原因をさがしてみます
686デフォルトの名無しさん:2009/08/06(木) 17:07:59
>>684
>さらに言うなら標準では.cを実行することはできない
Cインタプリタに関連づければ、或いは…ッ!
687672:2009/08/06(木) 17:32:03
みなさんありがとうございました
文字列として入力させ 小数点から¥0までの文字数を10の指数にしたいと思います
688デフォルトの名無しさん:2009/08/06(木) 17:54:20
>>686
んだから標準ではそうなってないからw
どうにか実行するならそうするもしくはバッチつくってそれに関連づけるかしかないよねww
689デフォルトの名無しさん:2009/08/06(木) 18:06:44
>>672
コンピュータに格納されている小数点数はすべて有限。
なのであるNに対して2^Nを掛ければ必ず整数になる
690デフォルトの名無しさん:2009/08/06(木) 18:39:45
浮動少数の規格が変わったらその手は通じない。0点
691デフォルトの名無しさん:2009/08/06(木) 18:43:10
浮動小数である限りそれは有効じゃないか?
692デフォルトの名無しさん:2009/08/06(木) 18:45:24
規格変わるったって、3進数とか-1+i進数なんて誰も使わないよ!
2進数で表現されてる限り大丈夫だろ?
分数表現なんかになったらあれだが・・・
693デフォルトの名無しさん:2009/08/06(木) 18:47:18
>>692
IEEE754では10進数の指数部を持つ表現も定義されているんだが。
694デフォルトの名無しさん:2009/08/06(木) 18:51:24
>>693
ぐふっ。それは失礼。お恥ずかしい限りで・・・
・・・でも指数部は関係なくね?
695デフォルトの名無しさん:2009/08/06(木) 18:55:17
IEEE754は最早古いので、
浮動小数点演算に関して定義し直した新しい規格もある
696691:2009/08/06(木) 19:10:17
そなの?それなら0.1が正しく表現できるねー
勉強不足でした
697694:2009/08/06(木) 19:15:11
ok、理解した
俺が悪かった
698デフォルトの名無しさん:2009/08/06(木) 19:42:10
>>695
2008年に改訂されたばかりなんだが……
699デフォルトの名無しさん:2009/08/06(木) 21:59:53
2バイト文字コートを検索したくて
unsigned short int sib に2バイト文字列のデータを入れて

if(sib == 0x6f81) とすると判定できるけど
if(sib == '{') とキャラクタ判定だとすり抜けてしまいます。

人の目で理解しやすいキャラクタで判定するにはどうしたら
いいですか?
700デフォルトの名無しさん:2009/08/06(木) 22:35:07
#define FULLWIDTH_LEFT_CURLY_BRACKET 0x6f81

if (sib == FULLWIDTH_LEFT_CURLY_BRACKET)
701デフォルトの名無しさん:2009/08/06(木) 23:00:36
>>700 やはり、そうなりますか。(ガックリ)
702デフォルトの名無しさん:2009/08/06(木) 23:39:30
for(i=0; i<k; i++)

このfor文の意味を教えてください
703デフォルトの名無しさん:2009/08/06(木) 23:41:23
断る
そんなレベルの話をしてたらスレがいくつあっても足らん
704デフォルトの名無しさん:2009/08/06(木) 23:46:40
for(i=0; i<k; i++){
705デフォルトの名無しさん:2009/08/06(木) 23:47:38
あれ?コピペすると変わる・・・



http://hooktail.org/computer/index.php?k-%BA%C7%B6%E1%CB%B5%B7%E8%C4%EA%C2%A7

ここのソースコードのfor文です
706デフォルトの名無しさん:2009/08/06(木) 23:47:45
i = 0;
while (i < k) {
/* 処理 */
i++;
}
と同じ意味。
707デフォルトの名無しさん:2009/08/06(木) 23:47:52
 printf("%d\n", i);
}
708デフォルトの名無しさん:2009/08/07(金) 00:36:56
for(i=0; i&lt;k; i++){
dist[i] = -1.0;
indexcluster[i] = -1;
}

の、&lt;についてだったらHTMLの実体参照について調べるといい
709デフォルトの名無しさん:2009/08/07(金) 01:57:05
>>699
if (sib == *(const unsigned short* const)"{")
{    
}
710デフォルトの名無しさん:2009/08/07(金) 02:29:32
エンディアン依存してないか?
711デフォルトの名無しさん:2009/08/07(金) 02:31:44
してないですごめんなさい。
712デフォルトの名無しさん:2009/08/07(金) 09:06:26
思いっきり依存しているがね。
713デフォルトの名無しさん:2009/08/07(金) 10:17:07
エンディアン依存を気にするなら、
最初から1バイト単位で比較するべきだね
714デフォルトの名無しさん:2009/08/07(金) 10:28:36
wchar_t ならいざ知らず
unsigned short int なんかに入れるから…
715デフォルトの名無しさん:2009/08/07(金) 10:58:31
unsigned intを使うのは
負の数が入ったらエラーを出すためっていう
意味合いも含まれてるんでしょうか?

また、intもlongも同じ4バイトの環境なんですが
これはどちらを使っても同じですよね?
716デフォルトの名無しさん:2009/08/07(金) 11:02:50
>unsigned intを使うのは
>負の数が入ったらエラーを出すためっていう
いいえ。
寧ろ、負の数が入っていないと言う前提として使うことはありますが。
717デフォルトの名無しさん:2009/08/07(金) 11:17:28
4バイトなら、longを使え。intのサイズは環境依存
718デフォルトの名無しさん:2009/08/07(金) 11:22:03
longのサイズも環境依存だけど。
719デフォルトの名無しさん:2009/08/07(金) 11:25:17
int32_t を使えばおk
720デフォルトの名無しさん:2009/08/07(金) 11:41:59
>>715
> unsigned intを使うのは
> 負の数が入ったらエラーを出すためっていう

聞く前に実験してみろ。
void foo(unsigned int num)
{numを出力}
でfooに1や10や-100を渡してどうなるか見てみれば?
エラーにはならないでしょう。
721デフォルトの名無しさん:2009/08/07(金) 12:57:03
日本語をいじりたいならめんどくさいからウニコードでいいだろ
722699:2009/08/08(土) 08:41:12
short int の上位8ビットと下位8ビットを入れ替えて判定したら
出来ました。
特に709の人とエディアンの話振った人ありがとうございました。
723デフォルトの名無しさん:2009/08/08(土) 13:23:20
forループややwhileループ内のswitch文によりループを脱出したい場合、
ただ単にbreakしただけではswitch文から抜けるだけで、ループを脱出できません。

このような場合、gotoを使うのが一般的なのでしょうか?
724デフォルトの名無しさん:2009/08/08(土) 13:26:13
swtichをif-elseに書き換える
725デフォルトの名無しさん:2009/08/08(土) 13:28:21
>>723
その部分だけ別の関数にして、
returnで抜けるとか。
726デフォルトの名無しさん:2009/08/08(土) 13:51:28
700が真っ当なんだろうけどね。
727デフォルトの名無しさん:2009/08/08(土) 13:56:16
最終的なロジックはshortの内容をエンディアン変換して拾ってきて
マルチバイトの文字とそれぞれ比較するんだよな
それが「人の目で理解しやすいキャラクタで判定」に収まっただろうか

真っ当なのは、shortに格納することをやめて、strcmp(sid, "{")と書けるようにすることだと思うよ
728デフォルトの名無しさん:2009/08/08(土) 15:31:42
なんでそこで文字列の判定になっちゃうのよ。
729デフォルトの名無しさん:2009/08/08(土) 15:39:01
文字コードの判定ではなく文字の判定に近くなってきたからじゃね?
730723:2009/08/08(土) 15:39:08
ありがとうございました。
731デフォルトの名無しさん:2009/08/08(土) 21:14:06
ポインタでつまづいてしまいました…

何かよくわかる例えみたいなもの教えていただけませんか?
732デフォルトの名無しさん:2009/08/08(土) 21:16:14
Cの前にアセンブラを勉強しろ
733デフォルトの名無しさん:2009/08/08(土) 21:24:23
ポインタはお手紙。
「*」の印で開封できる。
734デフォルトの名無しさん:2009/08/08(土) 21:29:14
>>732
意味不明なこと教えるな

>>731
まあプログラムや変数などはメモリのどこかに配置されるのでアドレスを持っています。
そのアドレスを格納する変数のことをポインタといいます。
735デフォルトの名無しさん:2009/08/08(土) 21:29:27
>>731
例えで学んでも結局は役立たないのだよ。
ポインタを理解出来ない人にプログラミングは無理なので、
どうか頑張って理解してください。
736734:2009/08/08(土) 21:29:55
間違えた

>>732じゃなく>>733だった
737デフォルトの名無しさん:2009/08/08(土) 21:34:27
文字列から一文字ずつ表示したいのですが

%cだと1バイトだと扱われてしまいます。
2バイト文字の場合はどうすればいいのでしょうか?
738デフォルトの名無しさん:2009/08/08(土) 21:39:53
>>737
printf("%.2s", "こんにちは");
コピペしてね
739699:2009/08/08(土) 23:32:29
よく見たら699は変な文章ですが
char buf[100]に1バイト文字と2バイト文字が混合している文字列から
ユニコードの文字をを判定(検索)する処理です。
判定するユニコードが何十種類もあるからキャラクタで判定希望。
(16進数は数値を調べたり意図しない結果の時数値をチェックする
手間がかかる)
unsigned はbuf[]から1バイト*2をコピーする時どちらか1つ
8ビット左シフトするからunsigned付けたら安心という判断です。
ただの横着でした。レスしてくれた方ありがとうございました。
740デフォルトの名無しさん:2009/08/08(土) 23:41:01
ポインタってのはショートカットみたいなもんなんだよ。
まず実体のファイルがあってそのショートカットを作ったらそれがポインタだと思えばいい。
ショートカットのショートカットはダブルポインタってことになる。
概念的にはこんな感じだけどプログラムに書くときにどう表現するかは参考書をひらいてくれ
741デフォルトの名無しさん:2009/08/08(土) 23:46:44
fstreamなどC言語標準のファイル処理は使えなさすぎる。

巨大ファイルはオープンするだけで時間かかる。
異常終了すると、ファイルにアクセスできなくなる。
wchar_tが使えない。

なんでなおさないのか?
742デフォルトの名無しさん:2009/08/08(土) 23:47:38
>>741
C言語標準じゃないよね?
743デフォルトの名無しさん:2009/08/08(土) 23:49:01
string に一行ずつ読み込む部分を楽に済まそうと、
標準関数使おうとしたらオープンだけでしばらく待つ羽目に。
その上、鈍い。 
744デフォルトの名無しさん:2009/08/08(土) 23:51:20
C++だけど、Cの関数も基本動作は同じ。 一方だけが優れているなんて無いだろ
745デフォルトの名無しさん:2009/08/09(日) 00:06:24
>>741
1GBytes程度のファイルで試したけど、一瞬で開くし読み込みも時間かからなかったよ。
OSが足引っ張ってるんじゃない?
746デフォルトの名無しさん:2009/08/09(日) 00:09:08
>>741
言語を叩く前に環境とか書いてるコードを晒せよ
747デフォルトの名無しさん:2009/08/09(日) 00:22:47
実装方法の違いはあるな。 
BCC最新版を常用している。
基本性能で、VC2008、ICCに劣るのは認識しているが、使いやすいので使う。
748デフォルトの名無しさん:2009/08/09(日) 00:24:59
> 異常終了すると、ファイルにアクセスできなくなる。
これはどう考えても、OSがアホだからだろ。
プロセス終了してるのに、使用してるリソース開放できないとか
どんだけ脆いOS使ってるんだよ。
749デフォルトの名無しさん:2009/08/09(日) 02:37:26
どのOSでそうなるんだろうな
750デフォルトの名無しさん:2009/08/09(日) 03:18:21
SMB?
751デフォルトの名無しさん:2009/08/09(日) 06:42:13
VxWorksがプロセス終了してもリソース解放しなかったね
あとはしらん
752デフォルトの名無しさん:2009/08/09(日) 15:37:18
>>741
時間がかかるとかアクセスできないのは言語のせいじゃないだろ
そのコンパイラ作ったやつが無能なだけ
753デフォルトの名無しさん:2009/08/09(日) 15:41:11
>>741
は言語仕様とベンダーの実装の意味を
理解出来ていない物と考えられる。
754デフォルトの名無しさん:2009/08/09(日) 15:48:51
言語の実装の問題というよりはライブラリの実装の問題ではないか、>>741 が理解できていないのは。
755デフォルトの名無しさん:2009/08/09(日) 15:51:39
つまり何も理解出来ていないってことだな。
756デフォルトの名無しさん:2009/08/10(月) 09:51:29
だって
>fstreamなどC言語標準
こんだけでもう破綻してんだもの。
757デフォルトの名無しさん:2009/08/10(月) 10:28:40
だから、このスレでC++の話や言語に関する議論はするなって。
758デフォルトの名無しさん:2009/08/10(月) 10:46:35
759デフォルトの名無しさん:2009/08/10(月) 11:05:54
少なくともC++の個別のライブラリ(stdすら含む)の話は
「ある程度」の範囲からは逸れてると思われ
成功事例もあれば失敗事例もまた多いし
760デフォルトの名無しさん:2009/08/10(月) 11:12:08
もともとテンプレは
>・C++言語はスレ違いです。
だったのに、46スレ目を立てたアホが勝手に
>・C++言語はスレ違いですが、ある程度なら対応です。
に書き換えただけだからな。

スレを勃てるまでもないC/C++の質問はここで 12
http://pc12.2ch.net/test/read.cgi/tech/1248010352/

こんなスレもあるんだし、そろそろもとに戻したほうがいいな。
761デフォルトの名無しさん:2009/08/10(月) 11:26:33
>>759
Boostならまだしも
標準ライブラリはある程度に含まない
って、なんならある程度に含まれるんだ?

まあ次から元に戻すなら関係ないか。
762デフォルトの名無しさん:2009/08/10(月) 11:33:19
C++ - クラスライブラリ≒広い意味でのC
でいいんでね?
C99とC++とではどっちがC89に近いコードが書けるんだ?
763デフォルトの名無しさん:2009/08/10(月) 11:34:45
「C++だと○○だけどね。」と言った程度なら目鯨立てることもないと思うけど、
主題にするのはやめた方がいいでしょ。
764デフォルトの名無しさん:2009/08/10(月) 11:36:42
>>762
どっちが近いも何も、どっちもc89のコードは書けるよ。
まぁ、一部制限があるってだけのことで、その意味ではC++の方が制限が多い。
例えば、プロトタイプ宣言なしではC++ではエラーになるし、構造体タグの名前空間が独立していないし。
765デフォルトの名無しさん:2009/08/10(月) 11:39:30
最近のCではプロトタイプ宣言しないと文句言ってくるぞ
Javaでは逆にそれが無い
766デフォルトの名無しさん:2009/08/10(月) 11:42:35
>>765
警告とエラーの区別はつけようね。
767デフォルトの名無しさん:2009/08/10(月) 11:47:54
自分で一から作る分には警告はエラーと同義だと思うんだよ。
768デフォルトの名無しさん:2009/08/10(月) 11:53:45
全然違うよ
769デフォルトの名無しさん:2009/08/10(月) 12:04:23
>>765
Javaのばあいは、そのファイルで解決出来るか、カレントディレクトリ
に解決済みのclassファイルがある限り、未宣言項目の天下り的な
使用が出来るよね。太古のC処理系もそういうのは出来たらしいけど
最近はそれはタブーになってきてるみたい。
使用人口が増えて大規模なプログラムも書かれてコンパイラの処理
速度が早いことを要求されるようになったことが関係してるんじゃ
ないかと。
770デフォルトの名無しさん:2009/08/10(月) 12:13:03
>>769
理由は全く見当違いだよ。

c89以前のレガシーCでは仮引き数の宣言ができなかった。
だから、引き数の型は呼び出し側が保証する必要があった。
例えば、こんな感じ。
--
int main()
{
double sin();
printf("%g\n", sin((double)0));
return 0;
}
--
c89辺りからは仮引き数の宣言もできるようになったので提供側が保証できるようになった。
例えば、こんな感じ。
--
#include <math.h>
int main()
{
printf("%g\n", sin(0));
return 0;
}
--
でも相変わらずプロトタイプ宣言は必須ではないので、プロトタイプ宣言をうっかり忘れるとおかしなことになる。
従って、大抵のコンパイラは警告を出すことでプロトタイプ宣言を行なうことを示唆しているってこと。
771デフォルトの名無しさん:2009/08/10(月) 12:26:36
>>770
>c89以前のレガシーCでは仮引き数の宣言ができなかった。
んなアホなw
int func(x,y,z){
int x,y,z;
......
}
て感じのことが強制されてただけ
772デフォルトの名無しさん:2009/08/10(月) 12:41:41
>>771
それは定義。つーか、流れくらい読めよ。しかも、その例だと仮引き数の型がintだから省略可能だし。
773デフォルトの名無しさん:2009/08/10(月) 13:17:01
if( 〜〜 )
{
〜処理〜
}




}から抜け出す方法はありますか?break入れてもだめでした

774デフォルトの名無しさん:2009/08/10(月) 13:18:03
×から抜け出す方法
○から途中で抜け出す方法
775デフォルトの名無しさん:2009/08/10(月) 13:19:56
if(〜〜){
do{
〜処理〜
}while(0);
}
776名無しさん:2009/08/10(月) 13:22:26
#include <stdio.h>
int main(void)
{
int *u[3];
int a=3;
u[3]=&a;
u[0][0]=1;
return 0;
}
int *u[3];のポインタってどう使うんだ?
a は、intへのポインタの配列(要素数10)である。と書いてあるけど。
これだとエラーが出る。
777デフォルトの名無しさん:2009/08/10(月) 13:25:16
>>776
int *u[1];
なら使えるとでも言いたそうな口ぶりだな
778デフォルトの名無しさん:2009/08/10(月) 13:25:33
>>775
thx
779デフォルトの名無しさん:2009/08/10(月) 13:25:55
>>773
gotoで抜け出せる
780デフォルトの名無しさん:2009/08/10(月) 13:28:02
>>773
ロジックを見直す。
781デフォルトの名無しさん:2009/08/10(月) 13:34:12
>>776
u[3]に代入してるのにu[0]を参照してたらエラーも出るだろう
782名無しさん:2009/08/10(月) 13:39:58
使い方わかった
#include <stdio.h>
int main(void)
{
int *u[2];
int a=3,i=4;
u[0]=&a;
printf("%d\n",**u);
u[1]=&i;
printf("%d\n",u[0][1]);
printf("%d\n",*u[1]);
return 0;
}
こうか、変数1個1個を入れられる 1個型へのポインタか
783デフォルトの名無しさん:2009/08/10(月) 13:45:43
>>782
>u[0]=&a;
単純変数を指してるだけのポインタで
>printf("%d\n",u[0][1]);
とか、もうね…
784デフォルトの名無しさん:2009/08/10(月) 14:02:04
>>776
*u[3]はu[0],u[1],u[2]までしかないぞ
u[3]に代入した時点で鼻から悪魔
785デフォルトの名無しさん:2009/08/10(月) 14:07:03
>>782
aとiは連続してメモリ上に並んでいるという保証はない
だからu[0][1]なんてやってはいけない
u[0][0]だけ許される
786デフォルトの名無しさん:2009/08/10(月) 14:14:31
void test(char *str[]);

void main() {
char *str[] = { "a", "b", "c", "d" };
test(str); ←格納されていない
}

どうしてだぁー;;
VC++ 無料版です。
787デフォルトの名無しさん:2009/08/10(月) 14:17:08
どこに何が格納されてほしいのか?
testの中身は?
788デフォルトの名無しさん:2009/08/10(月) 14:17:16
>>786
ほんとは格納されてるのにtest関数にバグがあって何も無い様に見えるに一票。
789デフォルトの名無しさん:2009/08/10(月) 14:17:39
>>786
意味が分かりません
ソースコードはそれで全てですか?
790デフォルトの名無しさん:2009/08/10(月) 14:22:55
strが"abcd"になることを期待してる?
791デフォルトの名無しさん:2009/08/10(月) 14:25:58
test(str);
で break してstrの中身を確認してみたのだが、中身がおかしいです。
デバッグモードです。
実はC++で、test の関数はクラスのコンストラクタでメンバに格納しているだけです。
オラに知識を分けてくれ。
792デフォルトの名無しさん:2009/08/10(月) 14:27:49
>>790
期待していないです。
クイックウォッチでstr[1]を見てみるとアドレスが確実におかしいです。
793デフォルトの名無しさん:2009/08/10(月) 14:29:40
>実はC++で、test の関数はクラスのコンストラクタでメンバに格納しているだけです。
スレ違い。
794デフォルトの名無しさん:2009/08/10(月) 14:31:10
すみません。
まことに申し訳ありませんでした。
ちゃんと格納されていました。
リリースモードになっていました。
>>786 さんが正しかったです。
僕のレスを見た人ごめんなさい。
795デフォルトの名無しさん:2009/08/10(月) 14:34:46
なにこいつ。間抜けにも程がある。
796デフォルトの名無しさん:2009/08/10(月) 14:58:59
夏だからだろ
全ては夏のせい
こういうカイキチが現れるのが夏
あらしのような夏
さっさと巣に帰れ夏厨

どこのコピペだよ
797デフォルトの名無しさん:2009/08/10(月) 15:05:10
>>784
あれ?u[3]に代入って鼻から悪魔なん?
u[4]なんかだとそうだろうけど、3は処理系定義じゃないの?
798デフォルトの名無しさん:2009/08/10(月) 15:09:11
悪魔。
u[3]のアドレスを得ることは許されるが、代入はできない。
799デフォルトの名無しさん:2009/08/10(月) 15:17:19
┐(´д`)┌
800デフォルトの名無しさん:2009/08/10(月) 15:17:33
処理系じゃなくて言語仕様の話だな。Cじゃもちろんダメ。
でも、悪魔は存在しません。
悪魔がいないことは証明できるが、ここでやるにはちょっとスペースが足りない。
801デフォルトの名無しさん:2009/08/10(月) 15:29:54
>>798
ありがとう。
802デフォルトの名無しさん:2009/08/10(月) 16:17:28
スペースは気にしなくていいからやってくれ
803このプログラム作ってください!( >_ < ):2009/08/11(火) 03:21:01
1. 以下のプログラムは、勝ち数と負け数を入力して勝率
(= 勝ち数 / ( 勝ち数 + 負け数) )を計算するプログラムである。
勝ち数、負け数に負の値が入力された場合は入力をやり直させ、
勝ち数+負け数が0 の場合は勝率計算が不能であることを表示する。
ただし、このプログラムはバグを含んでおり正しく動作しない。
デバックを行って正常動作するようにせよ。
修正したソースプログラムと実行結果を示すこと。
804デフォルトの名無しさん:2009/08/11(火) 03:22:38
>>803
C/C++の宿題片付けます 129代目
http://pc12.2ch.net/test/read.cgi/tech/1247438792/
805デフォルトの名無しさん:2009/08/11(火) 12:36:35
巻き込まれ規制うぜぇ
携帯からじゃコード書き込むのも一苦労だぜ
806デフォルトの名無しさん:2009/08/11(火) 12:39:39
パソコンでコード書いてそれを携帯にメールで送って
携帯内でコピペって出来ないの?
807デフォルトの名無しさん:2009/08/11(火) 13:04:36
でかいソースは、とりあえず
codepad
ttp://codepad.org/
に貼ってみれば?
808デフォルトの名無しさん:2009/08/11(火) 14:28:14
ケータイ経由でネットにつないでPCから書き込めばいいんじゃね?
809デフォルトの名無しさん:2009/08/11(火) 20:59:30
C++の個別ライブラリに深入りしなければ、C++の話題は
Cの話題の延長とも捉えられるし、大規模アプリ開発が絡むとオブジェクト指向の技法は必須になってくるし、ということで
今やC++まったく知らんって人は実はCも知らん、俺に聞けなんて
言えるレベルじゃない人だと思ってもおkだと思いまつ
810デフォルトの名無しさん:2009/08/11(火) 21:07:53
>>809
へー、そーなのかー

でも C++ スレがあるからそこへ誘導するといいよ
811デフォルトの名無しさん:2009/08/11(火) 21:32:29
C++すれあるしね。
812デフォルトの名無しさん:2009/08/11(火) 22:33:38
つーか、今や
C/C++として扱うか、C++/Javaとして扱うかに分かれてるんじゃ?

純粋にCだけ取り扱うというのはCしか許されない
カーネルコード扱う場合とかで、かなり特殊で専門的で
入門者向けの世界とは離れてるんじゃないかと

アプリケーションで使用される基本的なアルゴリズムや
プログラムフローの書き方とかを重視する場合はC/C++という
文脈で、
既存のライブラリと如何に巧く組み合わせて比較的大きな
アプリケーションを崩すことなく能率的に書いていけるか
という方向性を重視する場合はC++/Javaという文脈で
語られることが多い感じ
813デフォルトの名無しさん:2009/08/11(火) 22:58:24
このスレは元々特殊なスレだから問題無い
C++の話題は初心者に優しいスレに誘導してあげればおk
814デフォルトの名無しさん:2009/08/11(火) 23:34:51
CとC++の関連スレ多すぎじゃね?
815デフォルトの名無しさん:2009/08/11(火) 23:47:03
言語としての人気の問題では?
816デフォルトの名無しさん:2009/08/11(火) 23:56:46
昔はこのスレ以外にもC専用の質問スレがあったしな。
817デフォルトの名無しさん:2009/08/12(水) 07:32:20
Cの質問はしたことないけど、したいときに以下のどのスレに出せばいい
のかオレは間違いなく悩む。

●スレを勃てるまでもないC/C++の質問はここで 12
●C言語なら俺に聞け(入門篇) Part 51
●【初心者歓迎】C/C++室 Ver.67【環境依存OK】
●【初心者お断り】ガチ規格準拠C専用スレ Part134
818デフォルトの名無しさん:2009/08/12(水) 07:46:01
●スレを勃てるまでもないC/C++の質問はここで
特にC/C++と分ける必要もない一般的な質問、C++の質問が多い

●C言語なら俺に聞け(入門篇)
C言語のありとあらゆる質問

●【初心者歓迎】C/C++室【環境依存OK】
環境依存と思われるバグが発生した場合、その環境に精通している人を必要とする質問

●【初心者お断り】ガチ規格準拠C専用スレ
規格書を引用して回答してほしい質問
819デフォルトの名無しさん:2009/08/12(水) 10:41:23
今やC/(Objective-C)C++(80年代系)は余り極端に区別すべきじゃないと
いう立場からは
【標準質問スレ】
☆スレを勃てるまでもないC/C++の質問はここで
一般的な質問スレ(C/C++使いでない人が使わざるを得ない
状況があり得ることを前提)
【本格質問スレ】
☆C言語なら俺に聞け(入門篇)
本格的にC/C++を勉強しようとしている人向けのスレ
【クイックヘルプスレ】
☆【初心者歓迎】C/C++室【環境依存OK】
具体的なコンパイル/テスト作業中のトラブル、問題、疑問、質問に
単刀直入に答えるスレ
【文法スレ】
☆【初心者お断り】ガチ規格準拠C専用スレ
C文法/C++文法の隠された問題点、矛盾点、あいまい点を色々
議論するスレ
こんな感じじゃないか?
820デフォルトの名無しさん:2009/08/12(水) 11:01:21
てめーらの分類なんてどうでもいい
821デフォルトの名無しさん:2009/08/12(水) 13:49:43
●【初心者お断り】ガチ規格準拠C専用スレ Part134

こんなスレがPart134まで行ったのか
822デフォルトの名無しさん:2009/08/12(水) 13:52:55
あと
【丸投げスレ】
☆C/C++の宿題片付けます
823デフォルトの名無しさん:2009/08/12(水) 14:03:32
>>821
元々は、「C言語なら俺に聞け」だったと思う。要は、初心者スレや環境依存スレが分離していった残り。
824デフォルトの名無しさん:2009/08/12(水) 16:28:28
旧「C言語なら俺に聞け」スレは、僅かでも環境依存なことが絡むと暴れる基地外のせいで機能不全に陥って、
現在のスレ名に変更(基地外も反対しなかったはず)した。
無事、過疎化して質問者もろとも基地外消滅という流れだったと思っている。
全部俺のいい加減な記憶だから当てにするなよ。
825デフォルトの名無しさん:2009/08/12(水) 16:30:15
>>824
概ねそうなんだが
それをキチガイ呼ばわりするお前もどうかと思うな。
826デフォルトの名無しさん:2009/08/12(水) 17:01:12
>>825
ああ、気に障ったらすまない。
確かに、暴れていたと言えるのは最後のごく一時期だけだったしな。
827デフォルトの名無しさん:2009/08/12(水) 17:13:37
俺はあのスレで暴れていたのは
環境依存とかAPIの質問をして指摘されたヤツが逆切れしてたと見てるよ。
実際、言語仕様に含まれる質問にケチつけてるのを何回か見たし。
828デフォルトの名無しさん:2009/08/12(水) 22:25:30
それよりも「スレを勃てるまでもない」と「初心者歓迎」の区別が分かんない。
一本化しないかなあと思っているんだけど。
829デフォルトの名無しさん:2009/08/12(水) 22:31:51
俺はまあいくつも似たようなスレが立っていても、
言語の人気的には当然のことだと思っているからいいんだけど。

ただマルチポスト野郎が出て来るのが許し難い。
830デフォルトの名無しさん:2009/08/12(水) 23:23:54
・C++言語はスレ違いですが、ある程度なら対応です。

とりあえずテンプレから↑を消そうよ。C++専用スレがあることだし。
831デフォルトの名無しさん:2009/08/12(水) 23:30:11
それを消すとなんとやらと上に書いてあるぞ。
832デフォルトの名無しさん:2009/08/12(水) 23:41:14
書き換えるとしたら

C++固有の話題はC++スレで。このスレで聞かれても答えられるとは
限りません。(100%答えられないというわけでもありません)

↑こんなところだろ
833デフォルトの名無しさん:2009/08/12(水) 23:41:28
なんで一緒にしたがるの?
C++で許されてもCでは許されない書き方なんていっぱいあるじゃん。明確に別の処理系だよ。
834デフォルトの名無しさん:2009/08/12(水) 23:51:35
C++ はCの完全なスーパーセットだっけ?
835デフォルトの名無しさん:2009/08/12(水) 23:51:59
区別されているのが理想だと俺も思うけど、
どうせ質問する人間はそんなのお構いなしにやって来るから、
どうせガチガチに縛っても守られない結果になる。
836デフォルトの名無しさん:2009/08/13(木) 00:00:16
>>834
完全じゃないよ
所々に非上位互換性がある
837デフォルトの名無しさん:2009/08/13(木) 00:02:05
とはいえ、C++も対応でいいと明記する必要は無い
838デフォルトの名無しさん:2009/08/13(木) 00:06:25
100%非対応だと明記しても、.cファイルを.cppにリネームして
C++スレに池というレスで埋め尽くされかねない件
839デフォルトの名無しさん:2009/08/13(木) 00:13:08
つーかVS2008で拡張子を.Cにする方法を知らない奴が多い件
大抵.CPPでコンパイルしてるし
840デフォルトの名無しさん:2009/08/13(木) 00:15:01
C++をメインに扱うスレでCの質問もok、ってのは理解できるよ。でも逆はあり得ない。
何故ならばC規格ではC++だけに存在する書き方は当然許されないし、文法的に完全なエラーになるんだから。
C++の質問が来ても、ここがCスレである以上「そんな書き方はCに存在しない」としか答えられないだろう。
841デフォルトの名無しさん:2009/08/13(木) 00:20:10
そういうのはCコンパイラの仕事で「俺」の仕事ではない
842デフォルトの名無しさん:2009/08/13(木) 00:43:38
C++で書く必要が無いのに無理にC++で書いたが為に方向性を見失って
苦境に陥っている人も多いと思われ。そういう人達を救ってあげられる
のならそれはそれなりに有意義かと。.cでコンパイル成功したソース
を.cppにリネームさせればC++コードになるからねw
843デフォルトの名無しさん:2009/08/13(木) 00:44:24
C++の質問が来たら、ここで答えないでC++のスレヘ誘導すればなんの問題もない。
844デフォルトの名無しさん:2009/08/13(木) 00:50:05
丸投げ、或は易門のみ答え残った難問のみを丸投げするのはやめましょう
845デフォルトの名無しさん:2009/08/13(木) 00:51:09
>>844
じゃあ何をすればいいのさw
846デフォルトの名無しさん:2009/08/13(木) 12:01:21
>>829
クロスポストができたらいいのですけれどもね。昔のfjの話でごめんなさい。
847デフォルトの名無しさん:2009/08/13(木) 15:30:54
C++は卒業します。
速度必要なとこだけCで、あとはC#で楽しますw
848デフォルトの名無しさん:2009/08/13(木) 15:33:48
俺もそのスタイルでやることがある
849デフォルトの名無しさん:2009/08/13(木) 15:52:37
速度必要なとこだけC++でやれないあたりが
850デフォルトの名無しさん:2009/08/13(木) 15:54:13
>>847
C++で速度出せない人はCでもダメ
851名無しさん:2009/08/13(木) 16:33:39
オブジェクト指向やったあとC言語みるとくそ簡単だな。
852デフォルトの名無しさん:2009/08/13(木) 16:35:29
>>847
C++卒業じゃなくて逃げるだけだろw
一度C#の楽さを覚えると二度とC++に帰ってこれないぞ
853デフォルトの名無しさん:2009/08/13(木) 16:48:52
何その土方
854デフォルトの名無しさん:2009/08/13(木) 16:54:11
C#ってそんなに楽なの?
インタープリタ言語並に楽?

VC++とVBは状況によって使い分けてるけど
(VJ++があったころはそれも)
VC#だけは一度も起動してへんわ。
855デフォルトの名無しさん:2009/08/13(木) 16:57:28
>>854
超^2楽だよ

ライブラリがすごく充実している
GCが付属でメモリリークとは無縁
JITコンパイラでJavaよりも遥かに速い実行速度
GUIプログラムがポトペタで組める

などなどC++プログラマの夢が叶えられている
しかし贅沢な実行環境を必要とする(特にメモリ)なので
富豪的プログラミングと言えるかも
856デフォルトの名無しさん:2009/08/13(木) 18:21:48
へーそうなんだ。
D言語とどっちがいいのかな
857デフォルトの名無しさん:2009/08/13(木) 18:25:37
D言語はGUIに対するサポートがほとんどC/C++と変わらん
それにいつまで経ってもβなので所詮趣味にしか使えん
C#は案件あるぞ
858デフォルトの名無しさん:2009/08/13(木) 18:32:30
C#はある種の墓場。将来はC++以上に小流派分裂必須と思われ。
859デフォルトの名無しさん:2009/08/13(木) 18:34:16
C#が墓場ならJavaは墓場に火を付けて燃やした跡だな
860デフォルトの名無しさん:2009/08/13(木) 18:34:20
>>858
ひっしだな
861デフォルトの名無しさん:2009/08/13(木) 18:42:21
C/C++でゲーム作ってるんだが、データ作成支援用になんか楽な言語探してる、みたいな俺にC#はどうなの?
入力やテキストから固定フォーマットのバイナリデータ作成したり
データを可視化して修正したり
みたいなことをGUIでやりたい
862デフォルトの名無しさん:2009/08/13(木) 18:45:44
>>861
いいんじゃない
C#でもVB.NETでも割と楽に作れる
863デフォルトの名無しさん:2009/08/13(木) 18:47:54
>>861
このスレで聞くってことは、C言語で作ればいいじゃん。
864デフォルトの名無しさん:2009/08/13(木) 18:49:27
C#、VB.NETなどの言語はシリアライズ機能がライブラリで
ちゃんと用意されている当たりがいいよな
865デフォルトの名無しさん:2009/08/13(木) 18:51:46
言語と処理系の相違は意識したほうがいいかも
866デフォルトの名無しさん:2009/08/13(木) 19:08:51
すれ違いなのに延々宣伝続けるバカが使う言語なんて、誰が選ぶんだよw
867デフォルトの名無しさん:2009/08/13(木) 19:19:11
>>866
いろんな人が選びます
868デフォルトの名無しさん:2009/08/13(木) 19:57:12
for(i=0;i<10;i++){
//処理
}

このように書いた所、10回だけではなく、永遠に処理が行われてしまいます
どうも根本的に勘違いをしている気がするのですが、なぜでしょうか?
for分の中身は完全にこぴぺしました
869デフォルトの名無しさん:2009/08/13(木) 19:58:15
>>868
i に何か代入してるんじゃないの?
870デフォルトの名無しさん:2009/08/13(木) 20:04:24
すみません、書いてからfor文の外側で永遠ループが発生していることに気が付きました
お騒がせしました
>>869ありがとうございました
871デフォルトの名無しさん:2009/08/13(木) 23:28:16
>>861
char buf[64];
char *str = "data.txt";
sprintf(buf, "notepad.exe %s", str);
system(buf);

素人考えだけど、こんな感じでテキストファイルにデータを書き込んで保存。
その保存したデータをプログラムの中でバイナリデータに変換とかじゃダメなのかなあ。
872デフォルトの名無しさん:2009/08/14(金) 00:09:23
>>871
たとえばRPGのマップチップを並べるようなの
873デフォルトの名無しさん:2009/08/14(金) 00:12:44
エクセルで十分だろ >>872
874デフォルトの名無しさん:2009/08/14(金) 00:14:55
>>873
エクセルでお手軽にできるならそれでいいと思う
875デフォルトの名無しさん:2009/08/14(金) 06:28:49
猫でも分かる、って書籍の中盤辺りで四苦八苦してる者なのだがちょっといいだろうか
配列と文字列とポインタって章で、ポインタ+数字をすると型の容量分だけ変化するから数字を一つ足せば文字列が一つ動くと書いてあって
感覚的にいまいちつかめなかったから適当に一つ組んでみたのだが
コンパイルは通ったがどれもアスキーコードがずれて文字化けしてしまうみたいなんだ。多分エラーか初歩的ミスがあるんだろうが自分じゃいまいちよく分からない。何か解釈が間違っていたのだろうか

int i;
char *a="もみむめも";
for(i=0;i<5;i++)
printf("%c\n",*(a+i));
for(i=0;i<5;i++)
printf("%c\n",a[i]);

printf("%c\n",*(a+1));
printf("%c\n",*(a+2));
printf("%c\n",*(a+3));
printf("%c\n",*(a+4));
printf("%c\n",*(a+5));



return 0;
876デフォルトの名無しさん:2009/08/14(金) 06:44:25
つまらん冗談だな
877デフォルトの名無しさん:2009/08/14(金) 06:59:35
>>875
まず

char *a="もみむめも";

これを

char *a="abcde";

とでもやってみろ
878デフォルトの名無しさん:2009/08/14(金) 07:12:45
ゴメンなさい・・・ホントゴメンなさい・・・ありがとうございます・・・
ちょっと生き恥過ぎて泣きたくなってきました。何やってんの俺・・・
879デフォルトの名無しさん:2009/08/14(金) 08:12:10
流れ的にはなんか面白かったから許すw
880877:2009/08/14(金) 08:14:30
後で文字コードの話に展開しようと思ったけど理解できたんだろうか
881デフォルトの名無しさん:2009/08/14(金) 08:28:59
なぜ”もみむめも”だったのか?
こっちのほうが気になる。
882デフォルトの名無しさん:2009/08/14(金) 08:33:34
>printf("%c\n",*(a+1));
>printf("%c\n",*(a+2));
>printf("%c\n",*(a+3));
>printf("%c\n",*(a+4));
>printf("%c\n",*(a+5));

このコードだと
char *a="abcde";
にしたとしてもaが表示されないだろ
883デフォルトの名無しさん:2009/08/14(金) 08:35:04
>>882
それ以前に猫は古すぎるからなあ
884デフォルトの名無しさん:2009/08/14(金) 08:47:44
本は、まあ、普通だと思うけどweb版をわかりやすいとかって初心者に勧めてる
やつはなんとかしてほしい。
885デフォルトの名無しさん:2009/08/14(金) 09:20:15
へえ、猫はもう古いのか。
昔必死で読んでたのが懐かしいぜ。
改訂とかしてないのけ?
886デフォルトの名無しさん:2009/08/14(金) 09:27:58
Win32APIの猫本はUnicodeの扱いが雑すぎだろw
でも猫本のCなら普通なんじゃないの?読んでないけどさ。
Cなんて既にほとんど大きな変更は無いんだから。
887デフォルトの名無しさん:2009/08/14(金) 09:29:33
>>886
ないのは事実なんだけどアライメントの厳しいプロセッサが増えた環境で
それに対応してないコードが残ってた記憶があるんだが・・・

888デフォルトの名無しさん:2009/08/14(金) 10:00:10
猫はあれで内容がシェアウェアだと謳っているからなあ
よほど神経がずぶといのか、それともキ(ry
889デフォルトの名無しさん:2009/08/14(金) 10:07:37
でもやさしい○○なんて本よりはマシだと思うけどな
890デフォルトの名無しさん:2009/08/14(金) 10:09:44
>>889
その手はそんな内容で金取るのかよって内容だけどなw
891デフォルトの名無しさん:2009/08/14(金) 11:25:29
苦しんで覚えるなんてタイトルよりはましかもしれないが、その苦しんで覚えるサイトも酷い罠。
892デフォルトの名無しさん:2009/08/14(金) 12:08:05
Javaで最初書いて、C++に翻訳して、最終的にCで書くと、
明瞭性と効率性と論理性が調和した良いコードが出来る
可能性があることが最近わかってきた。
C#で書くと、どうもVBで書き直したくなってくるのは
C#とJavaが似ていて本質的に異質な言語であることを
示しているのではないかと...

以上チラ裏
893デフォルトの名無しさん:2009/08/14(金) 12:20:35
VBのパラダイムも勉強したほうがCプログラミング
に多いに参考になると思う
894デフォルトの名無しさん:2009/08/14(金) 12:42:38
うん、大いに参考になるね。
895デフォルトの名無しさん:2009/08/14(金) 14:56:05
本気で信じるの
896デフォルトの名無しさん:2009/08/14(金) 15:02:12
>894は>893の誤変換の指摘だろ。
897デフォルトの名無しさん:2009/08/14(金) 16:27:24
オープンアーキテクチャーとノンオープンアーキテクチャー
のパラダイムの相違を知ることは重要
898デフォルトの名無しさん:2009/08/14(金) 17:13:16
○○オススメスレでも立ててそっちでやってくんない?
899デフォルトの名無しさん:2009/08/14(金) 17:15:53
Cおすすめスレの一環ですが...

俺に聞けスレでしたね。
900デフォルトの名無しさん:2009/08/14(金) 20:13:12
>>892
トップダウン・ボトムアップの両方向から書いていって、中間部分でぐだぐだになるのを防げますか?
901デフォルトの名無しさん:2009/08/14(金) 21:30:10
>>892
同じプログラムでも何度も書くうちに洗練されていくのはよくあること。
902デフォルトの名無しさん:2009/08/14(金) 21:47:04
>>901
最初にCで書いて何とか動かしたコード(とても新しい
機能拡張や仕様変更など出来る状態ではない)を
一旦Javaで書いてみるとすっきりとしたコードになっ
て(機能拡張や仕様変更の余裕すら出て)くる。
(但しデザパタとかの素養は多少居るかも。)
しかし実行速度はVM上のパフォーマンスであることを
差し引いてもやはり遅い。
その後C++で高速化を図り、最終的にC(出来る限りC++
の文法を使わない)でもう一度書いてみると不思議や不思
議、当初よりもずっとわかりやすく余裕があり安定してお
り、早いコードになっている。
更にコードに手を入れてから、もう一度同じプロセスを
実行する。以下繰り返し。
このプロセスは洗練ではなく多分進化プロセスに近い
ものだと思う。この方法に弊害もあるのかも知れないが
今となっては純粋にCだけで成長させていくのは
不可能ではないにしろ難しい割に迂遠で非効率であるこ
とは確か。
903デフォルトの名無しさん:2009/08/14(金) 22:06:43
どんだけヒマなんだよ
904デフォルトの名無しさん:2009/08/14(金) 22:08:02
>>902
>迂遠で非効率
お前が言うなwww
905デフォルトの名無しさん:2009/08/14(金) 22:08:28
一度Cで書いてみてC++のインスタンス駆動で仕上げ直すのはよくやるな
906デフォルトの名無しさん:2009/08/14(金) 22:18:47
オブ臭さがでるからそのやり方嫌う人も居る。
907デフォルトの名無しさん:2009/08/14(金) 22:26:21
最初からC/C++に書き直すつもりで書いてないと
JavaでGCまかせに書くとC/C++に直すとき辛い
908デフォルトの名無しさん:2009/08/14(金) 22:50:14
>>902
三行で。
しかもチラシの裏に書いてくれると助かる。
909デフォルトの名無しさん:2009/08/14(金) 22:56:12
>>908
情報量を落とさずに3行で>>902をまとめられる?
910デフォルトの名無しさん:2009/08/14(金) 22:57:30
CはめんどうだからJavaで書いてみたが、
なんか遅いから今度はC++で書いてみたけど、
やっぱりCが一番良い気がしたからCで書き直しちゃった。
911デフォルトの名無しさん:2009/08/14(金) 22:57:53
>>909
scrap
and
build
912デフォルトの名無しさん:2009/08/14(金) 23:02:17
>>908
つまり「書くな」って意味だろ。
913デフォルトの名無しさん:2009/08/14(金) 23:04:21
一言で書くと、

 ”Cは最強”

ってことだな。
914デフォルトの名無しさん:2009/08/14(金) 23:27:38
もうそれでいいよ
915デフォルトの名無しさん:2009/08/14(金) 23:39:57
Cが最強かどうかは別として、いまだに有効な選択肢の一つであることは間違いない。
WINDOWSなんかもC言語で書かれてるらしいし
916デフォルトの名無しさん:2009/08/15(土) 00:00:50
NTからはC++じゃなかったっけか
917デフォルトの名無しさん:2009/08/15(土) 00:04:46
Windowsはマルチリンガルな筈。APIとかC/C++だけで書かれてる
わけでもないと思う(断定出来ないけど)
918デフォルトの名無しさん:2009/08/15(土) 00:08:34
つかアセンブリ出力させたものを、手直ししてアセンブル
とかあり得ると思うし、実際やると思う。逆コンパイル
防止やパフォーマンスチューニングの為に。
だから実際のところどんな言語で最初に書かれてたなん
て詮索するのは無意味じゃないかと
919デフォルトの名無しさん:2009/08/15(土) 00:12:27
WindowsはCで書かれてるよ(一部C++
知人の開発者が言ってたから間違いない
920デフォルトの名無しさん:2009/08/15(土) 00:14:07
その開発者、首だな。
921デフォルトの名無しさん:2009/08/15(土) 00:17:29
2000とか一部とはいえソースが流出したよな
922デフォルトの名無しさん:2009/08/15(土) 00:20:27
ちなみにVistaは当初C++/CLIで開発する予定だったが、途中で頓挫したらしい
何で?って聞いても理由は教えてくれなかった
923デフォルトの名無しさん:2009/08/15(土) 00:24:59
>>917
闘うプログラマーによれば、CとC++とアセンブラだったような。
924デフォルトの名無しさん:2009/08/15(土) 00:25:52
そういう情報って出所がばれるとMSからペナルティ食らうの?
925デフォルトの名無しさん:2009/08/15(土) 00:27:08
OS作りには必要最小限のアセンブラは必要かも
926デフォルトの名無しさん:2009/08/15(土) 00:29:13
NTはMIPSやPPCなど色々なCPUに対応してたからアセンブラは極力使ってないけどね
927デフォルトの名無しさん:2009/08/15(土) 00:29:35
>>924
担当箇所について書かなければばれないだろ
関わってる人数多そうだし

開発言語が何かというのはメインじゃなくても知ることは可能だろうし
928デフォルトの名無しさん:2009/08/15(土) 00:30:49
臭いな

寝ろよ
929デフォルトの名無しさん:2009/08/15(土) 01:00:08
Glibという便利なライブラリがありますが、
自作したほうがいいでしょうか?
仕事で使えない場合があるので。
930デフォルトの名無しさん:2009/08/15(土) 01:06:36
自作してよろしい。許可する。
931デフォルトの名無しさん:2009/08/15(土) 01:12:19
したほうがよい(SHOULD)と、してよい(MAY)は、似ているようで違うと思うんだ
932デフォルトの名無しさん:2009/08/15(土) 04:13:30
>>929
仕事で使えない場合なら自作したほうがよいでしょう
933デフォルトの名無しさん:2009/08/15(土) 05:33:39
Glibつかわずに、別のライブラリ使うとか。
934デフォルトの名無しさん:2009/08/15(土) 20:58:58
expressionは式だと思うのですが、
文はなんと呼べばいいでしょうか?
935934:2009/08/15(土) 21:08:48
statementで良さそうでした。
936デフォルトの名無しさん:2009/08/15(土) 21:35:30
875だが、今度は練習問題の英字の大文字からなる文字列を英字の小文字に変換するプログラム作るのが出来ない。

char a1;

scanf("%c",&a1);

printf("a1+32=%c\n",a1+32);

と、まずは英字の大文字を小文字に変換するのを作ってみたんだが文字列にしようとして配列にすると +32 がアスキーコードじゃなく配列をいじってしまうんだ
""でくくってみたり色々試してみたがどうにもよく分からない。変数を別途に32個くらい用意してswitch文で制御するようにすれば出来ない事も無いと思うんだがもう少しスマートなやり方は無いんだろうか
937デフォルトの名無しさん:2009/08/15(土) 21:40:59
>>936
> 文字列にしようとして配列にすると
そのソースを書きなさいよ
938デフォルトの名無しさん:2009/08/15(土) 21:46:56
ソースは、とりあえず
codepad
ttp://codepad.org/
に貼って実行してみてください。
個人情報が含まれないように気をつけて。
939デフォルトの名無しさん:2009/08/15(土) 21:52:39
よくわからんけど単に大文字で文字を入力してなかっただけなんじゃないの?
940デフォルトの名無しさん:2009/08/15(土) 22:10:01
gets覚えたほうがいい気がするな
941デフォルトの名無しさん:2009/08/15(土) 22:44:14
あれ・・・>>937に言われた通りに落とそうとして、前に作ったのはもう全部消してたから最初から組んでたらなんか成功しちった・・・

#include<stdio.h>
#include<string.h>

int main(){
int i,a1;
char a2[32];

printf("英字を入力してください。\n");
gets(a2);
a1=strlen(a2);

printf("それを小文字にすると\n");
for(i=0;i<a1;i++)
printf("%c",a2[i]+32);
printf("です。");

return 0;
}

・・・・・>>937様ありがとうございます
942デフォルトの名無しさん:2009/08/15(土) 22:48:54
俺も初心者なんだが、この場合はctype.hをインクルードしてtolower関数使った方が楽じゃない?
943デフォルトの名無しさん:2009/08/15(土) 22:55:42
ふむ。
printf("%c",a2[i]+32);
が必ず小文字になる保障はないからね。

C++ならちゃんとロケールを設定して
ctype::tolowerを呼び出すべき。
944デフォルトの名無しさん:2009/08/16(日) 00:01:33
C++?
945デフォルトの名無しさん:2009/08/16(日) 01:21:03
while文とか条件付きのループを作っていて
その条件にintで定義された変数を使っている場合
scanfで数値を読み込ませたいのに、アルファベットなどの文字が入力されてしまうと
無限ループしてしまいます
次のループがきても文字が入った物は文字が入ったままになっていて
何故かscanfをすり抜けてしまうのです
デバッグをしてみても分かりませんでした・・
どなたか解決策を教えていただけないでしょうか
946デフォルトの名無しさん:2009/08/16(日) 01:31:00
無限ループを避けるには、scanfの戻り値を確認する
ゴミが入っている場合は読み捨てる
947デフォルトの名無しさん:2009/08/16(日) 01:31:04
scanfで%dとか数字を読み込む指定をすると、数字でないものは一切読もうとしない
文字が入力されると、scanfはそれを読もうとしないから、入力に残ったまま
文字が入力に残ったままなので、次のときもscanfはそれを読み込めない
永遠に文字が入力に残ったまま、永遠にscanfはそれを読み込めない

scanfは読み込みに成功した値の個数を戻り値として返すから、
scanfの戻り値を調べれば読み込めたか読み込めなかったか判る
948デフォルトの名無しさん:2009/08/16(日) 08:05:21
scanfってそもそも使うか?
949デフォルトの名無しさん:2009/08/16(日) 08:22:46
細心の注意を払って使えば問題ないよ
950デフォルトの名無しさん:2009/08/16(日) 08:47:05
じゃなくて君たちは使うのか?
951デフォルトの名無しさん:2009/08/16(日) 09:01:04
使わん
952デフォルトの名無しさん:2009/08/16(日) 09:39:34
そもそも、
GUI主流で、コマンドラインツールはパイプ等での使用を考慮したものが一般的な現状では
コマンドラインからユーザー入力を受け取るという機会自体、滅多に無い。

sscanfなら結構使う/使われているだろうし
fscanfもそれなりには使われていると思うけど。
953デフォルトの名無しさん:2009/08/16(日) 11:13:28
まぁせいぜい自分で使うちょっとしたツールとか
自作ライブラリのデバッグ用くらいやね。
そんなツールにいちいち面倒なエラー処理のコーディングなんてせんよ。
954デフォルトの名無しさん:2009/08/16(日) 11:38:25
fgetsとsscanfの組み合わせが基本だろ
955デフォルトの名無しさん:2009/08/16(日) 16:28:42
ちょっとしたツールでC使うことってなくね?
画処理とか使い捨てだけど計算量がデカイやつぐらい?
956デフォルトの名無しさん:2009/08/16(日) 16:30:16
>>955
windowsでGUIが関係するとC/C++は今となっては使いにくいな
C#ならVB6.0の代わりに使える気軽さがある
957デフォルトの名無しさん:2009/08/16(日) 16:36:43
>>956
使い捨てはLL使っちゃうよな
GUIだと確かにC#は抜群に使いやすいな
なんかネイティブコードとかややこしいけど、ちょっとしたツールなら関係ない品
958デフォルトの名無しさん:2009/08/16(日) 16:42:09
ちょっとしたツールならVBで十分じゃろ^^
C#を出すまでもない。C#は中途半端。
早くするのか便利にするのかどっちかにしろって感じ。
Javaみたいに可搬性があるならいいけど
C#はほとんどWindows限定で、覚えるだけ無意味だし。
959デフォルトの名無しさん:2009/08/16(日) 16:43:22
>>958
いやいやVB6.0は持ってない人もいるし開発ツールその物が古いところもあるしね
960953:2009/08/16(日) 16:44:09
以前はVB6とかも使ってたけど。
それだけのためにC#覚えるならVBA使うわな。

>>955
VB系だとバイナリファイル弄りとかが滅茶苦茶
めんどくさそうなイメージがある。文字列の扱いとか。
961デフォルトの名無しさん:2009/08/16(日) 16:52:58
C#は「C#じゃなきゃだめっ!」っていう部分がないんだよな。
962デフォルトの名無しさん:2009/08/16(日) 16:57:46
ちょっとしたツールは自分の一番なれてる言語だろ
963デフォルトの名無しさん:2009/08/16(日) 17:17:41
>>958
ちょっとしたツールのためにVB勉強するのは面倒だし。
964デフォルトの名無しさん:2009/08/16(日) 17:22:35
C#勉強するほうがもっと面倒だろw
C#を新しく勉強するくらいならJava勉強しといたほうがまだ未来がある。
965デフォルトの名無しさん:2009/08/16(日) 17:31:16
C#は未来がない。

Java厨もC++厨もC厨も、
なぜかそこは意見が一致する。

966デフォルトの名無しさん:2009/08/16(日) 17:33:19
>>964
C++とかJavaやってれば、C#なんて勘で使える。
967デフォルトの名無しさん:2009/08/16(日) 17:34:22
むしろC#は使い物にならないw
968デフォルトの名無しさん:2009/08/16(日) 17:34:32
>>965
それは君の周辺だけだと思われ。
969デフォルトの名無しさん:2009/08/16(日) 17:35:18
C#は新興宗教で未来が無い
C++は複雑すぎる
Cは古すぎて時代に合わない
Javaはコンシューマで動かない
Dはいつまでたってもベータバージョン
PHP、Perl、rubyは所詮スクリプト
flashはオナニーしすぎで枯れはじめてる
VBはいつまでたっても負んぶに抱っこで成長しない
970デフォルトの名無しさん:2009/08/16(日) 17:37:12
>>969
flashだけ異質じゃねーか
971デフォルトの名無しさん:2009/08/16(日) 17:39:04
C++のテンプレートメタプログラミングに至っては
天才しかまともに活用できないという恐ろしい怪物である。
972デフォルトの名無しさん:2009/08/16(日) 17:39:40
>>970
ただのECMAスクリプトじゃん。
973デフォルトの名無しさん:2009/08/16(日) 17:43:38
勘で使うなよ。
例えば、Javaの構文でポリモーフィズムさせようとすると
C++ではスライシング起きちゃうぞ?
C++で許される派生クラスでの冗長なvirtualキーワードは
C#ではメソッドを隠蔽しちゃうぞ?

細かい文法の違いがえらい大きな落とし穴になっている例でしゅる。
974デフォルトの名無しさん:2009/08/16(日) 17:46:09
ほぼ書き捨てのツールに言語なんてどれもでいいだろw
975デフォルトの名無しさん:2009/08/16(日) 17:50:49
□■□■□■□■□■□■□■□■
現在、複数の韓国IPより2chが攻撃を受けています。
その為、下記スレにて作戦本部を設営しています。
数多くの人たちの力が必要です。
今こそ2chの力を結集しましょう!!

http://yutori.2ch.net/test/read.cgi/news4viptasu/1250405690/
(避難所)http://ex14.vip2ch.com/test/read.cgi/news4vip/1250388917/
★只今避難所乱立で混乱しております★
一応正規のVIP避難所なんでこちらでお願いします。

■作戦隊長
自動保守 ◆AOIMAD.NZM
(現在酉割れで偽者が発生しています。注意。)

■攻撃方法
・Apache砲またはハイピン砲(当スレで入手)
※田代砲の使用は厳禁!!
(田代砲よりもApache砲の方が高威力です)

■現状
反撃してみたものの小規模すぎて重くなっただけ
コミケと帰省で慢性的な人員不足
現在は砲弾作成中。各員アパッチの準備中
開始時刻は人が集まり&指揮官が帰り次第決定

■□■□■□■□■□■□■□■□
976デフォルトの名無しさん:2009/08/16(日) 17:50:58
まーた始まったよ。
なんで言語を引き合いに出すとどっちが優れてるか
っていう話に持っていく馬鹿が多いんだろな。
977デフォルトの名無しさん:2009/08/16(日) 17:53:57
誰も優れているとか優れていないとかいう話はしていないよ。

C#はWindows限定で速度も遅くもメモリもバカぐいする上に
VBよりも学ぶのは面倒、Javaの劣化コピーだから

学ぶだけ無意味

って言ってるだけで。
978デフォルトの名無しさん:2009/08/16(日) 17:58:19
Java厨、VB厨は、そっとして置いてあげて、触らないように
979デフォルトの名無しさん:2009/08/16(日) 17:58:56
なんで、自分で使うだけのツールを作るための言語の話なのに
そういう話に持っていくんだよ、って話。
980デフォルトの名無しさん:2009/08/16(日) 18:03:13
あなたがおっしゃるのならそうなのでしょう
981デフォルトの名無しさん:2009/08/16(日) 18:06:04
言語厨の争いが起きているように見せかけることに
何の意味があるんだ?
982デフォルトの名無しさん:2009/08/16(日) 18:06:38
最近は勝手に開発環境インスコすると怒られるから
もっぱらExcelVBAとかJScriptです
983デフォルトの名無しさん:2009/08/16(日) 18:20:23
こういうどうでも良いことを話していると
スレが埋まってきたな。

次スレは立てる必要はないよな、不要だろ?このスレ。
984デフォルトの名無しさん:2009/08/16(日) 18:22:56
と、意味不明な言動を繰り返しており…
985デフォルトの名無しさん:2009/08/16(日) 18:34:16
動機は未だ不明
986デフォルトの名無しさん:2009/08/16(日) 18:35:25
スレならどこでもよかった

今は後悔している。
987デフォルトの名無しさん:2009/08/16(日) 18:51:03
少し分からない仕様があるので教えてください。

C言語で変数宣言する場合、
グローバル変数の宣言は、全ての関数定義の前
ローカル変数の宣言は、関数定義中の一番最初
でなければならない、という認識で合っているでしょうか?

もしそうだとすれば、グローバル変数はともかくとして、ローカル変数が途中で定義できないのはソースがとても見辛くなってしまいそうです。
988デフォルトの名無しさん:2009/08/16(日) 18:53:57
>>987
イメージがつかめないけど・・・

ちなみに

関数の外に書けばソースのどこに配置されていうようがグローバル扱いですよ
ただ最初に利用する関数の前にないとあれですが
989デフォルトの名無しさん:2009/08/16(日) 18:57:05
>>987
C言語自体もバージョンアップしてて、C99という規格ならローカル変数を関数の途中で宣言してもおk。
実際に試してみて、駄目だったらC99に対応してないコンパイラってことで。
990デフォルトの名無しさん:2009/08/16(日) 18:57:32
//ソース先頭
int g_int; //ここでも

void hoge_a(int nanika)
{


}

int g_int; //ここでも

void hoge_b(int nanika)
{
  if(g_int ....) .... //g_intをはじめて使う

}

void main()
{


}
991デフォルトの名無しさん:2009/08/16(日) 19:03:25
char ch;
scanf("%d", &ch);

これで初めてブルーバック体験したお/(^O^)\ナンテコッタイ
scanfこわすぎだおw
992デフォルトの名無しさん:2009/08/16(日) 19:03:46
□■□■□■□■□■□■□■□■
現在、複数の韓国IPより2chが攻撃を受けています。
その為、下記スレにて作戦本部を設営しています。
数多くの人たちの力が必要です。
今こそ2chの力を結集しましょう!!

http://yutori.2ch.net/test/read.cgi/news4viptasu/1250405690/
(避難所)http://ex14.vip2ch.com/test/read.cgi/news4vip/1250388917/
★只今避難所乱立で混乱しております★
一応正規のVIP避難所なんでこちらでお願いします。

■作戦隊長
自動保守 ◆AOIMAD.NZM
(今回はネトラジで指示するらしい)

■攻撃方法
・Apache砲またはハイピン砲(当スレで入手)
※田代砲の使用は厳禁!!
(田代砲よりもApache砲の方が高威力です)

■現状
反撃してみたものの小規模すぎて重くなっただけ
コミケと帰省で慢性的な人員不足
現在は砲弾作成中。各員アパッチの準備中
開始時刻は人が集まり&指揮官が帰り次第決定

■□■□■□■□■□■□■□■□
993デフォルトの名無しさん:2009/08/16(日) 19:04:32
>>991
ちがw
お前が悪いんだろw
994デフォルトの名無しさん:2009/08/16(日) 19:05:41
>>988->>990
ありがとうございます。曖昧な質問ですいません。
C99という規格ははじめて知りました。C言語はANCI-Cからフリーズしてるって職場の先輩に聞いたけど違ったんですね。。

ANSI-Cでは、グローバル変数はどこでも宣言可能、ローカル変数は関数定義の途中では宣言不可能。
C99になって仕様変更されて、グローバル変数もローカル変数もどこでも宣言可能になった。
ということでしょうか?
995デフォルトの名無しさん:2009/08/16(日) 19:13:40
さてはお前Java厨だな
996デフォルトの名無しさん:2009/08/16(日) 19:13:40
ちなみに正常に動作するのはこうだったお
int i;
char ch;
scanf("%d", &i);
ch = i;

整数拡張ってのが固定観念になってて>>991みたいな
アホな間違いしてしまった
めでたしめでたし
997デフォルトの名無しさん:2009/08/16(日) 19:34:17
void ume(void);
998デフォルトの名無しさん:2009/08/16(日) 19:35:44
生め
999デフォルトの名無しさん:2009/08/16(日) 19:36:16
>>994
C99なんて幻想だよ
対応してないコンパイラの方が多いし現場でも普及してない
ってことで忘れていい
1000デフォルトの名無しさん:2009/08/16(日) 19:40:34
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。