C言語なら俺に聞け(入門編)Part 57
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/12/05(土) 22:48:44★前スレ
C言語なら俺に聞け(入門編)Part 56
http://pc12.2ch.net/test/read.cgi/tech/1258623854/
★過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★初心者、初級者の方は他の質問スレのほうが良いかもしれません。
例えば
【初心者歓迎】C/C++室 Ver.69【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1256022655/
とか
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 132代目
http://pc12.2ch.net/test/read.cgi/tech/1258158172/
★C++言語についてはなるべく聞かないでください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
0002デフォルトの名無しさん
2009/12/05(土) 23:03:01SDLはcharで統一、wchar_tが出てきても即効でcharに変換しているようです
0003デフォルトの名無しさん
2009/12/05(土) 23:07:20utf8にしたら大工事が必要なのが難点。
0004デフォルトの名無しさん
2009/12/05(土) 23:09:37渡すときだけ、utf8toutf16という関数挟めば良いだけか。
0005デフォルトの名無しさん
2009/12/05(土) 23:14:25い印象だなあ。Windowsはwchar_t=WCHAR=UTF-16だけど、それ以外では
wchar_tのサイズや中身はマチマチだからけっきょくwchar_tも使われな
い。
0006デフォルトの名無しさん
2009/12/05(土) 23:23:42同印象。
バイト数と文字数が(概ね)比例する方が、中身は作り易いからかなぁ。
0007デフォルトの名無しさん
2009/12/06(日) 00:17:06a.txt と A.txt があったらどうなるんだ?
0008デフォルトの名無しさん
2009/12/06(日) 00:37:46Surface* ABC;
Surface *BCD;
ってするのは何か意味があるのですか。
0009デフォルトの名無しさん
2009/12/06(日) 00:41:13普通は後者を使う。
0010デフォルトの名無しさん
2009/12/06(日) 00:44:420011デフォルトの名無しさん
2009/12/06(日) 00:49:32と宣言したら
sizeof(foo)とsizeof(bar)が一致しました。
このコンパイラは馬鹿ですか?
0012デフォルトの名無しさん
2009/12/06(日) 01:13:320013デフォルトの名無しさん
2009/12/06(日) 01:30:110014デフォルトの名無しさん
2009/12/06(日) 01:55:15バカってゆーな!!
1行に複数の変数宣言すんの嫌いだから上で書いてるんだい
0015デフォルトの名無しさん
2009/12/06(日) 02:21:26それだけでは。
0016デフォルトの名無しさん
2009/12/06(日) 02:26:370017デフォルトの名無しさん
2009/12/06(日) 05:45:38Surface *BCD;//頭すっからかんが使う
0018デフォルトの名無しさん
2009/12/06(日) 07:25:34自分がセンスあると勘違いして間違える。
0019デフォルトの名無しさん
2009/12/06(日) 07:27:58Surface *BCD; // 年配の人がよく使う
0020デフォルトの名無しさん
2009/12/06(日) 07:46:160021デフォルトの名無しさん
2009/12/06(日) 08:48:240022デフォルトの名無しさん
2009/12/06(日) 09:48:22センスのある人は変数ごとに個別に宣言するから
0023デフォルトの名無しさん
2009/12/06(日) 10:14:05それはありそうもない。まとめて宣言するのは普通のこと。
0024デフォルトの名無しさん
2009/12/06(日) 10:16:440025デフォルトの名無しさん
2009/12/06(日) 10:26:12そのハンガリアンはマイクロソフトの悪習
0026デフォルトの名無しさん
2009/12/06(日) 10:29:52まじめに作るなら、UTF16もマルチバイト文字と同じ手間が必要。
このまえ有料の2chブラウザがそれで失敗して祭られてた。
0027デフォルトの名無しさん
2009/12/06(日) 11:34:05以上は、「何故こういうセットなのか」を深く深く深く深く深く深く深く深く深く深く深く深く深く深く深く深く深く深く深く深く深く深く深く深く深く深く深く深く深く深く深く深く深く深く深く深く
理解していないと、いわゆるセキュリチーホールを作ってしまう。
どこからどこまでのバイトが無効なのか知らないと、そのままメモリに乗っけるアホなプログラムソースになる。
0028デフォルトの名無しさん
2009/12/06(日) 11:40:330029デフォルトの名無しさん
2009/12/06(日) 11:48:52うてふさんじゅーに
うてふろくじゅーよん
0030デフォルトの名無しさん
2009/12/06(日) 11:51:560031デフォルトの名無しさん
2009/12/06(日) 12:04:300032デフォルトの名無しさん
2009/12/06(日) 12:05:490033デフォルトの名無しさん
2009/12/06(日) 12:10:110034デフォルトの名無しさん
2009/12/06(日) 12:11:25範囲をコメントアウトする場合は/**/の方が便利。
0035デフォルトの名無しさん
2009/12/06(日) 12:15:08#if defined
#ifndef
#ifdef
これを使い出すようになると、なにやら俺もマルチプラットフォーマーになった気分さえ味わえる、で、あ
ろう・・・
0036デフォルトの名無しさん
2009/12/06(日) 12:19:550037デフォルトの名無しさん
2009/12/06(日) 14:13:28汚いコード書く人ほどそうするよね
普通は初期化もするから複数宣言したら見辛いだけ
0038デフォルトの名無しさん
2009/12/06(日) 14:19:40for (i = 0; ...
0039デフォルトの名無しさん
2009/12/06(日) 14:19:41サロゲートペアか
0040デフォルトの名無しさん
2009/12/06(日) 14:22:30結合文字も。
0041デフォルトの名無しさん
2009/12/06(日) 14:22:44ポインタじゃないからどうでもいいけど
0042デフォルトの名無しさん
2009/12/06(日) 14:24:14有料でやっちゃったら叩かれるよなあ
てか有料の専ブラとかあんのか
0043デフォルトの名無しさん
2009/12/06(日) 15:34:36for(int i = 0; ...
0044デフォルトの名無しさん
2009/12/06(日) 15:37:590045デフォルトの名無しさん
2009/12/06(日) 15:49:35大抵は C/C++ コンパイラだったりするし。
純粋な C コンパイラ欲しいな。
0046デフォルトの名無しさん
2009/12/06(日) 15:50:140047デフォルトの名無しさん
2009/12/06(日) 15:58:48読みにくい気がするのだが、、、
俺だけか。
0048デフォルトの名無しさん
2009/12/06(日) 16:01:17それ { } の外なのに中の扱いになって違和感あるから好きじゃないな。
0049デフォルトの名無しさん
2009/12/06(日) 16:01:530050デフォルトの名無しさん
2009/12/06(日) 16:06:32俺も最初違和感あったけど、便利すぎてやめられんw
0051デフォルトの名無しさん
2009/12/06(日) 16:11:040052デフォルトの名無しさん
2009/12/06(日) 16:12:430053デフォルトの名無しさん
2009/12/06(日) 16:23:190054デフォルトの名無しさん
2009/12/06(日) 16:25:250055デフォルトの名無しさん
2009/12/06(日) 16:26:26最初っから頭で宣言しといたほうが楽。
0056デフォルトの名無しさん
2009/12/06(日) 16:29:39だよね。使い分けも出来ずにこれが最高、これ以外ありえないって言ってる感じが
0057デフォルトの名無しさん
2009/12/06(日) 16:30:200058デフォルトの名無しさん
2009/12/06(日) 16:30:48あと「おれはC#で、そもそもループなんてめったに書かないよww」みたいな
的外れな反論もいいからね。
0059デフォルトの名無しさん
2009/12/06(日) 16:32:58for (int i ・・・
みたいな書き方ができたらって前提で話が始まってるじゃん。
C89なら使えるし。
0060デフォルトの名無しさん
2009/12/06(日) 16:37:080061デフォルトの名無しさん
2009/12/06(日) 16:37:080062デフォルトの名無しさん
2009/12/06(日) 16:38:08結婚か
0063デフォルトの名無しさん
2009/12/06(日) 16:49:47>>56
でも、違和感があるとか、スコープがわからないとか言ってる連中は
状況によって、スコープがわかりやすくなったりしないだろうから、
状況によらずに、使わないってことだろ?
0064デフォルトの名無しさん
2009/12/06(日) 16:51:36最初から全部外だな。
0065デフォルトの名無しさん
2009/12/06(日) 16:52:28それ言ったの俺じゃないから知らないが
この使い方出来なきゃダメ、これが上級者のやり方
とか言ってる奴も同じだろ
0066デフォルトの名無しさん
2009/12/06(日) 17:04:16君はこれが使えるようになってからプログラム始めた口だね?
そうでなきゃ、教わったことをそのまま使って応用の利かないタイプかな。
使えないころからプログラミングやってきて、自分で考えるような人は
最初は違和感感じるもんだよ。
0067デフォルトの名無しさん
2009/12/06(日) 17:07:03は
{int i; for (i = 0;...) ...}
と同義だしな。
0068デフォルトの名無しさん
2009/12/06(日) 17:09:37でも、実際ある程度以上(っていうか普通以上)のレベルの人は
for()の中で宣言するスタイルだし。
0069デフォルトの名無しさん
2009/12/06(日) 17:10:130070デフォルトの名無しさん
2009/12/06(日) 17:10:58べつに「最初は違和感あったけど今は便利に使ってる」みたいな人は問題にしてないよ。
ずっと違和感あって、使ってないって人はアレだけど。
0071デフォルトの名無しさん
2009/12/06(日) 17:13:00その理屈だと、ローカル変数使わないで最初から全部グローバルに
しとけばいいってことになるね。
0072デフォルトの名無しさん
2009/12/06(日) 17:14:590073デフォルトの名無しさん
2009/12/06(日) 17:19:01>>71
アホか。全然違うだろ。
0074デフォルトの名無しさん
2009/12/06(日) 17:28:09( ´゚д゚`)エー
0075デフォルトの名無しさん
2009/12/06(日) 17:28:37それぞれ長所と短所が分類されて久しい罠
0076デフォルトの名無しさん
2009/12/06(日) 17:29:320077デフォルトの名無しさん
2009/12/06(日) 17:33:17ワロタ。
ちなみに、スコープをループの中だけに限定すれば
難しいこと考えなくていい。
for (int i; ...; ...;)
for (int j; ...; ...;)
if (i の条件式)
if (jの条件式)
... 処理 ...
0078デフォルトの名無しさん
2009/12/06(日) 17:35:46それ見るとイラッとする。
どんだけネストするんだよ、と。
0079デフォルトの名無しさん
2009/12/06(日) 17:37:280080デフォルトの名無しさん
2009/12/06(日) 17:38:19違うだろ。それなら誰もスコープについて文句言わない
0081デフォルトの名無しさん
2009/12/06(日) 17:38:560082デフォルトの名無しさん
2009/12/06(日) 17:42:560083デフォルトの名無しさん
2009/12/06(日) 17:47:48こういう議論になると、宗教論争(どっちでもいい、俺の言い分にも理がある)
とか言い出すやつがいるなぁ。
for(int i … を使わないやつなんて、ヘタクソだけじゃん。
まったく理はないよ。
0084デフォルトの名無しさん
2009/12/06(日) 17:49:27C++を使わない奴なんて、ヘタクソだけじゃん。
まったく理はないよ。
0085デフォルトの名無しさん
2009/12/06(日) 17:51:22おなじだ。
「広いスコープが必要になる場合があるから、デフォで広いスコープにスコープに
変数を置く」って理屈だろ。
>>55 は。
ローカル変数の意義をぜんぜん理解してない。
0086デフォルトの名無しさん
2009/12/06(日) 17:52:55もう一回言うけどC89は問題にしてない。
0087デフォルトの名無しさん
2009/12/06(日) 17:54:07・同じ行で異なるものを複数宣言しない
・宣言と同時に初期化
・スコープは狭く
0088デフォルトの名無しさん
2009/12/06(日) 17:54:53C++を使わない奴なんて、ヘタクソだけじゃん。
まったく理はないよ。
0089デフォルトの名無しさん
2009/12/06(日) 17:55:27上級者はC++だよ
0090デフォルトの名無しさん
2009/12/06(日) 17:56:57for (p = 先頭セル; *p; p = p->next)
if (p->id == ID)
break;
/* Not found... */
if (!p)
return NULL;
... p に対する処理 ...
0091デフォルトの名無しさん
2009/12/06(日) 17:57:190092デフォルトの名無しさん
2009/12/06(日) 17:57:580093デフォルトの名無しさん
2009/12/06(日) 17:58:590094デフォルトの名無しさん
2009/12/06(日) 18:00:200095デフォルトの名無しさん
2009/12/06(日) 18:00:38for (p = 先頭セル; p; p = p->next) ?
0096デフォルトの名無しさん
2009/12/06(日) 18:01:13すまんミスった。
0097デフォルトの名無しさん
2009/12/06(日) 18:07:16C++ なんか使ってる奴は下級者だよ。
0098デフォルトの名無しさん
2009/12/06(日) 18:09:240099デフォルトの名無しさん
2009/12/06(日) 18:10:220100デフォルトの名無しさん
2009/12/06(日) 18:22:31for (cell *p = 先頭セル; p; p = p->next) {
if (p->id == ID)
:
... p に対する処理 ...
:
:
return p;
}
/* Not found... */
return NULL;
0101デフォルトの名無しさん
2009/12/06(日) 18:26:230102デフォルトの名無しさん
2009/12/06(日) 18:40:460103デフォルトの名無しさん
2009/12/06(日) 18:42:350104デフォルトの名無しさん
2009/12/06(日) 18:44:400105デフォルトの名無しさん
2009/12/06(日) 19:08:46今頃「最初」はないだろ。。
どんだけプログラミングから離れてたんだよっていう。
0106デフォルトの名無しさん
2009/12/06(日) 19:09:57それが当たり前に使える言語のスレで議論すればいいじゃん
0107デフォルトの名無しさん
2009/12/06(日) 19:10:420108デフォルトの名無しさん
2009/12/06(日) 19:32:300109デフォルトの名無しさん
2009/12/06(日) 19:38:460110デフォルトの名無しさん
2009/12/06(日) 19:43:12だったらそれで終わってたけど、「違和感がある」とか「スコープが分かりにくい」
だから、そこはツッコまざるをえない。
0111デフォルトの名無しさん
2009/12/06(日) 19:45:080112デフォルトの名無しさん
2009/12/06(日) 19:45:490113デフォルトの名無しさん
2009/12/06(日) 19:46:55for()の中に入れるわな。
0114デフォルトの名無しさん
2009/12/06(日) 19:47:30そのツッコみってなんか意味ある、内容のある意見なわけ?
ただの罵倒なら終わらないんだけど
0115デフォルトの名無しさん
2009/12/06(日) 19:49:53Cに限っていえば例え対応してても中に入れない人の方が多いと思うけど
0116デフォルトの名無しさん
2009/12/06(日) 19:50:120117デフォルトの名無しさん
2009/12/06(日) 19:50:22変数を使う、という話はどうなったんだ?
論点はそこじゃないのか。
0118デフォルトの名無しさん
2009/12/06(日) 19:51:34C99まではどうやってたんだよw
全員が初級かw
0119デフォルトの名無しさん
2009/12/06(日) 19:52:19使ってるためにさらに輪をかけてゲロゲロになっていて、どうし
ようもないゴミが簡単に生産されるようになってる。正直いって、
C を選ぶ理由が C++ プログラマーを追っぱらうため *だけ* だっ
たとしても、それ自体、C を使う強力な理由になりうる。
Linus Torvalds
0120デフォルトの名無しさん
2009/12/06(日) 19:53:10罵倒なんかしてないよ。
「お前の態度は気に食わない」レベルの書き込みって、
俺以外のやつがしてる。
おれはそれに対して、反論してるだけ。
0121デフォルトの名無しさん
2009/12/06(日) 19:54:310122デフォルトの名無しさん
2009/12/06(日) 19:54:43それの話をしてる人はそれが論点なんだろうね。
おれは教条主義みたいに、ぜったいすべきって話はしてないし。
0123デフォルトの名無しさん
2009/12/06(日) 19:55:340124デフォルトの名無しさん
2009/12/06(日) 19:56:29OOPはいいけど、C++は良い言語とは言えない。
0125デフォルトの名無しさん
2009/12/06(日) 19:56:45C89は除外してるって言ってるじゃん。
議論してるとき相手に原理主義者ってラベルはって、攻撃するやつ多すぎ。
0126デフォルトの名無しさん
2009/12/06(日) 19:59:05じゃあ何なら言い訳?あ、これにレスしなくていいから。↓行ってね
最も美しいプログラミング言語は? Part4
http://pc12.2ch.net/test/read.cgi/tech/1259336620/
0127デフォルトの名無しさん
2009/12/06(日) 19:59:07いや終わってないだろ?
0128デフォルトの名無しさん
2009/12/06(日) 19:59:46変数や型の定義は「禁止」されている。
グローバル領域以外の場所での関数の定義も「禁止」されている
(これはC系言語では共通)
制限が緩い言語はそれなりの利点もあるが、リスクもまた持つ。
なんで、あんまし制約の緩さとか厳しさを言語の優劣にすり替
えない方がいいと思うね。自慢しているのは単なるアホなファン
に過ぎないんだけど数は多くて五月蝿くてさ
0129デフォルトの名無しさん
2009/12/06(日) 19:59:56うん。口喧嘩は終わってないみたいだねw
0130デフォルトの名無しさん
2009/12/06(日) 20:00:01隔離スレに誘導すんなカス
0131デフォルトの名無しさん
2009/12/06(日) 20:01:19完全にスレチだもん
0132デフォルトの名無しさん
2009/12/06(日) 20:02:42なんて自慢しているような話だなw
0133デフォルトの名無しさん
2009/12/06(日) 20:03:120134デフォルトの名無しさん
2009/12/06(日) 20:06:42> Cでは関数直下の{} グローバル領域以外の場所での
> 変数や型の定義は「禁止」されている。
これは間違ってるけど、まあいいや。
関数やメソッドのはじめ以外で変数宣言しないのって、
メリットははいよ。
COBOLからCに入ってきて、変数をファイルの最初のほうで
全部グローバル変数で宣言して「こっちのほうがわかりやすい」とか
CからJavaに入ってきて、変数をメソッドの先頭で全部宣言して、
「これのほうがきれいだ」とか、言ってるPGは何度となくみてるけど、
勉強不足すぎ。
0135デフォルトの名無しさん
2009/12/06(日) 20:06:47C99以降ならこうする、
みたいな形で場合わけすればいいと思うよ。
0136デフォルトの名無しさん
2009/12/06(日) 20:09:280137デフォルトの名無しさん
2009/12/06(日) 20:10:440138デフォルトの名無しさん
2009/12/06(日) 20:11:46どちらでも、C89のスタイルがいいって考えの人がいるっぽい。
基本C99のスタイルで、C89のときはしかたなくC89のスタイルだよな。
0139デフォルトの名無しさん
2009/12/06(日) 20:13:19int i;
for(i = 0; ...) { }
C99以降なら
for(int i= 0; ...) { }
0140デフォルトの名無しさん
2009/12/06(日) 20:13:29どこでそんな話が出てきたんだ?
0141デフォルトの名無しさん
2009/12/06(日) 20:15:30関数のどこかに宣言されている変数を「探させる」なんて、もっとも邪悪な作法だ。
0142デフォルトの名無しさん
2009/12/06(日) 20:15:48だからさー、使い分けじゃないのか?
forループの外で、その変数iを参照したくなったときどうするにだ。
0143デフォルトの名無しさん
2009/12/06(日) 20:17:00C++批判の99%はそうだからw
0144デフォルトの名無しさん
2009/12/06(日) 20:17:25Linus氏の発言じゃないの?
0145デフォルトの名無しさん
2009/12/06(日) 20:17:35禁止されていないのはCじゃない別言語とすら言えるかも
(C言語規格団体がいくら違うと言っても、コアな部分は
動かしようが無い)
文法上の規制が最も厳しい言語の一つであるが故に高い
信頼性があり使われてきた。
0146デフォルトの名無しさん
2009/12/06(日) 20:18:45天才現る。
ここ10年、20年のプログラミング言語の進展にまっこうから反対する意見。
0147デフォルトの名無しさん
2009/12/06(日) 20:19:10貧弱な開発環境でつね。
0148デフォルトの名無しさん
2009/12/06(日) 20:19:35そのfor文の部分を関数にして、
その参照したいカウンタ変数iを戻り値にした方が
余計な変数を増やさないという点でスマートに書けると思う。
0149デフォルトの名無しさん
2009/12/06(日) 20:21:43変数の宣言位置が関数の先頭にまとめられてるから信頼性が高いって
意見ってだれか言ってた?
0150デフォルトの名無しさん
2009/12/06(日) 20:24:30その場合は、iを外にだすなり、フラグを作るなり好きにすれば?
「常にループカウンタをfor()の外に出す」って意見に反論してるのに、
「常にfor()の中に入れるべき」って発言してるかのようにすりかえられて困る。
0151デフォルトの名無しさん
2009/12/06(日) 20:24:54あっちこっちで宣言したい奴はどっか行けって。うん、Javaでいいんじゃない?
0152デフォルトの名無しさん
2009/12/06(日) 20:26:570153デフォルトの名無しさん
2009/12/06(日) 20:27:33さっき試したらエラーで怒られた。
-std=c99 にしたら通ったけど。
0154デフォルトの名無しさん
2009/12/06(日) 20:29:440155デフォルトの名無しさん
2009/12/06(日) 20:30:27func(n){
int e;
for (int i=0;i<n;i++){ 処理
……
e = i;
}
// ループ外で e が有効
}
0156デフォルトの名無しさん
2009/12/06(日) 20:31:41それ無駄じゃね
0157デフォルトの名無しさん
2009/12/06(日) 20:32:30> だからCっつったらC89もあるんだから
そんなこと最初から繰り返し言及されてるだろ。
「for (int i = 0; …はつねにダメ」って言ってるやつはヘボいねって
議論なんだから、それに対しての反論がなくなったってことは、そうだって
ことでいいんだな。
0158デフォルトの名無しさん
2009/12/06(日) 20:35:27常に駄目じゃないけどダメな場合は非常に多い
0159デフォルトの名無しさん
2009/12/06(日) 20:36:40ループを途中で抜けて、iの値を見たいときくらいでしょ。
0160デフォルトの名無しさん
2009/12/06(日) 20:37:03ループカウンタだけが例外なんて無様なことしてないよな?
0161デフォルトの名無しさん
2009/12/06(日) 20:37:140162デフォルトの名無しさん
2009/12/06(日) 20:39:24int i;
for(i = 0; i < 32; i++){
何らかの処理
}
for(i = 0; i < 64; i++){
何らかの処理
}
return 0;
}
0163デフォルトの名無しさん
2009/12/06(日) 20:40:43あたりまえだろ。
使う直前で宣言&初期化。
言語の制約とか、処理の流れでそうならないときもあるけど基本は。
0164デフォルトの名無しさん
2009/12/06(日) 20:40:51for (int i=0; i<8; i++) ...;
0165デフォルトの名無しさん
2009/12/06(日) 20:43:13ははは、i とか j ってもうカウンタ用の変数っていう暗黙の了解があるから
俺もそんな感じで使っているよ。。
0166デフォルトの名無しさん
2009/12/06(日) 20:43:36それ、いい例? 悪い例?
0167デフォルトの名無しさん
2009/12/06(日) 20:49:18定義できるんだけどそれを先頭に持っていかないとコンパイラ
が怒ると言う人が居て笑える。
太古のCだと、特にプロトタイプ宣言をしなくとも複数の
関数の相互呼び出しも可能だったが、コンパイラの処理速度が
著しく遅くなる原因として嫌われ、プロトタイプ宣言をしないと
文句を言ってコンパイルを中止するような標準が作られた。
現在のコンパイラはそれに準拠しているものが殆ど。
プログラムを何百のモジュールに分けて分割コンパイルする
開発方法が一般的になった時代と重なってる。
(Cのコンパイルはヘッダファイルを多重に大量に読み込むことが
多いので概して遅い)
0168デフォルトの名無しさん
2009/12/06(日) 20:49:36これって>>159への反論?
タイプ量がちょっと減る以外にメリットが見出せない。
0169デフォルトの名無しさん
2009/12/06(日) 20:51:26少しは要約しろよ
0170デフォルトの名無しさん
2009/12/06(日) 21:00:33変数のスコープはなるべく小さくした方がいいとか
考えた事もないんだろうな
0171デフォルトの名無しさん
2009/12/06(日) 21:02:360172デフォルトの名無しさん
2009/12/06(日) 21:03:00変数を「その変数を最初に使う部分」で宣言するかどうかの問題だ。
0173デフォルトの名無しさん
2009/12/06(日) 21:04:19>>170とか完全にC89バカとか言ってるし、もうねw
0174デフォルトの名無しさん
2009/12/06(日) 21:06:51C89のスタイルがいいと思って、そうでない環境でも
そのスタイルを持ち込んだり、宣伝するやつってすごいデメリット。
0175デフォルトの名無しさん
2009/12/06(日) 21:08:010176デフォルトの名無しさん
2009/12/06(日) 21:15:390177デフォルトの名無しさん
2009/12/06(日) 21:17:00C89前提なら別にいいよ。
無条件にそれが(ほかの環境でも)いいってことになると迷惑。
0178デフォルトの名無しさん
2009/12/06(日) 21:17:48そんなの厳密にやってる奴はいないよ。
ループカウンタのスマート(笑)な使い方を覚えてトクイになってるだけだろ。
0179デフォルトの名無しさん
2009/12/06(日) 21:19:38Cの場合、迷惑だってことはつまりそれはC99前提だってことだろ?
それとも上の方でJavaがどうとか言ってたやつ?
0180デフォルトの名無しさん
2009/12/06(日) 21:23:43トクイになってるようにみえるのか。
まあ、相手が明らかに間違ってる、自分が正しいって議論だから
あいてがムキなってがんばってるのは面白いけどな。
0181デフォルトの名無しさん
2009/12/06(日) 21:25:12最後の二行に必死さを感じるのは俺だけだろうか
0182デフォルトの名無しさん
2009/12/06(日) 21:26:26なんでトクイになってんのか
0183デフォルトの名無しさん
2009/12/06(日) 21:28:27変数とか、使用目的が曖昧な変数があると酷く苦痛なことは
事実。その変数がいつ「使用済み」になったのかがわかりにくい
から。
0184デフォルトの名無しさん
2009/12/06(日) 21:31:19変数を宣言する場所の議論だろ。
0185デフォルトの名無しさん
2009/12/06(日) 21:32:13C99でもC89の書き方がをすべしって書いてる本があったら迷惑だわな。
そんな本あるの?
0186デフォルトの名無しさん
2009/12/06(日) 21:33:30>>185
もとよりC89のスタイルで書いてあるのばっかりだけど?
0187デフォルトの名無しさん
2009/12/06(日) 21:35:20あれはどこに書くかとかそういう問題以前にバグがあるし。
0188デフォルトの名無しさん
2009/12/06(日) 21:36:47書いた本人が推敲すれば良い。逆に言えばそういう状態のコード
のデバッグを引き受けるのが悪い。C89でも推敲すれば
そういう曖昧な変数があっても自然にそうわかるように出来る。
0189デフォルトの名無しさん
2009/12/06(日) 21:37:56それがなにか問題でも?
C89の本なら、C89の書き方になるのは当たり前でしょ?
C99の本でそうなら勘弁してほしいね。
0190デフォルトの名無しさん
2009/12/06(日) 21:40:13ちげーよ
C89, C99どちらのスタイルがいいかっていう議論です。
0191デフォルトの名無しさん
2009/12/06(日) 21:40:430192デフォルトの名無しさん
2009/12/06(日) 21:42:31// こういうインラインコメント
使ってないよね?
0193デフォルトの名無しさん
2009/12/06(日) 21:45:18あなたのCコードは標準に合っていますか?
オープンソースのオペレーティング・システムと一緒に配布されている
gccのバージョンにはC99の新しい機能の全てがサポートされているわけではありません。
しかし大部分の機能は既に広く使われるようになっているので、特に効率や
明快さが求められる所では、新しい開発にC99の機能の採用を真剣に考えて
良いのではないかと思います。
http://www.ibm.com/developerworks/jp/linux/library/l-c99/
0194デフォルトの名無しさん
2009/12/06(日) 21:45:47言ってるわけじゃないからね。
自明のことだと思うけど「C89でどうすんの?」ってカキコが多い。
0195デフォルトの名無しさん
2009/12/06(日) 21:45:57C99とかC++とかの「洗練された」言語では推敲が
怠られることがあるね。スマートに書きやすいと
動作確認した後の手入れとか仕上げみたいな
ソースレベルでの再確認作業が甘くなり
それが禍根を残しやすいというのはあると思う。
野暮ったい書き方しか出来ない(許可されない)
言語の場合は別の理由からかも知れないが
結果的に推敲がなされて信頼性が向上するっての
もあると思う
0196デフォルトの名無しさん
2009/12/06(日) 21:48:050197デフォルトの名無しさん
2009/12/06(日) 21:48:48完全に普及すれば、C99でもいいんじゃない?
0198デフォルトの名無しさん
2009/12/06(日) 21:51:19そんなこと言うと、C89とかまだ完全に普及してないんでK&Rスタイルでいくしかない。
0199デフォルトの名無しさん
2009/12/06(日) 21:53:47C89スタイルのメリット
・必然的に変数一覧が作成されるため、命名ルールによっては処理内容まで把握できる。
・先頭と決まっているため、保守時に探す必要がない。
・採用例(開発現場、書籍等)が圧倒的に多い。
C99スタイルのメリット
・スコープが宣言時からブロック終了まで、またはループブロック内に制限されるため、未初期化変数の使用を抑止できる。
・使う直前に宣言するため、変数の使用範囲がわかりやすい。
・メモリ節約。
0200デフォルトの名無しさん
2009/12/06(日) 21:55:41・x86プラットフォームに限って言えば、完全準拠コンパイラは
Intel C++ Compilerしかない
gccですら部分準拠に過ぎない
0201デフォルトの名無しさん
2009/12/06(日) 22:11:55>・必然的に変数一覧が作成されるため、命名ルールによっては処理内容まで把握できる。
>・先頭と決まっているため、保守時に探す必要がない。
これをメリットと考える人はほとんどいないだろう。
>・メモリ節約。
メモリの節約にはなってないと思われ。
0202デフォルトの名無しさん
2009/12/06(日) 22:13:010203デフォルトの名無しさん
2009/12/06(日) 22:13:58あまり加速しないでね ★
0204デフォルトの名無しさん
2009/12/06(日) 22:17:090205デフォルトの名無しさん
2009/12/06(日) 22:18:11段階のコードを見て(自分の言語で)気に入る形に書き直
すのは勝手だが、わざわざその欠点をあげつらうのは見苦
しいだけ。洗練された言語には無い強さがあるんでCを敢
えて使う人も多い。
0206デフォルトの名無しさん
2009/12/06(日) 22:22:1060年代70年代の言語で、新しい言語(メジャーなやつ)はまったく採用
されてない。
まともな人は、ほとんどメリットを見出してないだろうね。
大昔、BASICのソースがPC雑誌に掲載されていた時代に変数表
って載ってたけど、C89で「変数一覧」とか「探さないでいい」とか思う人は
そのころの発想から進歩してない。
0207デフォルトの名無しさん
2009/12/06(日) 22:26:240208デフォルトの名無しさん
2009/12/06(日) 22:27:510209デフォルトの名無しさん
2009/12/06(日) 22:28:27C++厨はカエレ
0210デフォルトの名無しさん
2009/12/06(日) 22:28:40関係ないと思うけど、たとえばどういう場合?
0211デフォルトの名無しさん
2009/12/06(日) 22:28:57C99は免罪符にはならないよ。Cであることに変わりはない
C99も十分時代遅れだ
0212デフォルトの名無しさん
2009/12/06(日) 22:29:24どこに書いてもコンパイル結果は同じになるから。
0213デフォルトの名無しさん
2009/12/06(日) 22:30:340214デフォルトの名無しさん
2009/12/06(日) 22:30:36そういうことは、リファレクタリングと称して新しい言語のほうがさかんに行われている気がする。
「新しい」はC99とかC++なんかではないよ。少なくともJava以降。
0215デフォルトの名無しさん
2009/12/06(日) 22:30:521サイクルは無駄にする。少なくとも。
変数の確保がメモリ管理と等価であるCでは1サイクルでは終わらないがな
0216デフォルトの名無しさん
2009/12/06(日) 22:31:09シビアな条件の組み込み機器とかにも使われてる理由がわかってないんだよな
自称進化したニュータイプな人はw
0217デフォルトの名無しさん
2009/12/06(日) 22:32:09そうでなきゃ仕様的に許されるどこに書いたって同じなんだから議論の余地はない。
0218210
2009/12/06(日) 22:32:49まあ、原理主義者じゃないからそういう場合は臨機応変に対応すればいい。
実行時のパフォーマンスと、読みやすさを天秤にかけて。
0220デフォルトの名無しさん
2009/12/06(日) 22:36:32int i;
for (i = 0; i < M; i++)
{
int j;
for (j = 0; j < N; j++)
{
/* …… */
0221デフォルトの名無しさん
2009/12/06(日) 22:38:51むしろ、宣言と同時に値を代入するよりも、コード中の関係ある部分の近くで初期値を代入するのが普通でしょうね。
だいたい、auto 変数の宣言と同時に値を代入することを「初期化」というのでしょうか。
0222デフォルトの名無しさん
2009/12/06(日) 22:43:09>宣言と同時に「初期化」
には反対ですね。使う直前で値を代入すればいいだけで。
そもそもauto変数を「初期化」するという用語はあるのですか?
0223デフォルトの名無しさん
2009/12/06(日) 22:43:39それも個別に宣言するもの?
0224デフォルトの名無しさん
2009/12/06(日) 22:53:55そうですね。一緒に宣言しますね。
そもそもこの話は
int* a;
と書くやからがいること
そして、往々にして
int *a, *b;
を
int* a, b;
と間違えて書いてしまうことから発したものですが、
C++御大禿げのいうことには、ときどき変なのがありますね。
0225デフォルトの名無しさん
2009/12/06(日) 22:55:25auto変数だろうとその他の変数だろうと、規格ではint i = 0;などのように宣言と同時に値を与えるのは初期化ということになっている。
つまり、auto変数を初期化するということも当然存在する。
もちろん、その使用の是非は別として。
0226デフォルトの名無しさん
2009/12/06(日) 22:56:57ふーん、そうなんですね。
初期化と代入の区別はあいまいになってきているんですね。
昔は auto 変数は「初期化」できなかったんですけどね。
0227デフォルトの名無しさん
2009/12/06(日) 23:02:15議論の筋と関係ないしな。
0228デフォルトの名無しさん
2009/12/06(日) 23:12:0760-70 年代の言語で新しい言語ってのがよくわからんが
DATA DIVISION. で変数宣言し終えてから PROCEDURE DIVISION. で手続きを書き始める言語は一時期メジャーだったよね
BASIC の掲載記事は大部分が結果オーライで変数表はあまりついておらず、
ただ編集部よりの偉い(偉そうな)人が変数表を作るようアドバイスはしていたようだが
検索が早い貴重な1文字変数を使い回しなんて常套手段だったりしたよね
だったらマシン語使えやと言ってもグローバル癖はもはやパラダイムですらあり渋々変数表作ってた
という立場からは >>207 の言わんとするところが、わからんでもない
いちいち SP 相対で即値を書き込みとかイラついてたし
そんな状況下で K&R C を使ってありがたみを痛感したのがローカル変数の存在なんだが・・・C89?
>>211
C スレだからこそ C に対する批判ができる場だろjk
ここは信者スレではないぞ
0229デフォルトの名無しさん
2009/12/06(日) 23:13:53ここは入門スレなので、哲学問題はよそでやってくれ。
0230デフォルトの名無しさん
2009/12/06(日) 23:14:160231デフォルトの名無しさん
2009/12/06(日) 23:14:59そうそう、もともとは
int *a;
か
int* a;
かの話だったんですよね。で、
int* a;
をセンスのある書き方、と主張する輩が沸いてできたのが、笑止というか。
0232デフォルトの名無しさん
2009/12/06(日) 23:16:15そうそう、初期化と代入の差は希薄になってきたんですね、K&R1 の時代からすれば。
0233デフォルトの名無しさん
2009/12/06(日) 23:18:17>60-70 年代の言語で新しい言語ってのがよくわからんが
「新しい言語」はそこにはかかってないよ。
0234デフォルトの名無しさん
2009/12/06(日) 23:48:18じゃあ、じゃあああああ、どこでやれっっちゅううねえんん!!! 鬼気迫る勢いで
0235デフォルトの名無しさん
2009/12/06(日) 23:49:510236デフォルトの名無しさん
2009/12/06(日) 23:56:330237デフォルトの名無しさん
2009/12/06(日) 23:57:41うそでしょ?どちらかというと C89信者の方が多いのではありませんか?
0238デフォルトの名無しさん
2009/12/06(日) 23:59:13ビンゴ
0239デフォルトの名無しさん
2009/12/07(月) 00:02:06むしろ、条件によっては使わないかもしれない変数を確保して初期化するコストを考えるべきでは?
0240デフォルトの名無しさん
2009/12/07(月) 00:11:21C の持つ独特の「哲学」を学ぶことは、十分に「入門」の領域に含まれると思うぞ
char a[10];
a = "foo";
0241デフォルトの名無しさん
2009/12/07(月) 00:13:570242デフォルトの名無しさん
2009/12/07(月) 00:15:130243デフォルトの名無しさん
2009/12/07(月) 00:19:39割と好きなところで変数宣言できたけどなぁ
ちょっとしたテストでmainだけで済ますときとかやってたよ
int main(arg[]){
//処理1
{int i;
・・・
}
//処理2
{int i;
・・・
}
}//end of main
とか
0244デフォルトの名無しさん
2009/12/07(月) 00:29:04そうですよね。
その気になれば、使う直前で宣言するように書くことだって可能だし、宣言しておいて直前に「初期化」すれば済む話だし。
そもそも、>>22 が int* a; まんせー、int *a; はセンスがない、ってほざいたのが、話の発端だったのです。
0245デフォルトの名無しさん
2009/12/07(月) 00:31:230246デフォルトの名無しさん
2009/12/07(月) 00:33:470247デフォルトの名無しさん
2009/12/07(月) 00:36:56そうそう、彼らは、宣言と一緒いちいち初期かも行うそうで。そんなことは、そうそう、あることじゃないし、使う直前に代入すればすむこと。
そもそも彼らは初期化と代入の区別もつかない、いや、これは、最近は区別が希薄になっていることは認めます。
0248デフォルトの名無しさん
2009/12/07(月) 00:39:170249デフォルトの名無しさん
2009/12/07(月) 00:43:29いや、for(int i = 0; ... ) の話ではなかったか。
まあ >>22 int* マンセー派にセンスがないことはよくわかりました。禿げのいうことを妄信してはいけないですね。
0250デフォルトの名無しさん
2009/12/07(月) 00:49:230251デフォルトの名無しさん
2009/12/07(月) 00:51:46そのセンスのないint* マンセー派がfor(int i=0;が絶対だって主張したってことなんだが。
0252デフォルトの名無しさん
2009/12/07(月) 00:52:580253デフォルトの名無しさん
2009/12/07(月) 01:11:41必ず初期化することにこだわる必要はないよね。
0254デフォルトの名無しさん
2009/12/07(月) 01:23:25いやいや >>22 int* マンセーは、宣言と同時に「初期化」するのが普通、って主張していたんですよ、確か。
まとめて、int a, b, c, d, x, y, z; と書くのはセンスがないそうで。
だいたい彼らは初期化と代入の区別もついていないようですね。
0255デフォルトの名無しさん
2009/12/07(月) 01:26:35逆だ逆
0256デフォルトの名無しさん
2009/12/07(月) 01:30:23話を理解してない馬鹿
0257デフォルトの名無しさん
2009/12/07(月) 01:42:04え? int* a; のほうがセンスがあるのですか?信じられないなあ。
>>256
ご説明いただきましょうか。
0258デフォルトの名無しさん
2009/12/07(月) 01:47:44話を理解してない馬鹿
0259デフォルトの名無しさん
2009/12/07(月) 01:49:310260デフォルトの名無しさん
2009/12/07(月) 02:08:42説明できないダボ
0261デフォルトの名無しさん
2009/12/07(月) 02:16:530262デフォルトの名無しさん
2009/12/07(月) 02:17:440263デフォルトの名無しさん
2009/12/07(月) 02:21:49個人的に気に入らないってだけ?
0264デフォルトの名無しさん
2009/12/07(月) 02:27:58別にダメってわけじゃない。許されてるんだから使いたければ使うよろし。
ただし、厳密には「iniへのポインタ型」ではなく「int型へのポインタ」である。
型 変数名
という宣言の文法に倣えばint* aはおかしいってのを理解できてれば。
0265デフォルトの名無しさん
2009/12/07(月) 02:33:11int *a, *b;
という意味を表現したいにもかかわらず、
int* a, b;
とかいてしまった、
ということがなければ、べつにどっちでもいいんです。わかっておれば。
ただし、>>22, >>37 のような言い分はかなりおかしい。
0266デフォルトの名無しさん
2009/12/07(月) 02:37:560267デフォルトの名無しさん
2009/12/07(月) 02:42:46みたいな中途半端な仕様はどうも好きになれない。
0268デフォルトの名無しさん
2009/12/07(月) 02:52:18甘いお菓子しか食べられないお子様は黙ってろw
0269デフォルトの名無しさん
2009/12/07(月) 03:05:070270デフォルトの名無しさん
2009/12/07(月) 03:12:57int *func(void);
0271デフォルトの名無しさん
2009/12/07(月) 04:51:560272デフォルトの名無しさん
2009/12/07(月) 05:32:20その上でみんなはどう?って質問なのに
あれはカスこれはハイセンスとか言って煽っちゃう低脳
0273デフォルトの名無しさん
2009/12/07(月) 07:39:45考え方自体がおかしいんだよC的には。
文法がコーディング既約でそれ以上の既約は無い。
要するに、意味深な記号が多用されるから、括弧を付けて、
どれがどれにかかってるのかわかるように書いたほうがいいぞ
という話だろ
int* func(void)
という目糞な書き方よりか
int *func(void)のほうが鼻糞だが
int (*func)(void)のほうが「正しい」
え?コンパイル通らないって?
それはそのコンパイラ制作者がタコなんだよ
0274デフォルトの名無しさん
2009/12/07(月) 07:39:52自己紹介乙
0275デフォルトの名無しさん
2009/12/07(月) 07:44:060276デフォルトの名無しさん
2009/12/07(月) 09:05:580277デフォルトの名無しさん
2009/12/07(月) 09:11:570278デフォルトの名無しさん
2009/12/07(月) 09:14:250279デフォルトの名無しさん
2009/12/07(月) 09:19:240280デフォルトの名無しさん
2009/12/07(月) 10:52:30俺は逆に
「*をつけた変数の値をアドレスとしてメモリを参照する」と解釈してから
割とスムーズ。
・自分の解答を、どのように修正すればよいか?
・部品ごと? に分けて作るやり方でよいか?
・↑の考え方はオブジェクト指向?
<以下本文>
今、苦Cとcodepadにて勉強中のものでポインタの所で四苦八苦して飽き始めたため、
他サイトにて練習問題で遊んでいます。
今、挑戦中のは
http://www.geocities.jp/rabenschwarz_ritter/Creidai/reidai2.html
で、自分が作った解答は次に書き込みます。
解答を見た瞬間、あまりの簡素さと自分の解答のごちゃごちゃっぷりに笑ってしまいました。
自分が作った解答をいろいろ修正しましたが、コンパイルできずに困っています。
どのように修正すれば、うまくコンパイルできるでしょうか?
また、自分は一つの中にごちゃごちゃとまとまっていると、頭の中が混乱してしまうので、
グローバル関数かstatic関数を使って機能ごとに分けて作ろうと考えたのですが、この作り方を
いい傾向でしょうか? それとも悪い傾向でしょうか?
またにわか知識で、この考え方がオブジェクト指向? と思ったのですがこれは正しいでしょうか?
int x,y,z;
int nyu(void);
int tas(int,int);
int main()
{
nyu(void);
hikaku(x,y);
printf("数値X=%dから数値Y=%dまで足した数値は、%dです。",x,y,z);
return 0;
}
int nyu(void)
{
do{
printf("XからYまでの整数を足した数字を表示します。\nX > Yの時は再入力します。\n開始値Xを入力してください\nX = ");
x = 10;//scanf代用
printf("%d\n",x);//scanf代用
printf("終了値Yを入力してください。\nY = ");
y = 10;//scanf代用
printf("%d\n",x);//scanf代用
} while (x < y);
tas(x,y);
return z;
}
int tas(int x,int y)
{
for (;x <= y;x++)
{
z = z + x;
}
return z;
}
http://codepad.org/A2GOlpsq
1 In function 'main':
2 Line 9: error: expected expression before 'void'
3 Line 9: error: too many arguments to function 'nyu'
0285デフォルトの名無しさん
2009/12/07(月) 11:43:151.エラーメッセージに9行目がおかしいって出てるよ。英語がわからないなら辞書を引くといいよ。
2.オブジェクト指向ではないね。「構造化プログラミング」でググるといいよ。
最初は、入力→比較→結果と作ろうとしていた名残です。
また、現在入力部をmainの中に入れることでコンパイルはできるようになりました。
一部修正したところ、何とか希望通りの結果を得ることができました。
http://codepad.org/6a4jrjyK
そのため>281の質問一番目は、どうすればコンパイルできるか? を、なぜ失敗したか?
に変更します。連レス失礼しました。
0287デフォルトの名無しさん
2009/12/07(月) 11:46:05型定義と初期化を同時に行うことが出来るというシンタックスシュガー
が無ければ、コンテクストで十分に区別出来る。
逆に言えば、型定義と初期化を同時に行うことが許可される
コンパイラの文法レベル(非常時用簡潔表現の許容)では、
禁止されるべきかもしれない。
ありがとうございます。
自分も9行目のエラーから、voidを削ってみたり(x,y)に変えたりと、にらめっこしながら
いろいろ修正してたのですが、どこが原因でエラーが起きているのかわかりませんでした。
構造化プログラミングですね。早速ググって、色々と読んでみます。
0289デフォルトの名無しさん
2009/12/07(月) 11:52:19int hoge(int x);
int (*func)(int)=hoge;
のように型定義と変数宣言と初期化を同時に行うことが出来る
文法は非常時用文法ということ?
0290デフォルトの名無しさん
2009/12/07(月) 11:55:360291デフォルトの名無しさん
2009/12/07(月) 12:52:24今ちょっとだけ見てきたけど、悪くないね。
最初に HelloWorld から始めないのも好感触。
0292デフォルトの名無しさん
2009/12/07(月) 13:47:460293デフォルトの名無しさん
2009/12/07(月) 13:58:483回抜いた
0294デフォルトの名無しさん
2009/12/07(月) 14:00:11可もなく不可もなくだな
俺のほうがもっと良い物作れる自信はある。
0295デフォルトの名無しさん
2009/12/07(月) 14:01:130296デフォルトの名無しさん
2009/12/07(月) 14:19:29若干ツンデレっぽいところが好感触
しかし偏屈そうな管理人だなw
0297デフォルトの名無しさん
2009/12/07(月) 14:36:570298デフォルトの名無しさん
2009/12/07(月) 15:44:45// deg を -180 以上 180 未満の範囲に正規化する
float deg_normalize(float deg)
{
while (deg < -180.0f) deg += 360.0f;
while (deg >= 180.0f) deg -= 360.0f;
return deg;
}
0299デフォルトの名無しさん
2009/12/07(月) 15:55:170300デフォルトの名無しさん
2009/12/07(月) 16:26:23fmod を使うと少しマシになる
0301デフォルトの名無しさん
2009/12/07(月) 16:27:33ただしdegの絶対値が大きい時の精度保証無し
0302デフォルトの名無しさん
2009/12/07(月) 16:36:27{
if(deg>0){
if(deg>180){
deg-=360;
if(deg>0) deg = deg_norm(deg);
}
}else{
deg*=-1;
deg = deg_norm(deg);
deg*=-1;
}
return deg;
}
なんという変態^p^
あれほど意味の無い再帰はやめろと
0303デフォルトの名無しさん
2009/12/07(月) 20:09:19内側のループがトリッキーに感じるのでなおしたいのですがもう少し単純明快な書き方はありませんか?
int unique(T array[], int size) {
for ( i=0; i<size; i++ )
for ( j=i; j<size; )
if ( array[j] == array[i] ) {
delete_and_shift(array, j);
size--;
} else {
j++;
}
return size;
}
0304デフォルトの名無しさん
2009/12/07(月) 20:20:42つかえよ
0305デフォルトの名無しさん
2009/12/07(月) 20:21:180306デフォルトの名無しさん
2009/12/07(月) 20:23:53逝ってよし
0307303
2009/12/07(月) 21:19:04visual studioのuniqueは下のようになっていて余計にややこしいです
というか連続しない同一要素は取り除いてくれないようなので参考になりませんでした
勉強にはなりましたが・・・
int f = 0, b;
int l = size+1;
while ( ( b = f ) != l && ++f != l )
if ( array[b] == array[f] )
{
while ( ++f != l )
if ( !( array[b] == array[f] ) )
array[++b] = array[f];
return ++b;
}
return l;
0308デフォルトの名無しさん
2009/12/07(月) 21:22:19順序を保持しなくていいなら先にソートしておくとか
0309デフォルトの名無しさん
2009/12/07(月) 21:26:030310303
2009/12/07(月) 21:39:33そうですね
良くありそうな関数だと思ったので何か見落としているんじゃないかという
気がしていたのですがソートしておくのが分かりやすい気がしてきました
>>308
使えるなら質問する必要も無かったんですが・・・
失礼しました
0311デフォルトの名無しさん
2009/12/07(月) 21:41:26順番記録しておいてソートしてユニークして、元の順番でソートすればいい。
5行でかけるだろ。
しかも安全。
0312デフォルトの名無しさん
2009/12/07(月) 21:49:330313デフォルトの名無しさん
2009/12/07(月) 22:10:18iPoneの加速とか傾きのステータスをOSSを使って自分の作ったプログラム(Cで作成)に送りたいのですが可能ですか?
ライブラリと参考サイトを教えていただきたいです。
0314デフォルトの名無しさん
2009/12/07(月) 22:27:21その辺の話題は答えられる知識を持った人がこのスレにいないので無駄です。
一応C入門スレですので^^
0315デフォルトの名無しさん
2009/12/07(月) 22:28:280316デフォルトの名無しさん
2009/12/07(月) 22:29:42俺プログラミングには超詳しいけど、SONY製品しか買わないから知らないぞ
0317デフォルトの名無しさん
2009/12/07(月) 22:31:460318デフォルトの名無しさん
2009/12/07(月) 22:36:42hoge.C
だろ。
0319デフォルトの名無しさん
2009/12/07(月) 22:37:530320デフォルトの名無しさん
2009/12/07(月) 22:37:560321313
2009/12/07(月) 22:39:43他のスレ探したほうがいいみたいですね。
C関連のスレ探してみます。
0322デフォルトの名無しさん
2009/12/07(月) 22:39:52絶対に
0323デフォルトの名無しさん
2009/12/07(月) 22:44:34そのセンサーがコントローラに繋がっている場合(それ以外ないのだが)
結果をコントローラ上のレジスタアドレスに格納する
それを参照すればよい。
この考えは、すべてにおいて同じ。
あるデバイスがある
デバイスがマイクロコントローラ制御なら、その結果を格納する場所が必ずある
それを参照する
マイコン制御じゃなかった時代は、電気的に判断していたから
回路が分からないとどうしようもなかったものだが
マイコン制御ならプログラムはどうしても必要になるので
プログラムが分かれば誰でもわかるようになっている。
ただ、どこのレジスタなのか どこに何のアドレスがアサインされているか
は、別途調べなければならない。
0324デフォルトの名無しさん
2009/12/07(月) 22:50:080xEFFFF800
0xEFFFFA00
こう割り振られていると分かったら、そこにアクセスすれば値が手に入るだけだ。
簡単だろう
傾きは、キャリブレーション位置からの傾きが値として入ることが多いので簡単だが
加速度の場合、キャリブレーション位置とかは関係がない。ある方向に動きさえすれば
元々どちら側に向いていようとも加速度が得られるからだ。
こういうのは、ちゃんとプログラマーが考慮して処理を書かないと加速度の値を得たことにならない。
単にその時間で何かの値が得られただけに過ぎなくなるので「加速」ではなくなる。
0325デフォルトの名無しさん
2009/12/07(月) 22:53:39そんなくだらない話なんていらないんです。
0326デフォルトの名無しさん
2009/12/07(月) 22:55:420327デフォルトの名無しさん
2009/12/07(月) 23:00:290328デフォルトの名無しさん
2009/12/07(月) 23:01:290329デフォルトの名無しさん
2009/12/07(月) 23:03:410330デフォルトの名無しさん
2009/12/07(月) 23:05:150331デフォルトの名無しさん
2009/12/07(月) 23:07:370332デフォルトの名無しさん
2009/12/07(月) 23:10:49そりゃお前の頭が悪いだけだ
っていうw
0333デフォルトの名無しさん
2009/12/07(月) 23:12:490334デフォルトの名無しさん
2009/12/07(月) 23:13:27iPhone内のプログラムと他のコンピュータとの通信はインターネットを介すだけ。
まあ「だけ」という一言で言えるほど単純ではないけど。
0335デフォルトの名無しさん
2009/12/07(月) 23:14:090336デフォルトの名無しさん
2009/12/07(月) 23:15:520337デフォルトの名無しさん
2009/12/07(月) 23:16:08それが俺が俺である証
0338デフォルトの名無しさん
2009/12/07(月) 23:17:540339デフォルトの名無しさん
2009/12/07(月) 23:24:18雰囲気悪くなるから、脳内でやればいいのに。
0340デフォルトの名無しさん
2009/12/07(月) 23:25:36うるさい!黙れCPP厨!ファビョーン
0341デフォルトの名無しさん
2009/12/07(月) 23:29:020342デフォルトの名無しさん
2009/12/07(月) 23:29:29C++批判していたから、その酷さについては間違いないんだろうな。
0343デフォルトの名無しさん
2009/12/07(月) 23:33:14これらはもっとも重要なハッキング用言語だというだけでなく、
それぞれプログラミングに対してまったく違ったアプローチをしているので、どれも非常に有益な勉強となるでしょう。
0344デフォルトの名無しさん
2009/12/07(月) 23:34:470345デフォルトの名無しさん
2009/12/07(月) 23:35:02おい!おまえの脳内止まってるぞ!
0346デフォルトの名無しさん
2009/12/07(月) 23:37:39>5つすべて
すべて・・・ね
0347デフォルトの名無しさん
2009/12/07(月) 23:38:27>>304
>>318
0348デフォルトの名無しさん
2009/12/07(月) 23:41:480349デフォルトの名無しさん
2009/12/07(月) 23:43:49Python, Java, C, Perl, LISP
5つ全ておkです(^^
0350デフォルトの名無しさん
2009/12/07(月) 23:49:190351デフォルトの名無しさん
2009/12/07(月) 23:53:32やっぱり妄想癖があるんだね、cpp厨は...
0352デフォルトの名無しさん
2009/12/07(月) 23:55:290353デフォルトの名無しさん
2009/12/07(月) 23:57:320354デフォルトの名無しさん
2009/12/08(火) 00:00:57"Cpp厨"見るとCプリプロセッサ厨に見えるから
Cxx厨かC++厨にしてくれない
ほんとこのスレは言語以外の話が多いな
0355デフォルトの名無しさん
2009/12/08(火) 00:03:450356デフォルトの名無しさん
2009/12/08(火) 00:14:23与太話くらいしかすることねーべ
0357デフォルトの名無しさん
2009/12/08(火) 00:16:010358デフォルトの名無しさん
2009/12/08(火) 00:17:550359デフォルトの名無しさん
2009/12/08(火) 00:26:05以下の二つの変数fooとbarについて、それぞれの型をスカラ(intなどの基本型)と型修飾子およびポインタ宣言子を用いた表現に直してみてください
typedef int *ip_t;
typedef int const *icp_t;
const ip_t foo;
icp_t bar;
0360デフォルトの名無しさん
2009/12/08(火) 00:28:260361デフォルトの名無しさん
2009/12/08(火) 00:34:05マホステ const* bar;
0362デフォルトの名無しさん
2009/12/08(火) 00:58:33cppっぽくてもCで答えるくらいの力量はないのか?
0363デフォルトの名無しさん
2009/12/08(火) 07:46:090364デフォルトの名無しさん
2009/12/08(火) 09:46:45ループ対象の変数をいじるのは何かとバグになりやすい
空の配列を作って、重複しないものをそれに追加するアルゴリズムの方がいいと思う
0365デフォルトの名無しさん
2009/12/08(火) 11:47:22単純かどうかわからないが、こういう書き方はどうよ?
int unique(T array[], int size) {
int i, j, k;
for(i=j=1; i<size; i++) {
for(k=0; k<j; k++) if(array[j]==array[k]) break;
if(k==j) array[j++] = array[i];
}
return j;
}
0366デフォルトの名無しさん
2009/12/08(火) 11:50:13じゃなくて
for(k=0; k<j; k++) if(array[i]==array[k]) break;
だった
0367デフォルトの名無しさん
2009/12/08(火) 13:20:28年(西暦)と月を入力すると
その月のカレンダーを出力するプログラムを作成せよ.
<出力例>
年(西暦)を入力してください : 2010[Enter]
月を入力してください : 1[Enter]
2010年 1月
日 月 火 水 木 金 土
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
どうやったらいいーか分かる人いますか?
0368デフォルトの名無しさん
2009/12/08(火) 13:27:15ちょっと待っててくれ。>>365が答えるからさ。
0369デフォルトの名無しさん
2009/12/08(火) 13:27:490370デフォルトの名無しさん
2009/12/08(火) 13:46:490371デフォルトの名無しさん
2009/12/08(火) 14:35:48main() {
int year, month;
printf("年(西暦)を入力してください : ");
scanf("%d", &year);
printf("月を入力してください : ");
scanf("%d", &month);
printf("2010年 1月");
printf("日 月 火 水 木 金 土");
printf("1 2");
printf("3 4 5 6 7 8 9");
printf("10 11 12 13 14 15 16");
printf("17 18 19 20 21 22 23");
printf("24 25 26 27 28 29 30");
printf("31");
}
0372通りすがりの草
2009/12/08(火) 14:47:05int main(int argc,char *argv[])
{
float year, month, day = 1, buf1, buf2;
int weekf, month2, year2, key = 0, buf3, daymax;
if(argc != 3){
printf("Usage: cal yyyy mm\n");
return(0);
}
year = atoi(argv[1]);
month = atoi(argv[2]);
if(month < 4){
year2 = year--;
month = month + 13;
month2 = month - 13;
}else{
month2 = month++;
year2 = year;
}
0373通りすがりの草
2009/12/08(火) 14:47:49buf2 = (((int)buf1 / 7) * 7);
weekf = buf1 - buf2 + 1;
printf("西暦%d年%d月\n月 火 水 木 金 土 日\n",year2,month2);
for(key = 1; key < weekf; ++key){
printf(" ");
}
if(month2 == 1 || month2 == 3 || month2 == 5 || month2 == 7 || month2 == 8 || month2 == 10 || month2 == 12){
daymax = 31;
}else if(month2 == 4 || month2 == 6 || month2 == 9 || month2 == 11){
daymax = 30;
}else{
daymax = 28;
}
0374通りすがりの草
2009/12/08(火) 14:49:17printf("%2d ",buf3);
if(0 == weekf % 7){
printf("\n");
}
}
if(month2 == 2 && (((0 == year2 % 4)&& (0 != year2 % 100)) || (0 == year2 % 400))){
printf("29 ");
}
return(1);
}
0375通りすがりの草
2009/12/08(火) 14:50:30テラナツカシス。
0376デフォルトの名無しさん
2009/12/08(火) 15:14:000377デフォルトの名無しさん
2009/12/08(火) 15:18:35すげー
三日目でそこまで書けるようになるのか
自分だったら
一日目 hello world
二日目 変数
三日目 scanf
くらいまでだわ
0378通りすがりの草
2009/12/08(火) 15:23:51ベンチャーという名のブラック会社なもので…。
クビがかかると人間強いな。
カーニハン参考にして勉強したんだが、訳がゴミ過ぎて
訳者に切れそうになった覚えがある。
>>376
intを無理やりfloatにキャストして小数点以下切捨てしているのです。
ttp://www.h2.dion.ne.jp/~p_soul/jchieyoubi.htm
これ分かりやすいよ。
0379デフォルトの名無しさん
2009/12/08(火) 15:26:53バイブルとかバカじゃねーのwwww信者きめぇ
0380通りすがりの草
2009/12/08(火) 15:34:11もったいないなぁ。
0381通りすがりの草
2009/12/08(火) 15:35:05石田晴久が分かりにくくしてるんだよな…。
もったいない。
0382通りすがりの草
2009/12/08(火) 15:36:100383デフォルトの名無しさん
2009/12/08(火) 15:45:39month * 30.6 なんてそんな恐ろしい・・・
0384デフォルトの名無しさん
2009/12/08(火) 16:12:02閏秒の積み上げとか考えると頭いたいのう
0385通りすがりの草
2009/12/08(火) 16:39:000386デフォルトの名無しさん
2009/12/08(火) 17:48:32答えはわかってんだから、結果が正しいかどうか確認してから組み込めばいいんじゃね?
え?400年後に誤差が出た?そんなんサポート外に決まってんだろ。
>>384
閏秒はいつ入るか予測できないので事前に対応するのは不可能。
0387デフォルトの名無しさん
2009/12/08(火) 17:52:440388デフォルトの名無しさん
2009/12/08(火) 18:05:00おぬしの発想は単純だのう
0389デフォルトの名無しさん
2009/12/08(火) 18:07:21あれ、NTPしかねえもん
リアルタイムクロックを見ていない。
0390デフォルトの名無しさん
2009/12/08(火) 18:15:000391デフォルトの名無しさん
2009/12/08(火) 18:16:050392デフォルトの名無しさん
2009/12/08(火) 18:16:05意味がよく分からないけど printf
0393デフォルトの名無しさん
2009/12/08(火) 18:19:290394デフォルトの名無しさん
2009/12/08(火) 18:26:25time.hをインクルードしてasctimeに丸投げ
0395デフォルトの名無しさん
2009/12/08(火) 18:28:41fwrite
0396デフォルトの名無しさん
2009/12/08(火) 18:43:26そんな不思議な printf は知らんぞ
0397デフォルトの名無しさん
2009/12/08(火) 18:48:380398デフォルトの名無しさん
2009/12/08(火) 18:50:320399デフォルトの名無しさん
2009/12/08(火) 18:52:290400デフォルトの名無しさん
2009/12/08(火) 18:53:050401デフォルトの名無しさん
2009/12/08(火) 18:56:060402デフォルトの名無しさん
2009/12/08(火) 19:00:080403デフォルトの名無しさん
2009/12/08(火) 19:06:53FILE は構造体だろ。
0404デフォルトの名無しさん
2009/12/08(火) 19:10:11そういうことじゃない。
0405デフォルトの名無しさん
2009/12/08(火) 19:14:520406デフォルトの名無しさん
2009/12/08(火) 19:16:030407デフォルトの名無しさん
2009/12/08(火) 19:20:41のようなイメージで2バイト文字を文字コードから表示させたいのですがどうしたらよいでしょうか?
あとWindows標準でついている文字コード表でみると"あ"は82A0とかかれてるのですがどっちが正しいのでしょうか?
0408デフォルトの名無しさん
2009/12/08(火) 19:21:53食うメモリの量ばっかり増えて
やれることは独立して宣言した変数と同じなのではないですか。
0409デフォルトの名無しさん
2009/12/08(火) 20:01:21#include <locale.h>
int main(void){
setlocale(LC_ALL,"");
int c;
initscr();
noecho();
raw();
keypad(stdscr,TRUE);
while((c=getch())!='\x18'){
switch (c){
case KEY_UP:
addstr("[↑]");
break;
case KEY_ENTER:
addstr("Enter");
break;
case KEY_DC:
addstr("DEL");
break;
}
refresh();
}
endwin();
return 0;
}
Ubuntuのgccで、こういうものを作って入力されたキーを取得しようとしてるのですが
Enterだけ反応しません。DELとカーソルの上とか、ここでは省きましたが他のファンクションは
うまくキャッチできるのですが。
どうやったらEnterを取得できるんでしょうか?
0410デフォルトの名無しさん
2009/12/08(火) 20:02:11理解できなかったのですね。よくわかります。
0411デフォルトの名無しさん
2009/12/08(火) 20:08:21#include <unistd.h>
#include <termios.h>
static struct termios t_orig;
char Get_Key(){
char c;
begin_getch();
c = getch();
return(c);
}
int begin_getch() {
struct termios t;
tcgetattr( 0, &t );
t_orig = t;
t.c_lflag &= ~(ICANON|ECHO);
t.c_cc[VMIN] = 1;
tcsetattr( 0, TCSADRAIN, &t );
}
int getch() {
char c;
int status = read( 0, &c, sizeof(char) );
return status ? c : (char)status;
}
getchの返り値をunsigned charにキャストして、
printfかなんかで16進数に印字して一文字づつ見てみるといいかも
Ubuntuでできるかは知らないけど。
0412デフォルトの名無しさん
2009/12/08(火) 20:09:39データ構造を意識するようになれば、おのずと構造体の意義もわかるようになるでしょう。
0413デフォルトの名無しさん
2009/12/08(火) 20:23:38こんなんでどう?
char s[] = {'\x82', '\xa0', '\0'};
printf("%s", s);
0414デフォルトの名無しさん
2009/12/08(火) 20:39:44とりあえず、'\0x0a'で捕まえることができました。
keypadを使ったKEY_ENTERは、諦めます。
ありがとう。
0415デフォルトの名無しさん
2009/12/08(火) 21:00:40お、できますね。
なぜそのやりかたで文字コードとして認識されるんでしょうか?
0416デフォルトの名無しさん
2009/12/08(火) 21:14:17charはintとかと同じ数値型。その値として文字コードを格納することで文字や文字列として振る舞う。
だから、直接ああいう風に文字コードを数値としてcharへ与えることも可能。
0417デフォルトの名無しさん
2009/12/08(火) 21:16:16C=A/(B*B);
だと、なんか変なんですが。
0418デフォルトの名無しさん
2009/12/08(火) 21:17:30どう変なのでしょうか?
0419デフォルトの名無しさん
2009/12/08(火) 21:17:540420417
2009/12/08(火) 21:20:30main()
{
float tall,weight,standard,bmi;
printf("身長(m)と体重(Kg)の入力:");
scanf("%f %f",&tall,&weight);
standard=tall*tall*22;
bmi=weight/(B*B);
printf("身長%.1fメートル、体重%.1fの時\n",tall,weight);
printf("標準体重は%4.1fキログラム、BMI指数は%4.1fです。\n",standard,bmi);
if(bmi>=25)
printf("太り過ぎ\n");
else if(25>bmi>=18.5)
printf("標準体重\n");
else if(bmi<18.5)
printf("低体重\n");
}
全ての値に対して、0が帰ってきますw
0421417
2009/12/08(火) 21:22:370422デフォルトの名無しさん
2009/12/08(火) 21:26:220423デフォルトの名無しさん
2009/12/08(火) 21:30:090424デフォルトの名無しさん
2009/12/08(火) 21:30:26で、>>417はこれ、誰かのソースをコピーしたのかな?
動作について理解してる?
0425デフォルトの名無しさん
2009/12/08(火) 21:36:57Enter と Return は別なんじゃねーの?
0426417
2009/12/08(火) 21:37:31コンパイルしなおしたら動きました。
何でだろう・・・?
0427デフォルトの名無しさん
2009/12/08(火) 21:38:180428デフォルトの名無しさん
2009/12/08(火) 21:52:31まあDirectXはfloat使うみたいだけど・・・
0429デフォルトの名無しさん
2009/12/08(火) 21:55:05ゴミ。
0430デフォルトの名無しさん
2009/12/08(火) 21:58:02精度を犠牲にしてでもよほど大量かつ高速に処理しなければならないときにfloat。
SIMD命令やGPUで一気に処理できるし、必要なメモリ量が減ることも高速化に繋がることがある。
0431デフォルトの名無しさん
2009/12/08(火) 22:11:070432デフォルトの名無しさん
2009/12/08(火) 22:18:38DBからひっぱってきたBigDecimalを文字列に変換して、さらにfloatに
変換して比較とかしててフいた。
0433デフォルトの名無しさん
2009/12/08(火) 22:46:27VC++とBCCではどちらの方がとっつきやすいですか?
0434デフォルトの名無しさん
2009/12/08(火) 22:50:240435デフォルトの名無しさん
2009/12/08(火) 22:50:55どちらにしろVC++をやる羽目になるからなあ
0436デフォルトの名無しさん
2009/12/08(火) 22:56:57ということは
while(1){
int var[1024];
・・・
}
と書いた場合
while(1){
スタックにint[1024]を確保
・・・
開放
}
ということになって確保開放のコストが結構かさむと思うんですが、どうなんでしょうか?
0437デフォルトの名無しさん
2009/12/08(火) 23:00:040438デフォルトの名無しさん
2009/12/08(火) 23:00:05スタック領域の確保解放はレジスタを一つ書き換えるだけだから初期化がなければ超高速
0439デフォルトの名無しさん
2009/12/08(火) 23:02:53ブロックの中で宣言してても、たいていの処理系は
関数に入ったタイミングで確保してるから、あんまり関係ない。
0440デフォルトの名無しさん
2009/12/08(火) 23:04:14毎回、OSに問い合わせるのがヒープ。
ヒープでやっても自分で管理すれば、スタックと同速程度。
解放をしないってこと。
0441デフォルトの名無しさん
2009/12/08(火) 23:06:441M-5Mくらいの確保したら落ちたり、失敗する。
多くはとれないから、時間も掛からない。
0442デフォルトの名無しさん
2009/12/08(火) 23:12:29コンパイラの環境依存としかいいようがないが、関数に入ると同時に
そのブロックのスコープ内の領域までついでに確保してしまう処理系もある
その場合はコストゼロ
0443デフォルトの名無しさん
2009/12/08(火) 23:16:01伸ばしたり縮めたりする処理系なんて無いのでは?
そんなこと調べたことないけど。
0444デフォルトの名無しさん
2009/12/08(火) 23:23:37関数内ブロックの自動変数は単にスコープの違いだけで、
変数の寿命は関数の先頭に書いたのと変わらないだろ。
わざわざ途中でスタックポインタいじったりしないだろ。
レジスタに割り当てるにしても、最適化で同じになるだろ。
0445デフォルトの名無しさん
2009/12/08(火) 23:24:59メモリ管理には、「その確保したメモリはどこにあるのか」ということがまず絶対に必要になる。
つまりMr.mallocはポインタに入れなければならないということ。
ハンドパワーで何とかなるもんじゃない。
うっうっうっううー。
0446デフォルトの名無しさん
2009/12/08(火) 23:29:38メモリを確保したものをセクションとして保存
セクションはあらかじめ大きさを決めておく
スタックポインタを進める
内容保存
スタックポインタを進める
内容保存
・
・
・
これやってりゃいいだけだし
取り出すときは目的位置から減らしてMOVEしていけばいいだけ
まったく分かりやすい。
この点、逆にCのほうが分かりにくい。
0447デフォルトの名無しさん
2009/12/09(水) 00:57:09πはどの様に定義したらよいのでしょうか?
double a,π=3.14159;
これで動くことは確認したのですが、わざわざ数値を与えてやらなくても、
「π」として定義して処理する方法があるような気がします。
0448デフォルトの名無しさん
2009/12/09(水) 01:00:530449デフォルトの名無しさん
2009/12/09(水) 01:02:560450デフォルトの名無しさん
2009/12/09(水) 01:04:360451デフォルトの名無しさん
2009/12/09(水) 01:04:41いっぱい出しゃいいって
0452デフォルトの名無しさん
2009/12/09(水) 01:05:220453デフォルトの名無しさん
2009/12/09(水) 01:11:51気にしないのならググって分かる限りの桁を
0454デフォルトの名無しさん
2009/12/09(水) 01:12:170455デフォルトの名無しさん
2009/12/09(水) 01:23:000456デフォルトの名無しさん
2009/12/09(水) 01:27:310457デフォルトの名無しさん
2009/12/09(水) 01:35:270458デフォルトの名無しさん
2009/12/09(水) 01:36:30int data[100];
int matrix(int x, int y) {
return data[x+y*10];
}
0459デフォルトの名無しさん
2009/12/09(水) 01:43:14どのように書けばいいのでしょう
0460デフォルトの名無しさん
2009/12/09(水) 01:43:390461デフォルトの名無しさん
2009/12/09(水) 01:45:23dekiruyo
0462デフォルトの名無しさん
2009/12/09(水) 01:46:01出展付きでお願いします
0463デフォルトの名無しさん
2009/12/09(水) 01:47:490464デフォルトの名無しさん
2009/12/09(水) 01:48:140465デフォルトの名無しさん
2009/12/09(水) 01:48:570466デフォルトの名無しさん
2009/12/09(水) 01:49:400467デフォルトの名無しさん
2009/12/09(水) 01:51:530468デフォルトの名無しさん
2009/12/09(水) 01:52:54このままでは当然エラーだよねって答えが返ってくると思ってました。
それと
>>458
はリロードし忘れで見てませんでした。失礼しました。
0469デフォルトの名無しさん
2009/12/09(水) 01:55:44~~~~~~~~~~~~~~~~~~~~~~~
0470デフォルトの名無しさん
2009/12/09(水) 01:56:11#define mat(a,b) data[a+b*10]
に直しておけ
0471デフォルトの名無しさん
2009/12/09(水) 01:57:450472デフォルトの名無しさん
2009/12/09(水) 02:06:270473デフォルトの名無しさん
2009/12/09(水) 02:09:100474デフォルトの名無しさん
2009/12/09(水) 02:16:23使い方によっては誤った結果になるものを五十歩百歩とかw
0475デフォルトの名無しさん
2009/12/09(水) 02:18:420476デフォルトの名無しさん
2009/12/09(水) 02:19:45int data[100];
((int [][10])&data)[x][y];
0477デフォルトの名無しさん
2009/12/09(水) 02:20:39こうすりゃあええんだろ
0478デフォルトの名無しさん
2009/12/09(水) 02:23:280479デフォルトの名無しさん
2009/12/09(水) 02:25:320480デフォルトの名無しさん
2009/12/09(水) 02:26:250481デフォルトの名無しさん
2009/12/09(水) 02:27:08コンパイラは何をお使いですか?
0482デフォルトの名無しさん
2009/12/09(水) 02:28:130483デフォルトの名無しさん
2009/12/09(水) 02:30:16嘘情報を初心者に与えるんじゃないよw
0484デフォルトの名無しさん
2009/12/09(水) 02:33:280485デフォルトの名無しさん
2009/12/09(水) 02:37:250486デフォルトの名無しさん
2009/12/09(水) 02:38:170487デフォルトの名無しさん
2009/12/09(水) 09:15:260488デフォルトの名無しさん
2009/12/09(水) 09:42:25というか何も考えずに質問するな
0489デフォルトの名無しさん
2009/12/09(水) 10:56:04ぱっと見では、配列(非スカラな複合型)にキャストしているから無理そうなんだけど
ああ、C99では、なんかあった気もするなぁ、いや、配列はさすがに無理だろ
0490デフォルトの名無しさん
2009/12/09(水) 11:07:190491デフォルトの名無しさん
2009/12/09(水) 11:11:030492デフォルトの名無しさん
2009/12/09(水) 11:47:48君と同じ
0493デフォルトの名無しさん
2009/12/09(水) 11:56:342次元配列を関数に渡すときに使わないか?
0494デフォルトの名無しさん
2009/12/09(水) 12:19:39使わんなぁ
2次元配列って何、おいしいの
配列の配列でいいよね
関数の仮引数で使われるもっとも内側のブラケット(例えば、foo_t bar(baz_t [][n_1][n_2][n_3]...[n_15], ...)では、[]のこと)は、ポインタ宣言子と等価である
このことは、配列がポインタに成り下がることから容易に想像できる
基本的にキャストのオペランドはスカラでないといけないので、オペレータが非スカラな複合型へのキャストであってはならない
0495デフォルトの名無しさん
2009/12/09(水) 12:25:240496デフォルトの名無しさん
2009/12/09(水) 12:34:06(int*)a[1]という表現は正しい?
0497デフォルトの名無しさん
2009/12/09(水) 15:11:160498デフォルトの名無しさん
2009/12/09(水) 15:13:140499デフォルトの名無しさん
2009/12/09(水) 15:26:260500デフォルトの名無しさん
2009/12/09(水) 15:29:19C言語に不可能は無い
0501デフォルトの名無しさん
2009/12/09(水) 15:29:42「入力された2つの数値の和を計算して表示する」
的な簡単な課題にしときゃあええんや
0503デフォルトの名無しさん
2009/12/09(水) 15:36:450504デフォルトの名無しさん
2009/12/09(水) 15:36:55プレイヤーからどこに○、×を書くのか入力してもらって、
それから○のところに○を表示して、×のところに×を表示すればいいと思います。
0505デフォルトの名無しさん
2009/12/09(水) 15:38:120506デフォルトの名無しさん
2009/12/09(水) 15:39:440507デフォルトの名無しさん
2009/12/09(水) 15:54:090508デフォルトの名無しさん
2009/12/09(水) 15:55:070からつくれるほど才能ないので問題形式で教えてください
>>505
まぁ予想ですが…
どうせならいいものを作りたいですし
>>506
去年は〇×ゲームを作った人がいたらしいです
0509デフォルトの名無しさん
2009/12/09(水) 15:58:59ゲームを作りたいんです!
0510デフォルトの名無しさん
2009/12/09(水) 15:59:00[0][0]〜[2][2]
whileで無限ループで全部埋まるか勝負かつくまで繰り返す
おわり
0511デフォルトの名無しさん
2009/12/09(水) 16:02:10問題「○×ゲームを作りなさい」
0512デフォルトの名無しさん
2009/12/09(水) 16:05:550513デフォルトの名無しさん
2009/12/09(水) 16:15:01そりゃ作れないだろう、としか答えられん。
0514デフォルトの名無しさん
2009/12/09(水) 16:15:26スレタイ
0515デフォルトの名無しさん
2009/12/09(水) 16:28:05自分の立場わきまえろよ無能
0516デフォルトの名無しさん
2009/12/09(水) 16:33:16ゲームの操作は全てPCに繋いだゲームパッドから行う
○は赤、×は青でえんぴつで描いたようなアニメーションで表現する
勝利するとファンファーレが鳴るようにする
プレイごとに先手後手がいれかわる
勝敗記録を保存しておく
対戦するコンピュータの強さは10段階
0517デフォルトの名無しさん
2009/12/09(水) 16:33:16ゲームって面白いの。
ポケモンしかやったことねー
0518デフォルトの名無しさん
2009/12/09(水) 16:35:42とか作ってもつまらないからじゃね。
0519デフォルトの名無しさん
2009/12/09(水) 16:37:030520デフォルトの名無しさん
2009/12/09(水) 16:49:39HTTPサーバとか、多分マルバツゲームよりは面白いぞ。
0521デフォルトの名無しさん
2009/12/09(水) 17:08:22それまでできなかったことが、できるようになる
能力の開花そのものを楽しんでいた
偶然にも俺の世代では当時のトレンドにプログラミングがあったというだけ
周りの大人にできないことをやるオリジナリティを今求めると別なものかも知れない
0522506
2009/12/09(水) 17:17:07あなたが学校でどんなレベルのことを学んだのか分からないとアドバイスのしようもありません
学校で学んだ範囲外のことをプログラムするとなると
あなたがプログラムの成績が非常に優れているでもない限り
必ず先生から疑われてしまいますよ
その○×ゲームを作った方はきっとプログラムに精通している方だったのでしょう
提出点を気にするあなたが無理をする意味は無いと私は思いますよ
ちなみに私が以前作った○×ゲームは約13000行になるくらい大きなものになりました
課題にゲームは不向きだと思います
0523デフォルトの名無しさん
2009/12/09(水) 17:20:070524デフォルトの名無しさん
2009/12/09(水) 17:20:490525デフォルトの名無しさん
2009/12/09(水) 17:39:260526デフォルトの名無しさん
2009/12/09(水) 18:02:070527デフォルトの名無しさん
2009/12/09(水) 18:05:33CUIなら100行いないだろ。
0528デフォルトの名無しさん
2009/12/09(水) 18:08:02逆ポーランド記法で電卓ってのも面白そうだな。
0529499
2009/12/09(水) 18:22:01じゃあ何すりゃいいんだ?orz
0530デフォルトの名無しさん
2009/12/09(水) 18:25:25・因数分解
・素因数分解
・超ひも理論
0531デフォルトの名無しさん
2009/12/09(水) 18:25:360532デフォルトの名無しさん
2009/12/09(水) 18:27:56PCが最低引き分けに持ち込むというならそれなりに難しいが、
あいてる所に適当に打つというなら入門レベルでOK。
たぶん、UIを作るところが一番大変。
0533デフォルトの名無しさん
2009/12/09(水) 18:28:380534デフォルトの名無しさん
2009/12/09(水) 18:37:460535デフォルトの名無しさん
2009/12/09(水) 18:38:53不敗のcpu作っても絶対そんなにいかないわ
0536デフォルトの名無しさん
2009/12/09(水) 18:46:55んで敵を倒すとマイドキュメントのファイルが消える仕様
0537デフォルトの名無しさん
2009/12/09(水) 18:53:55残念なことにあれってMac専用なんだよな
0538デフォルトの名無しさん
2009/12/09(水) 18:54:460539デフォルトの名無しさん
2009/12/09(水) 18:56:11unsigned char uc_hensu;
memcpy(&uint_hensu,&kouzoutai.uc_hensu,sizeof(uint_hensu));
memcpyをしようとしコンパイルしたところ、エラーがでてしまいました。
原因は何でしょうか?
uc.hensu自体は構造体できっております。
unsigned int と unsigned charでmemcpyしようとするとエラーがでてしまいます。
unsigned char 同士でするとエラーがでません。
何か変数はこのままのサイズでうまく解決できないでしょうか?
0540デフォルトの名無しさん
2009/12/09(水) 18:58:54#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define UNKO(_arg) ((_arg==0) ? " " : (_arg==1) ? "@" : "X")
int unko[3][3]={0}; int gyou, retu;
void print(void) {
printf("%s|%s|%s\n", UNKO(unko[0][0]), UNKO(unko[0][1]), UNKO(unko[0][2])); printf("-+-+-\n");
printf("%s|%s|%s\n", UNKO(unko[1][0]), UNKO(unko[1][1]), UNKO(unko[1][2])); printf("-+-+-\n");
printf("%s|%s|%s\n", UNKO(unko[2][0]), UNKO(unko[2][1]), UNKO(unko[2][2])); }
void select(void) {
do{ puts("select gyou"); gyou = getch(); }while((gyou < '0') || ('2' < gyou));
do{ puts("select retu"); retu = getch(); }while((retu < '0') || ('2' < retu)); }
void select_enemy(void) { for(int i=0; i<3; i++){ for(int j=0; j<3; j++){ if(unko[i][j] == 0){ unko[i][j] = 2; return; } } } }
bool judge(int flag) {
if(unko[0][0]*unko[0][1]*unko[0][2] == flag){ return true; }
if(unko[1][0]*unko[1][1]*unko[1][2] == flag){ return true; }
if(unko[2][0]*unko[2][1]*unko[2][2] == flag){ return true; }
if(unko[0][0]*unko[1][0]*unko[2][0] == flag){ return true; }
if(unko[0][1]*unko[1][1]*unko[2][1] == flag){ return true; }
if(unko[0][2]*unko[1][2]*unko[2][2] == flag){ return true; }
if(unko[0][0]*unko[1][1]*unko[2][2] == flag){ return true; }
if(unko[0][2]*unko[1][1]*unko[2][0] == flag){ return true; }
return false; }
void redraw(void) { system("cls"); print(); }
int main(void) {
while(1){
do{ redraw(); select(); }while(unko[gyou-'0'][retu-'0']!=0);
unko[gyou-'0'][retu-'0'] = 1; if(judge(1)){ redraw(); puts("kati"); return 0; }
select_enemy(); if(judge(8)){ redraw(); puts("make"); return 0; } }
}
0541デフォルトの名無しさん
2009/12/09(水) 19:02:03curses.hまたはconio.hを使って何かキーが押されるたびにダイレクトに全描画する。
あとはまかせた。
0542デフォルトの名無しさん
2009/12/09(水) 19:02:31kouzoutai、uc、hensuがなにかの記載がない。
どのようなエラーがでたかも書くように。
0543デフォルトの名無しさん
2009/12/09(水) 19:03:080544デフォルトの名無しさん
2009/12/09(水) 19:05:250545デフォルトの名無しさん
2009/12/09(水) 19:06:40メーカに問い合わせればいい
わかったら、>>543はもう来ないでね
0546デフォルトの名無しさん
2009/12/09(水) 19:08:220547デフォルトの名無しさん
2009/12/09(水) 19:21:070548デフォルトの名無しさん
2009/12/09(水) 19:24:500549デフォルトの名無しさん
2009/12/09(水) 19:26:180550デフォルトの名無しさん
2009/12/09(水) 19:29:010551デフォルトの名無しさん
2009/12/09(水) 20:24:50カレンダー⇒ワードソート⇒ラインエディタ⇒オセロの順で
俺は作ったぞ。
0552デフォルトの名無しさん
2009/12/09(水) 20:38:08こんにちは、世界。
0553デフォルトの名無しさん
2009/12/09(水) 20:54:28http://codepad.org/oHhfTrZ2
0554デフォルトの名無しさん
2009/12/09(水) 21:30:21てけすとえでた。
0555539
2009/12/09(水) 21:32:16すいません、エラーは今すぐ思い出せないのですが
たしかu int u charのコピーの際のエラーがでてました。
正確にはコンパイルはできるけど、警告という意味でエラーがでてました。
uintもucharの変数の中は数字です。kouzoutaiの中も、uchar hensu といった
似たようなのが入ってます。
0556デフォルトの名無しさん
2009/12/09(水) 21:37:57書けないならもうやめろ
0557デフォルトの名無しさん
2009/12/09(水) 22:03:480558デフォルトの名無しさん
2009/12/09(水) 22:08:12unsigned char uc_hensu;
memcpy(&uint_hensu,&kouzoutai.uc_hensu,sizeof(uint_hensu));
memcpyをしようとしコンパイルしたところ、エラーがでてしまいました。
原因は何でしょうか?
uc.hensu自体は構造体できっております。
unsigned int と unsigned charでmemcpyしようとするとエラーがでてしまいます。
unsigned char 同士でするとエラーがでません。
何か変数はこのままのサイズでうまく解決できないでしょうか?
0559デフォルトの名無しさん
2009/12/09(水) 22:11:070560デフォルトの名無しさん
2009/12/09(水) 22:11:59やめてしまえよ!
0561デフォルトの名無しさん
2009/12/09(水) 22:13:22うざいよ
さっさとタヒねよ
0562デフォルトの名無しさん
2009/12/09(水) 22:13:220563デフォルトの名無しさん
2009/12/09(水) 22:14:020564デフォルトの名無しさん
2009/12/09(水) 22:14:20だから消えてもらいたい
ほんとタヒねよ
0565デフォルトの名無しさん
2009/12/09(水) 22:17:360566デフォルトの名無しさん
2009/12/09(水) 22:48:05<string.h>インクルードした?
0567デフォルトの名無しさん
2009/12/09(水) 22:50:16インクルードはしております
memcpy自体は成功しています
0568デフォルトの名無しさん
2009/12/09(水) 23:44:06こちらにどうぞ。http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0569デフォルトの名無しさん
2009/12/09(水) 23:58:100570デフォルトの名無しさん
2009/12/10(木) 00:08:37確保されていない領域にアクセスするのだから、何が起こってもおかしくない。
>558
エスパーして、kouzoutai.uc_hensuがunsigned charだとすれば、
memcpy(&uint_hensu,&kouzoutai.uc_hensu,sizeof(uint_hensu));
1バイト分しか確保してないのに、unsigned分(4バイトかな?)
読んでコピー仕様とするので、警告が出るだろうね。
ランタイムエラーで落ちたりするかも。
0571デフォルトの名無しさん
2009/12/10(木) 00:21:35これって普通では
0572デフォルトの名無しさん
2009/12/10(木) 00:59:04本当に教えて欲しいなら汚いままのソースとエラーメッセージをそのまま晒せ。
他人に聞かなきゃわからんようなレベルの人間が綺麗なコード書くなんて誰も思ってないから恥とか思うな。
プログラマが伸び悩む一番の要因がコレだ。どんどん他人に見せてバカにしてもらえ。絶対伸びるから。
0573デフォルトの名無しさん
2009/12/10(木) 02:00:41原因の解明、お願いいたします。
#include <stdio.h>
int main(void)
{
int a = 0;
int b = 0;
for (;;){
printf("掛け算 A * B\n\nA = ");
scanf("%d", a);
printf("\nB = ");
scanf("%d", b);
printf("\n%d * %d の結果は %d です\n", a, b, a * b);
}
return 0;
}
0574デフォルトの名無しさん
2009/12/10(木) 02:04:570575デフォルトの名無しさん
2009/12/10(木) 02:42:41それともう一つお尋ねしたいのですが、
149 * x でxに最大16777216(2^24)が入れるようにしなければならないのですが、
xが14000000を超えたあたりから答えが異常値になりました。
(149 * 15000000 では -2059967296 149 * 15000001 では -2059967147)
これをなおすには、どうしたらいいでしょうか。
0576デフォルトの名無しさん
2009/12/10(木) 02:58:44%d -> %lu
0577デフォルトの名無しさん
2009/12/10(木) 08:23:37intのサイズがいくつになるかは環境依存。
もっとも今のPC環境ならまず4になる。intのサイズが1なら問題ないと言えるかも。
それでも、ポータビリティを考えれば好くない。
0578デフォルトの名無しさん
2009/12/10(木) 08:54:140579デフォルトの名無しさん
2009/12/10(木) 09:37:55出すにはどうすればいいの?
試してみたができない
while((*p==32)||(*p==0)){++p;++i;}
0580デフォルトの名無しさん
2009/12/10(木) 09:41:050581デフォルトの名無しさん
2009/12/10(木) 09:42:560582デフォルトの名無しさん
2009/12/10(木) 10:22:48だれか作ってくれ
0583デフォルトの名無しさん
2009/12/10(木) 10:24:190584デフォルトの名無しさん
2009/12/10(木) 10:37:29>>574が作ってくれるよ。
0585デフォルトの名無しさん
2009/12/10(木) 10:39:120586デフォルトの名無しさん
2009/12/10(木) 11:16:58これをコンパイルしたいんだけどどうしたらいいのか
strcasestrはcygwinでは扱えないみたいだしunistd.hはVSでは無いし・・・
0587デフォルトの名無しさん
2009/12/10(木) 11:24:260588デフォルトの名無しさん
2009/12/10(木) 11:38:530589デフォルトの名無しさん
2009/12/10(木) 13:22:590590デフォルトの名無しさん
2009/12/10(木) 15:07:152次関数と直線の交点が2つあるとき
その交点2つでの2次関数の接線2本の交点を求めるプログラム作れ
簡単だぞ?
0591デフォルトの名無しさん
2009/12/10(木) 17:43:14数値から文字列にするみたいな
0592デフォルトの名無しさん
2009/12/10(木) 17:44:350593デフォルトの名無しさん
2009/12/10(木) 17:53:37変数に入れるんじゃない
アドレスに入れると覚えろ
だから、
内部ではアドレス操作である配列やポインタ変数に入れるときは&つけてはならない
アドレス操作でない普通の変数の場合は&をつける
0594デフォルトの名無しさん
2009/12/10(木) 18:07:200595デフォルトの名無しさん
2009/12/10(木) 18:11:59scanf はそういう関数じゃないから。
0596デフォルトの名無しさん
2009/12/10(木) 18:19:26使ってるのはアドレスだがアドレスに入れてるわけじゃないしw
0597デフォルトの名無しさん
2009/12/10(木) 18:21:33scanfも仕事選べ
0598デフォルトの名無しさん
2009/12/10(木) 18:29:05すべてのデータはメモリのアドレスに入る。
アドレスに入るからメモリコントローラはタグだのCASだのRASだの使ってアドレスを参照する。
0599デフォルトの名無しさん
2009/12/10(木) 18:33:37>アドレスに入れなきゃ
そもそもアドレスって何だか解っていないやも知れず。
>すべてのデータはメモリのアドレスに入る。
ダウト。
>アドレスに入るからメモリコントローラはタグだのCASだのRASだの使ってアドレスを参照する。
知ってる単語を精一杯並べると後が苦しいぞ。
0600デフォルトの名無しさん
2009/12/10(木) 18:33:420601デフォルトの名無しさん
2009/12/10(木) 18:42:13メモリそのものにもアドレスを判別できるようにチップが搭載されている
メモリセルだけ繋いでも動作せんのぜ
0602デフォルトの名無しさん
2009/12/10(木) 18:54:15スレ違い。語りたいならマ板に逝け。
0603デフォルトの名無しさん
2009/12/10(木) 18:58:250604デフォルトの名無しさん
2009/12/10(木) 19:16:160605デフォルトの名無しさん
2009/12/10(木) 19:20:580606デフォルトの名無しさん
2009/12/10(木) 19:21:07C言語使ってると、そういう錯覚に陥りそうになるが、実際はそうではない。
0607デフォルトの名無しさん
2009/12/10(木) 19:29:400608デフォルトの名無しさん
2009/12/10(木) 19:41:35// -PI<=rad<PIになるよう正規化する
double GetNormalizedRadian1(double rad) {
while (rad<=-PI) rad+=PI*2;
while (rad> PI) rad-=PI*2;
return rad;
}
double GetNormalizedRadian2(double rad) {
static const double PI2 = PI * 2;
double i=ceil(rad/PI2);
return fmod(rad+i*PI2, PI2);
}
上と下では結果が違うんです
GetNormalizedRadian1(-3*PI) ----> -3.141592
GetNormalizedRadian2(-3*PI) ----> 3.141592
上の関数だとループがなんかイヤだったので下の関数にしましたが、
下手に小細工するよりかは上の関数の書き方の方が良いでしょうか
0609デフォルトの名無しさん
2009/12/10(木) 20:00:30丸め誤差があるので、その辺りを考慮して書き直すべき。ループするのは論外。
そもそも、%fを使うよりも%gを使おう。ついでに言えば、精度を考慮して%.20gとでもすれば様子が掴み易い。
0610デフォルトの名無しさん
2009/12/10(木) 20:20:40if(FuxkOSX)
{
FuckingToshing += FuxkJobs;
FuckingToshing += FuxkJobs;
FuckingToshing += FuxkJobs;
FuckingToshing += FuxkJobs;
FuckingToshing += FuxkJobs;
}
っての見たんだけど
これとforなどのループを介してやるのとでは
どっちが速いの。
0611デフォルトの名無しさん
2009/12/10(木) 20:22:03ものによる
実測知る
0612デフォルトの名無しさん
2009/12/10(木) 20:28:51750CCバイクで行くのが早いか議論するようなもの
0613デフォルトの名無しさん
2009/12/10(木) 20:52:58アドレスには何も入らないだろ、アドレスが示す場所に入るんだよ。
0614デフォルトの名無しさん
2009/12/10(木) 21:05:21罰ゲーム
でででーでででー(ずどぅどぅどぅん)
東京直行
0615デフォルトの名無しさん
2009/12/10(木) 21:20:48基本的には、ループは展開した方が速い。
ループにすると、ループ回る度に終了するかどうかを判定する必要があるからね。
0616デフォルトの名無しさん
2009/12/10(木) 21:21:46そういう言葉遊びの問題じゃ無いだろ
データを入れる場所を確保してそこにアドレスという情報を与えるわけで
例えるなら
C地区の4丁目4番4号の家に手紙を届けるということは、厳密には北緯30度、東経150度の地点に手紙を届けるということで、
「C地区の4丁目4番4号」という住所は手紙を配達する人間が便宜的につけたものでしかなく、
同じ地点でも何かのきっかけで住所が指し示す場所が変わってしまうこともありえる
みたいなことを言いたいんだろ
0617デフォルトの名無しさん
2009/12/10(木) 21:24:170618デフォルトの名無しさん
2009/12/10(木) 21:25:06つまり「アドレスが指し示す場所」と「メモリ上の場所」は別概念の物だってことね
0619デフォルトの名無しさん
2009/12/10(木) 21:27:360620デフォルトの名無しさん
2009/12/10(木) 21:29:26イメージ的に「他国の侵略」が一番しっくりくる気がする
0621デフォルトの名無しさん
2009/12/10(木) 21:51:590622デフォルトの名無しさん
2009/12/10(木) 22:05:42アドレスって言うと論理アドレスしか思い浮かばんのか
そして論理アドレスだって物理への橋渡し役でしかないから
アドレスであることには変わりない
0623デフォルトの名無しさん
2009/12/10(木) 22:22:55Cのコード上で存在するデータ(変数やら関数やら)なんて
最適化で消えることすらあるのに、メモリが何だとか
いつまでもグダグダとウザい
ヨソでやれ
0624デフォルトの名無しさん
2009/12/10(木) 22:25:050625デフォルトの名無しさん
2009/12/10(木) 22:27:38バイナリコードでどういう風に動作してるのかをイメージするのは大事だよ
0626質問厨
2009/12/10(木) 22:29:020627デフォルトの名無しさん
2009/12/10(木) 22:30:460628デフォルトの名無しさん
2009/12/10(木) 22:32:29外部記憶装置または固定記憶装置
Cから見れば>>623の言うとおり何だろうと関係ない。
アドレッシングはOSの仕事だから。ただしまともなOSがない組み込みは除く。
0629質問厨
2009/12/10(木) 22:35:45ありがとうございます。
主記憶装置って情弱はハードディスクと勘違いしてるやつ多くて困りますよね。
0630デフォルトの名無しさん
2009/12/10(木) 22:36:21で、その後継であるCは「メモリ操作ができる高級言語」である必要があったから
異例とも言えるほど強力なメモリ操作(ポインタ)機能を備えている。
だからCをやる限り「メモリなんか関係ない」などと寝ボケたことはいえない。
そういうやつがオーバーフローを引き起こしてセキュリティホールを作る。
0631デフォルトの名無しさん
2009/12/10(木) 22:40:27なんかwikipediaの内容をそのまま書いただけのような書き込みですね。
0632デフォルトの名無しさん
2009/12/10(木) 22:41:36論理アドレスは必須だけど物理アドレスは全くもって不要です。
0634デフォルトの名無しさん
2009/12/10(木) 22:50:13処理系の話と言語の話の切り分けも出来ん奴は
処理系依存スレにでも引き込もっとれ
0635デフォルトの名無しさん
2009/12/10(木) 22:55:40「Cをやる」ってなんだ?w
0636デフォルトの名無しさん
2009/12/10(木) 22:55:54仕組みも分かってないのかw
0637デフォルトの名無しさん
2009/12/10(木) 22:56:38身も蓋もない言い方をすれば、犯すってこと
0638デフォルトの名無しさん
2009/12/10(木) 22:58:14意識する必要はないってことじゃないの?
0639デフォルトの名無しさん
2009/12/10(木) 22:58:49毎回同じメモリが空いてるとは限らないから
空いてるところに番号振ってどこが空いていても問題なく動くようにしよう
と、物理アドレスを変換するためだけのもの。
ハードディスクドライブに対しても同じようにどこのシリンダーやクラスタが空いてるか固定できないので
番号振って空いてるところを使えるようにしているだけ。
で、空いてるかどうかは物理アドレスを見てみないとわからない。
イコール
「物理アドレスがなければ論理アドレスが存在し得ない」
バカだろw
0640デフォルトの名無しさん
2009/12/10(木) 23:05:070641デフォルトの名無しさん
2009/12/10(木) 23:16:050642デフォルトの名無しさん
2009/12/10(木) 23:27:53なぜつけない場合よりメモリの使用量が少なくなるのかわかりません
0643デフォルトの名無しさん
2009/12/10(木) 23:28:47(笑)
0644デフォルトの名無しさん
2009/12/10(木) 23:31:18?
0645デフォルトの名無しさん
2009/12/10(木) 23:33:59stdcall は引数をすべてスタックに押し込んでから call
何もつけてなければコンパイラが好きなようにしてくれるはず
スタックにいれずにレジスタに乗せたまま call したり
0646デフォルトの名無しさん
2009/12/10(木) 23:34:07お使いのコンパイラのメーカに問い合わせてください
きっと活舌の良い方が答えてくれるでしょう
分かったらさっさとタヒんでください
0647デフォルトの名無しさん
2009/12/10(木) 23:37:54だからプログラムの容量も減らせるとサンクス
0648デフォルトの名無しさん
2009/12/10(木) 23:39:30呼び出しの後処理を呼び出され側でやるから。
何回も同じのを呼び出す場合は差が出る。
一回だけなら変わらん。
0649デフォルトの名無しさん
2009/12/10(木) 23:42:02おまえ読解できてないぞ。
その説明だとむしろ逆になる。
0650デフォルトの名無しさん
2009/12/10(木) 23:42:490651デフォルトの名無しさん
2009/12/10(木) 23:45:380652デフォルトの名無しさん
2009/12/10(木) 23:49:08!
0653デフォルトの名無しさん
2009/12/10(木) 23:49:12まぢで?
じゃあ見た本嘘かかれてるっぽいな
651のが結論?
0654デフォルトの名無しさん
2009/12/10(木) 23:51:43減らすのを目指すとしたらメモリ使用量の方だよね?
0655デフォルトの名無しさん
2009/12/11(金) 00:02:580656デフォルトの名無しさん
2009/12/11(金) 00:03:360657デフォルトの名無しさん
2009/12/11(金) 00:08:180658デフォルトの名無しさん
2009/12/11(金) 00:09:470659デフォルトの名無しさん
2009/12/11(金) 00:10:470660デフォルトの名無しさん
2009/12/11(金) 00:11:210661デフォルトの名無しさん
2009/12/11(金) 00:12:45手間取るよ
0662デフォルトの名無しさん
2009/12/11(金) 00:21:160663デフォルトの名無しさん
2009/12/11(金) 00:22:47お前がそう思うんなら(ry
0664デフォルトの名無しさん
2009/12/11(金) 00:23:230665デフォルトの名無しさん
2009/12/11(金) 00:23:450666デフォルトの名無しさん
2009/12/11(金) 00:24:060667デフォルトの名無しさん
2009/12/11(金) 00:27:11ごめんな
俺、末期だ
0668デフォルトの名無しさん
2009/12/11(金) 00:29:030669デフォルトの名無しさん
2009/12/11(金) 00:30:19○ 雑談スレで
0670デフォルトの名無しさん
2009/12/11(金) 00:31:36これってさ
初心者、初級者、入門者の区分ってどうなってるの?どういう違いがあるのか分からんわ
0671デフォルトの名無しさん
2009/12/11(金) 00:32:340672デフォルトの名無しさん
2009/12/11(金) 00:33:11このスレはこの板でも勢いがある方だから人が集まってるだけだよ
0673デフォルトの名無しさん
2009/12/11(金) 00:35:50初級者……小規模(30000行ほど)のプログラムを作成できる
入門者……使用言語のコンパイラの実装ができる
0674デフォルトの名無しさん
2009/12/11(金) 00:39:57初心者・・・学校の授業なら初めてのプログラミング授業レベル
変数とか関数とかサッパリわかんない段階から
市販の入門書終了までのレベル。基本的なことをほとんど知らない人たち
初級者・・・学校の授業なら次のステップの応用プログラミングの授業レベル
市販の入門書に書かれていることくらいはマスターしている人たち
入門書には書かれてない関数やライブラリ、アルゴリズムを学ぶ段階
入門者・・・>>1で上記の人たち以外ということで
初級者よりは知識を持っているレベル
だけどCの世界はまだまだ広い。そんな人たちの交流のスレがここ
0675デフォルトの名無しさん
2009/12/11(金) 00:40:23深い話に興味はなきゃ、お先真っ暗でしょ
今その手で打てるだけのパンチこいや
快勝と惨敗の荒波こそが人を育てる
ハナタレがいつのまにか大先生を追い詰めていく
それがこの国の原動力とでも言うべき泥流だ
0676デフォルトの名無しさん
2009/12/11(金) 00:41:49いや暑苦しいよ、修造みたいな爽やかさもない
0677デフォルトの名無しさん
2009/12/11(金) 00:42:48俺30000行とか経験無いは・・・
最高でも8000行くらいだ・・・
0678デフォルトの名無しさん
2009/12/11(金) 00:43:510679デフォルトの名無しさん
2009/12/11(金) 00:55:21入門者→準備が済んで学習を始めた段階
初心者→参考書などを学習中の段階
初級者→参考書の学習をひととおり終えていくつかの実用プログラムを組んだ段階
0680デフォルトの名無しさん
2009/12/11(金) 00:56:15それだとこのスレが(´・ω・`)ショボーンになるだろ
0681デフォルトの名無しさん
2009/12/11(金) 00:57:59おまえバカだろ
0682デフォルトの名無しさん
2009/12/11(金) 00:59:440683デフォルトの名無しさん
2009/12/11(金) 01:00:390684デフォルトの名無しさん
2009/12/11(金) 01:01:10それはどこのどんなスレでも同じ
どこのスレも知識豊富なオタクばかりでは無いからな
0685デフォルトの名無しさん
2009/12/11(金) 01:01:200686デフォルトの名無しさん
2009/12/11(金) 01:03:19C言語にはどんな環境が必要かとか
自分のPC環境でC言語使えるかとか
C言語開発にどんなソフト必要かとか
どんな入門書や専門書やサイトが使いやすいかとか
そういうのを尋ねるスレってこと?
0687デフォルトの名無しさん
2009/12/11(金) 01:04:35入門者バーカ
と言うキチガイ上級者様たち視ねよ
0688デフォルトの名無しさん
2009/12/11(金) 01:06:40節子!それ上級者ちゃう!
0689デフォルトの名無しさん
2009/12/11(金) 01:07:560690デフォルトの名無しさん
2009/12/11(金) 01:08:200691デフォルトの名無しさん
2009/12/11(金) 01:08:47相談に乗ったり
アドバイスするためだろ
入門者同士で語り合って何になるってんだよw
0692デフォルトの名無しさん
2009/12/11(金) 01:09:05学習を始めてるんだから準備は終わってるだろ
0693デフォルトの名無しさん
2009/12/11(金) 01:10:40傷の舐め合いにはなる
0694デフォルトの名無しさん
2009/12/11(金) 01:16:310695デフォルトの名無しさん
2009/12/11(金) 01:17:360696デフォルトの名無しさん
2009/12/11(金) 01:17:480697デフォルトの名無しさん
2009/12/11(金) 01:18:500698デフォルトの名無しさん
2009/12/11(金) 01:51:10ポインタの情報ごとファイルに保存するんですか?
それとも読み込んだあとにリスト構造を使うんでしょうか
0699デフォルトの名無しさん
2009/12/11(金) 01:55:460700デフォルトの名無しさん
2009/12/11(金) 02:27:27例えばリストの構造体を
struct interactive_list {
char name_kana[32];
char name_kanji[32];
char address[128];
struct interactive_list *prev;
struct interactive_list *next;
} interactive_list;
とするなら、ファイルに保存するのはname_kana、name_kanji、addressの3つだけでいい。
*prevと*nextはプログラム実行のたびに変わる可能性があるので、保存しても無意味。
0701デフォルトの名無しさん
2009/12/11(金) 02:29:33はあ?
0702デフォルトの名無しさん
2009/12/11(金) 02:49:40ん?
0703デフォルトの名無しさん
2009/12/11(金) 03:04:530704デフォルトの名無しさん
2009/12/11(金) 03:07:26途中のデータの削除後、データを追加したときの仕様をどうするかによって、難度も異なる。
0705デフォルトの名無しさん
2009/12/11(金) 03:31:13なる
>>704
課題でリスト構造といわれた場合は単方向リストでよい場合が多いと思うよ。
双方向リストの場合はそのように書かれる。
というのが俺の経験則だが、どうだろね。
0706デフォルトの名無しさん
2009/12/11(金) 03:33:27とにかく継ぎ足していけばよさそう
0707デフォルトの名無しさん
2009/12/11(金) 04:12:190708デフォルトの名無しさん
2009/12/11(金) 04:17:40無さそう
0709デフォルトの名無しさん
2009/12/11(金) 04:18:34住所録なら
名前
住所
電話番号
郵便番号
が妥当
0710デフォルトの名無しさん
2009/12/11(金) 04:22:110711デフォルトの名無しさん
2009/12/11(金) 04:26:41・ファイルへどのデータをどのように保存するのかわからない
これがききたいの?
0712デフォルトの名無しさん
2009/12/11(金) 04:30:14つまり、住所部分。
0713デフォルトの名無しさん
2009/12/11(金) 04:32:020714デフォルトの名無しさん
2009/12/11(金) 04:39:23わからない
0715デフォルトの名無しさん
2009/12/11(金) 04:40:39このスレ
0716デフォルトの名無しさん
2009/12/11(金) 04:44:25自由に色々試してみればいい
それでうまくゆかなかったらまたここへ来ればいい
もうすこし日本語整理して質問するといいよ
0717デフォルトの名無しさん
2009/12/11(金) 04:55:170718デフォルトの名無しさん
2009/12/11(金) 04:58:230719デフォルトの名無しさん
2009/12/11(金) 05:02:220720デフォルトの名無しさん
2009/12/11(金) 09:59:12あのスレ最悪だよ〜
0721デフォルトの名無しさん
2009/12/11(金) 12:10:29ソースだらけのコロッケも不味いしなw
0722デフォルトの名無しさん
2009/12/11(金) 12:12:310723デフォルトの名無しさん
2009/12/11(金) 12:46:310724デフォルトの名無しさん
2009/12/11(金) 12:48:170725デフォルトの名無しさん
2009/12/11(金) 13:10:120726デフォルトの名無しさん
2009/12/11(金) 16:22:38おまえの勝ちだよ
よかったね
0727デフォルトの名無しさん
2009/12/11(金) 17:01:02わかった(´・ω・`)
0728デフォルトの名無しさん
2009/12/11(金) 17:56:02ブフッ∵(´ω(○=(゚∀゚ )
0729デフォルトの名無しさん
2009/12/11(金) 18:24:53%g はときどき予期しない出力を出してくるので、個人的にはいやです。
0730デフォルトの名無しさん
2009/12/11(金) 18:29:33昔は PASCAL 呼び出しっていってましたよね。MS-PASCAL がそうしていたから。
リターンするときにスタックの払い戻しを呼び出され側で処理するんですね。
不定長引数がつかえないなど、仕様としてスタンダードとは思えないのですが、なんでそんな名前になっているのでしょうね。
win16/32 API で採用されているから?
0731デフォルトの名無しさん
2009/12/11(金) 18:33:56え?むしろソースをさらす人しか来ない強者のスレでは?
宿題を書く人はお客様。
0732デフォルトの名無しさん
2009/12/11(金) 18:36:17#define PASCAL _stdcall
0733デフォルトの名無しさん
2009/12/11(金) 18:37:50少なくとも x86 は呼び出された側でスタックを解放する機械語命令が用意されていて
それがスタンダード。他の言語でも大抵そうなってて、C/C++ だけが異端。
0734デフォルトの名無しさん
2009/12/11(金) 18:38:02塩分の取りすぎに注意した方がいい
0735デフォルトの名無しさん
2009/12/11(金) 18:40:330736デフォルトの名無しさん
2009/12/11(金) 18:47:290737デフォルトの名無しさん
2009/12/11(金) 18:48:160738デフォルトの名無しさん
2009/12/11(金) 18:50:020739デフォルトの名無しさん
2009/12/11(金) 18:52:340740デフォルトの名無しさん
2009/12/11(金) 18:56:09まだ?
0741デフォルトの名無しさん
2009/12/11(金) 19:26:45「自動こそ正義、指定固定は邪道!」
メモリ管理やタスク管理、スレッド管理は自動でやるのが常識!と思ってるバカがいるものだが
OSが自動でやれるからには、その管理領域を食っているのである。
となると、メモリが無駄に食われる。
ユーザーのPCには大容量メモリが載っていると、確証もないことを当てにする素人がよく陥る思考であるが
こういうラクなゆとりに流れるとロクなもんは作れない。
0742デフォルトの名無しさん
2009/12/11(金) 19:33:40それに対して罵詈雑言を持って反論したかのように振舞う。
いわゆるマッチポンプである。藁人形理論とも言われる。
0743デフォルトの名無しさん
2009/12/11(金) 21:20:030744デフォルトの名無しさん
2009/12/11(金) 21:25:30な?
0745デフォルトの名無しさん
2009/12/11(金) 21:43:030746デフォルトの名無しさん
2009/12/11(金) 21:45:210747デフォルトの名無しさん
2009/12/11(金) 22:01:110748デフォルトの名無しさん
2009/12/11(金) 22:08:480749デフォルトの名無しさん
2009/12/11(金) 22:11:520750デフォルトの名無しさん
2009/12/11(金) 22:44:36関数の宣言でこんなのを見つけました
これって、どういう意味なんですか?
0751デフォルトの名無しさん
2009/12/11(金) 22:45:080752デフォルトの名無しさん
2009/12/11(金) 22:47:35関数ポインタってわかる?
0754デフォルトの名無しさん
2009/12/11(金) 22:54:240755デフォルトの名無しさん
2009/12/11(金) 22:55:53デフォルト引数
というヒントを与えちゃうお前らツンデレだな
0757デフォルトの名無しさん
2009/12/11(金) 22:59:100758デフォルトの名無しさん
2009/12/11(金) 23:23:49○ 食べる飯の量は三人前
0759デフォルトの名無しさん
2009/12/11(金) 23:27:530760デフォルトの名無しさん
2009/12/11(金) 23:31:400761デフォルトの名無しさん
2009/12/11(金) 23:40:490762デフォルトの名無しさん
2009/12/11(金) 23:46:590763デフォルトの名無しさん
2009/12/12(土) 00:29:090764デフォルトの名無しさん
2009/12/12(土) 00:30:39探したい文字列をstrrevして、strrevした文字列を、strstrする。
0765デフォルトの名無しさん
2009/12/12(土) 00:31:36セキュアに作るにはきわめて高いスキルが必要です^^
プログラムを始める前に、オライリーの
C/C++セキュアプログラミングコックファック Vol.1-3をお勧めします。
0766デフォルトの名無しさん
2009/12/12(土) 00:33:130767デフォルトの名無しさん
2009/12/12(土) 00:37:320768デフォルトの名無しさん
2009/12/12(土) 00:38:200769デフォルトの名無しさん
2009/12/12(土) 00:39:06たとえばJavaはもっと手軽にセキュアですし、
もっと便利でセキュアなツールとか世の中にはありますにょ。^^
0770デフォルトの名無しさん
2009/12/12(土) 00:40:07http://www.oreilly.co.jp/books/4873112001/
日本語で読める数少ないセキュ本
0771デフォルトの名無しさん
2009/12/12(土) 01:01:33ふざけるなw
0772デフォルトの名無しさん
2009/12/12(土) 01:11:24Java、.NET、Flashのような VM 上で動かすことを考えなさい。
0773デフォルトの名無しさん
2009/12/12(土) 01:34:59クラスだと継承ができるし、いろいろできるから便利じゃね
0774デフォルトの名無しさん
2009/12/12(土) 01:43:52処理速度が違うとか?
0775デフォルトの名無しさん
2009/12/12(土) 01:57:24記法は似ているが全然違うものだ。
System.Int32 に対する int だと思ってくれ。
前者しかいらないという考えなら、構造体いらない。
0776デフォルトの名無しさん
2009/12/12(土) 02:29:10スレ違いだが、構造体はスタックにのるよ
0777uy ◆e6.oHu1j.o
2009/12/12(土) 08:51:25MapStringInt("a",0,"てすと");
これでは代入という意味が構文的に曖昧なので
下のような形式での代入をしたい
A = B
そのまま書くとこうなるが、コンパイルエラーになります
MapStringInt("a",0) = "てすと"
これを、コンパイルエラーにならないように
MapStringInt関数と同名のマクロを以下のように定義したいと思いました
このマクロをどのように書いたらいいのか教えてください
#define MapStringInt(a,b) \
MapStringInt("a",0) = "てすと"
また、このような代入が出来て、なおかつ
printf("%s" , MapStringInt("a",0) );
このような表示も可能なマクロを作ってください
例を挙げると、つまりこういうことに近い
int b;
#define A(a) b
A(1) = 999;
printf("%d" , b);
0778デフォルトの名無しさん
2009/12/12(土) 10:28:01MapStringInt の仕様が分からない。何で引数 3 つなの?
あと、文字列の代入というのがもう一段階ハードルを上げてる。
strdup されるの?それとも strcpy?あるいはポインタ値を書き換えるだけ?
なお、仮に、int* MapIntInt_(int key) という関数があって *MapIntInt_(5) = 3 という使い方をするなら
#define MapIntInt(key) (*MapIntInt_(key))
ってすりゃいいだろうね。
0779デフォルトの名無しさん
2009/12/12(土) 11:38:18関数の戻り値は左辺値にはできない。(参照のあるC++なら別だが)
だからCではデータの取得と代入は、get関数とset関数を別々に作るのが普通。
int MapStringInt_get(const char *key);
void MapStringInt_set(const char *key, int data);
もしくは>>778みたいにデータへのポインタを返すようにすれば左辺値っぽく使えるが
使い方をちゃんと明記しないとわかりづらいかも
0780デフォルトの名無しさん
2009/12/12(土) 11:41:41123456が出力されません。
このサイトのコンパイラの問題でしょうか?
0781デフォルトの名無しさん
2009/12/12(土) 11:50:45一応ヒントを出すと
ポインタの配列は、多次元配列(配列の配列)とは違います。
0782デフォルトの名無しさん
2009/12/12(土) 12:06:01http://codepad.org/qBVmxxuP
0783デフォルトの名無しさん
2009/12/12(土) 12:15:06int main()
{
int **b;
int a[3][5][6];
a[1][2][5]=123456;
b = (int**)a[1];
printf("%d\n",&a[1][2]);
printf("%d\n",b[2]);
return 0;
}
これでどうなると思う?同じになると思うか?
同じになると思うなら配列とポインタの関係をもう一度勉強しなおそう
0784デフォルトの名無しさん
2009/12/12(土) 12:16:54明示的/暗黙的にキャストできるというのは規格票で定ま
ってること?
0785デフォルトの名無しさん
2009/12/12(土) 12:34:31PASCL : 呼び出され側で RET に引数をつけて 「RET 8 で8 バイト解放」などと呼び出す。
CDECL: POP BP -> BP レジスタの値を SP に代入する。→ RET → mov SP, BP
差があったとしても、果たして何クロック分になるのでしょうかね。
0786デフォルトの名無しさん
2009/12/12(土) 13:37:03その宣言では、式の中でのa[0]の型はint(*)[3][4]です。
暗黙でも何でもない。
int a[10];
という宣言でa[0]の型はintになるのと同じ。
0787デフォルトの名無しさん
2009/12/12(土) 13:44:46こことその前後をよく読んで理解すべし
http://www.kouno.jp/home/c_faq/c6.html#3
0788デフォルトの名無しさん
2009/12/12(土) 13:45:11と
int*a; a=(int*)calloc(10,sizeof(int));
0789787
2009/12/12(土) 13:47:10あ、型Tというのは、それが配列型であっても当然当てはまる。
0790デフォルトの名無しさん
2009/12/12(土) 14:10:03他でやれ!
0791デフォルトの名無しさん
2009/12/12(土) 14:17:360792デフォルトの名無しさん
2009/12/12(土) 14:18:340793デフォルトの名無しさん
2009/12/12(土) 14:46:35普通は、returnよりも、callが多いので、callが軽いことには意味がある。
また、PASCALコールの方がアセンブラから呼びたすときわかりやすいという理由もあった。
そのほか、後ろの引数から積んでいかなければならないというのも、嫌われる理由。
0794デフォルトの名無しさん
2009/12/12(土) 15:08:31もういいです。
0795デフォルトの名無しさん
2009/12/12(土) 15:13:15なるほど。参考になりました。
0796デフォルトの名無しさん
2009/12/12(土) 15:19:17callとreturnは、同じなんじゃないか?
callのほうが多いって、callしっぱなしで戻ってこないケースが
たびたびあるってこと?
0797デフォルトの名無しさん
2009/12/12(土) 15:21:37一つの関数はたいがい複数回呼ばれるから
0798デフォルトの名無しさん
2009/12/12(土) 15:24:15「軽い」ってのは実行時の話じゃなくて、コードの量のこと?
0799798
2009/12/12(土) 15:33:00やっぱ「軽い」ってのは、実行時間のことだよな。
そりゃコードとしては、callのほうが多いだろうけど、
実行回数はcallもreturnもおんなじじゃないの?
0800デフォルトの名無しさん
2009/12/12(土) 15:46:40キャストすんなうぜえ
0801デフォルトの名無しさん
2009/12/12(土) 15:49:51違う
0802デフォルトの名無しさん
2009/12/12(土) 16:57:33暗黙の型変換至上主義?
0803デフォルトの名無しさん
2009/12/12(土) 17:03:340804デフォルトの名無しさん
2009/12/12(土) 19:06:30暗黙神拳奥義?
0805デフォルトの名無しさん
2009/12/12(土) 19:10:56初回起動時にクリップボードの内容が取得できないことがあります
わかっているのはファイル名を指定して実行でCLIPBRD.EXEを起動後にソフトを起動したら正常に内容が取得できます
クリップボードチェインが取得できないときはMessageBox APIでエラーを通知するようにしているのですがエラーも出ないで起動するときがあります
クリップボードの中身はテキストなのですが、クリップボードの内容が取得できない原因として何が考えられますか?
0806uy ◆e6.oHu1j.o
2009/12/12(土) 19:35:28すいません引数の数間違えました
>>778
Cでは関数を二つに分けてしまうんですね
よくわかりました ありがとうございます
0807デフォルトの名無しさん
2009/12/12(土) 19:52:06スレ違い。
こっちにでもどーぞ。
ttp://pc12.2ch.net/test/read.cgi/tech/1259478896/l50
0808デフォルトの名無しさん
2009/12/12(土) 20:13:35C ならば void * はどのポインタ型にも代入できるから、キャストはいらない。でもC++ では必要だったかと。
0809デフォルトの名無しさん
2009/12/12(土) 20:29:260810デフォルトの名無しさん
2009/12/12(土) 21:52:21・そのソースコードの何がどう最適化されるか
・出来上がったプログラムはスタックにどう乗るか
・CPU内部での動きはどうか
これを頭に描けないやつは、所詮テキトーな半人前。
これが分からないと、人に教える教育側には回れない。
スタックがブチ壊れているのはデバッガで分かっても
どこで壊れたのか分からないなど無様なことになるからだ。
0811デフォルトの名無しさん
2009/12/12(土) 21:53:050812デフォルトの名無しさん
2009/12/12(土) 21:58:43どっからどこまで半人前か
みたいな主観的な定義なんかどうでもいいから技術教えれ
0813デフォルトの名無しさん
2009/12/12(土) 22:05:10型の不一致とかポインタで境界外にアクセスしようとしてるとか分かっても
実際にどうなるからヤバいのか、ということまで頭の中でシミュレートできないやつはノーサンキュー。
0814デフォルトの名無しさん
2009/12/12(土) 22:07:450815デフォルトの名無しさん
2009/12/12(土) 22:15:21たとえ世の中の全員が100PBのメモリを積むようになったとしてもメモリ使用量を1ビットでも削れるなら削る
たとえ世の中の全員が10GHzのCPUを積むようになったとしても実行時間を削れるだけ削るためにifを減らす
ソースを見たら頭の中でシミュレートでき、その結果は実際にコンパイルしたものと100%相違がない
これくらいええやろ、これでチェック十分 などとバッファを甘く見ない
これである
0816デフォルトの名無しさん
2009/12/12(土) 22:17:580817デフォルトの名無しさん
2009/12/12(土) 22:19:050818デフォルトの名無しさん
2009/12/12(土) 22:27:25この文体はオッサンやな
それも頭の固い
0819デフォルトの名無しさん
2009/12/12(土) 22:28:31偉そうにゴタク並べる口だけPGほど信用できないものはない。
0820デフォルトの名無しさん
2009/12/12(土) 22:33:11たとえ世の中の全員が100PBのメモリを積むようになったとしてもメモリ使用量を1ビットでも削れるなら削る
たとえ世の中の全員が10GHzのCPUを積むようになったとしても実行時間を削れるだけ削るためにifを減らす
ソースを見たら頭の中でシミュレートでき、その結果は実際にコンパイルしたものと100%相違がない
これくらいええやろ、これでチェック十分 などとバッファを甘く見ない
これである");
0821デフォルトの名無しさん
2009/12/12(土) 22:40:28fgets(str,20,fp)
ネット上から引用しただけなので、この引数の意味がよく解りません
この場合の
strは、ここに一時的に格納
20は、読み込む文字数or20ビット
fpはわからん
これで合ってますか?
よく解らないので正しい知識を、どうか教えてください
0822デフォルトの名無しさん
2009/12/12(土) 22:43:38まずはC標準関数のリファレンスを何でもいいから読めとしか……
0823デフォルトの名無しさん
2009/12/12(土) 22:46:21最初の二つはネタでしょ。そんなことするなという例。
三つ目、意味不明な文であるが、いまどきのコンパイラは元のコードが想像できないような最適化をしてくることがあるので100%は無理。
四つ目、バッファを使うよう場合には、普通カプセル化する。
0824デフォルトの名無しさん
2009/12/12(土) 22:47:23http://www9.plala.or.jp/sgwr-t/lib/libtop.html
0825デフォルトの名無しさん
2009/12/12(土) 22:49:370826デフォルトの名無しさん
2009/12/12(土) 22:52:24じゃあ、関数化する。
0827デフォルトの名無しさん
2009/12/12(土) 22:55:210828デフォルトの名無しさん
2009/12/12(土) 22:57:15> fpはわからん
> これで合ってますか?
合ってるわけないだろう常識的に考えて
0829デフォルトの名無しさん
2009/12/12(土) 23:03:57じゃあOOP厨で
0830798
2009/12/12(土) 23:11:13googleで「manpage 関数名」でググれば、リファレンスはでてくるよ。
manpage fgets()とか。
でも、なんか入門書買って、それにのってるソース打ち込んで
動かすとかしたほうが近道だと思われ。
0831デフォルトの名無しさん
2009/12/12(土) 23:11:250832デフォルトの名無しさん
2009/12/13(日) 01:19:41こういう場合は発想力が足りないからなのでしょうか?または基礎がまだ固まっていないからなのでしょうか? 曖昧な質問で申し訳ないです。
0833デフォルトの名無しさん
2009/12/13(日) 01:21:430834デフォルトの名無しさん
2009/12/13(日) 01:22:260835デフォルトの名無しさん
2009/12/13(日) 01:25:11知ってる語句とイディオムが足りてないんだと思います。
ただ関数の機能を覚えるだけでなくて、実際にどう使われているか、
そして実際に自分で使ってみることで自分の血肉にする作業が
私には不可欠でした。
0836デフォルトの名無しさん
2009/12/13(日) 01:28:25・他人の書いたプログラムのソースコードを読む
0837デフォルトの名無しさん
2009/12/13(日) 01:30:11まず練習問題を読んでコードを考える
判らない場合、構わないので、答えを見て、よく読み、理解する
理解したら、答えを伏せて、もう一度その問題を読んで、白紙の状態から考え、コードを書き出す
書けないなら理解が足りないので、もう一度答えを読み、何が理解できてなかったのか、その部分をよく理解する
理解したら、答えを伏せて、もう一度その問題を読んで、白紙の状態から考え、コードを書き出す
以下白紙から答えを書けるまでループ
あとはたくさんやって色んなパターンを覚える
0838デフォルトの名無しさん
2009/12/13(日) 01:35:080839デフォルトの名無しさん
2009/12/13(日) 01:35:250840デフォルトの名無しさん
2009/12/13(日) 01:37:140841デフォルトの名無しさん
2009/12/13(日) 01:39:530842デフォルトの名無しさん
2009/12/13(日) 01:54:140843デフォルトの名無しさん
2009/12/13(日) 01:57:39文法だけ覚えても書けないよ。
0844デフォルトの名無しさん
2009/12/13(日) 02:07:26//結果:2ch1
となった場合、2ch1に1を足して
2ch2を変数に入れるにはどうしたら良いですか。
質問が分かりにくくてゴメンナサイ
エスパーな人教えて下さい
0845デフォルトの名無しさん
2009/12/13(日) 02:13:15根本的なことを訊くが、それはC言語なのか?
0846デフォルトの名無しさん
2009/12/13(日) 02:14:400847デフォルトの名無しさん
2009/12/13(日) 02:16:110848デフォルトの名無しさん
2009/12/13(日) 02:36:49「コードに完成は無い」
「完成は、書き直しの始まり」
書き直し書き直しの連続
0849デフォルトの名無しさん
2009/12/13(日) 02:41:200850デフォルトの名無しさん
2009/12/13(日) 03:32:380851デフォルトの名無しさん
2009/12/13(日) 04:36:16エレガントな解法を求める点でも同じだね。
0852デフォルトの名無しさん
2009/12/13(日) 09:22:010853デフォルトの名無しさん
2009/12/13(日) 10:12:210854デフォルトの名無しさん
2009/12/13(日) 10:16:06どうみてもエレファントの解放でしかないんだが
0855デフォルトの名無しさん
2009/12/13(日) 10:31:435 6
40 50
74 75
こういうデータをファイルから1行ずつ読み取った時に、
左側と右側の数字を比較するにはどうすればいいですか?
0856デフォルトの名無しさん
2009/12/13(日) 10:37:11比較演算子を使えばいい
0857デフォルトの名無しさん
2009/12/13(日) 10:37:21sscanf()で変換すれば?
0858デフォルトの名無しさん
2009/12/13(日) 11:42:380859デフォルトの名無しさん
2009/12/13(日) 11:46:43可読性0%でも実行効率100%のコードを読むほうが遥かに楽しいし、ためになる
0860デフォルトの名無しさん
2009/12/13(日) 12:17:33お答え頂いてありがとうございます。
とりあえずパターンの習得を進めていきたいと思います。
0861デフォルトの名無しさん
2009/12/13(日) 12:24:13ありがとうございます
とりあえず調べた感じ、出来そうな
857さんの言った事をやってみます
0862デフォルトの名無しさん
2009/12/13(日) 12:59:29単純挿入ソートは単純選択と単純交換ソートとアルゴリズム的にどのように違いますか?
比較回数が少ないのかも教えて頂きたいです
0863デフォルトの名無しさん
2009/12/13(日) 13:32:06あっそ。俺が教えたのは試さないんだね。ふーん。
0865デフォルトの名無しさん
2009/12/13(日) 14:13:060866デフォルトの名無しさん
2009/12/13(日) 14:22:290867デフォルトの名無しさん
2009/12/13(日) 16:55:040868デフォルトの名無しさん
2009/12/13(日) 18:20:42countをunsigned long int、timeBとtimeAをdoubleで宣言しているのですがその場合これじゃ
まともな結果はでないのでしょうか?
0869デフォルトの名無しさん
2009/12/13(日) 18:22:500870デフォルトの名無しさん
2009/12/13(日) 18:24:16型だけ書くと
(unsigned long int) / (double - double)
-> (unsigned long int) / (double)
-> (double) / (double)
-> (double)
printf()がdoubleのものを無理矢理unsigned longとして取り出そうとしている
0871デフォルトの名無しさん
2009/12/13(日) 18:26:190872デフォルトの名無しさん
2009/12/13(日) 19:36:050873デフォルトの名無しさん
2009/12/13(日) 20:48:460874デフォルトの名無しさん
2009/12/13(日) 20:50:390875デフォルトの名無しさん
2009/12/13(日) 21:01:02どういう意味があるんでしょう
0876デフォルトの名無しさん
2009/12/13(日) 21:05:440877デフォルトの名無しさん
2009/12/13(日) 21:06:460878デフォルトの名無しさん
2009/12/13(日) 21:10:430879デフォルトの名無しさん
2009/12/13(日) 21:12:560880デフォルトの名無しさん
2009/12/13(日) 21:17:040881デフォルトの名無しさん
2009/12/13(日) 21:22:230882デフォルトの名無しさん
2009/12/13(日) 21:24:07上げたら出たの?
0883デフォルトの名無しさん
2009/12/13(日) 21:25:16(void *) → (char *) キャストするな。
0884デフォルトの名無しさん
2009/12/13(日) 21:25:470885デフォルトの名無しさん
2009/12/13(日) 21:35:32あとは解るよな?
0886デフォルトの名無しさん
2009/12/13(日) 21:37:17仕様どおりだし、何もあいまいではないし。
0887デフォルトの名無しさん
2009/12/13(日) 21:40:400888デフォルトの名無しさん
2009/12/13(日) 21:41:40int execlp(const char *file, const char *arg, ...);
に対して
execlp(command, commmand, arg1, arg2, NULL);
とかやって馬鹿にされるんですね、わかります
0889デフォルトの名無しさん
2009/12/13(日) 21:50:520890デフォルトの名無しさん
2009/12/13(日) 22:04:13キャストしない奴は池沼
0891デフォルトの名無しさん
2009/12/13(日) 22:52:17十進法とかってこれで始まりますか?
0892デフォルトの名無しさん
2009/12/13(日) 22:53:570893デフォルトの名無しさん
2009/12/13(日) 22:54:18ないから
0894デフォルトの名無しさん
2009/12/13(日) 22:54:21それです。
ありがとうございました。
0895デフォルトの名無しさん
2009/12/13(日) 22:55:19decrement
decode
0896デフォルトの名無しさん
2009/12/13(日) 23:00:260897デフォルトの名無しさん
2009/12/13(日) 23:07:310898デフォルトの名無しさん
2009/12/13(日) 23:35:29ということはC言語側からすれば文字コードという概念は無く
文字列はただの整数の配列でしか無いということでいいんでしょうか?
0899デフォルトの名無しさん
2009/12/13(日) 23:38:220900デフォルトの名無しさん
2009/12/13(日) 23:39:16C言語に限らず、内部では0か1の羅列だよ。
0901デフォルトの名無しさん
2009/12/13(日) 23:44:37そういえばソースコードのリテラル文字列は文字コードどうなってるんでしょうかね?
0902デフォルトの名無しさん
2009/12/13(日) 23:48:37対象ソフト。
universalchardet-1.0.3 http://code.google.com/p/juniversalchardet/
icu4c-4_2_1 http://site.icu-project.org/
nkf-2.0.9 http://sourceforge.jp/projects/nkf/releases/
libguess-0.2.0-d7 http://www.honeyplanet.jp/download.html
対象サンプル。
一部文字化けを含むネット上ニュースまたはwindowsXPのバイナリファイル。
個数 バイナリ 2300、 UTF8 5200、 SJIS 4100、 JIS 3800、 EUC-JP 2000
速度。
libguessがもっとも速くこれを1としたときの比較。 ICU 185、 nkf 30、 universalchardet 10
正解率。
libguess 0.99971(5個)、 ICU 0.9996(6個)、 nkf 0.998567(25個)、 universalchardet 0.969221(537個)
まとめ。
libguess( 関数 guess_jp)とnkfは日本語限定の判定。
ICUとuniversalchardetは判定可能な全ての言語での判定。
ICUは一致率60未満でバリナリと判定しこのとき4つのバイナリが西ヨーロッパ言語、2つのEUCが中国語となった。中国語と判定されたケースはもともと漢字が多く言語判定ではICUがもっとも正確といえる。
nkfの25個はSJISをバイナリと誤認した。universalchardetは、バイナリを言語、言語をバイナリなど間違えるケースが多発した。
日本語限定であればlibguess。 世界各国語が対象なら判定速度は遅いがICUがいい。
0903デフォルトの名無しさん
2009/12/13(日) 23:55:29コンパイルオプションで指定できるコンパイラもある
決め打ちで固定されていて指定できないコンパイラもある
0904デフォルトの名無しさん
2009/12/14(月) 02:38:36memcpy(void *dst, const void *src , size_t n)になってる。
第二引数がconstになっているが、普通にバッファ間転送をやるのはどうすればいいの?
0905デフォルトの名無しさん
2009/12/14(月) 02:48:34第二引数がconstになっていることでバッファ間転送に不都合がある例が思いつかないんだが。。
0906デフォルトの名無しさん
2009/12/14(月) 06:56:28コピーできない。
0907デフォルトの名無しさん
2009/12/14(月) 06:59:04ただしくは 「ICE動作ではOKだが、ROMに焼くと動作しない。」
sprintfなどもconstになっているが、これを使うとROM焼きすると
全く動作しない。
0908デフォルトの名無しさん
2009/12/14(月) 09:04:47ROMだから書き込む処理書いて動かないというなら分かるのですが、
constなら、むしろread onlyの意味で良さそうな気がするのですが。
0909デフォルトの名無しさん
2009/12/14(月) 10:21:52セグメントを切り替える必要があるとか
0910デフォルトの名無しさん
2009/12/14(月) 11:11:00const 付きのポインタは ROM 領域からの参照 ってコンパイラ/リンカがマッピングしちゃって
ROM → RAM 呼び出ししちゃってる みたいな感じで
※ 上記のケースでセグフォしないのかな?
0911デフォルトの名無しさん
2009/12/14(月) 11:21:010912デフォルトの名無しさん
2009/12/14(月) 11:28:010913便
2009/12/14(月) 11:55:27元金、単利と複利の利率に対して、次のものを求めるプログラムを作成しなさい。
* 30年後の残高。
* 30年以内に複利の残高は単利の残高を上回るか。
上回るならば何年後か。
このプログラムがわかる人は教えてください。
0914デフォルトの名無しさん
2009/12/14(月) 11:57:570915デフォルトの名無しさん
2009/12/14(月) 13:01:23複利:預金 = 元金 × (1 + 利率)^年数
0916デフォルトの名無しさん
2009/12/14(月) 13:14:24エクセル使えよカス
0917デフォルトの名無しさん
2009/12/14(月) 14:52:20#include <stdio.h>
int main(void){
int i;
char str[80];
printf("文字列を入力してください->");
gets(str);/*配列に文字を格納する*/
for(i=0; str[i] != '\n'; i++);/*文字列のカウント*/
printf("入力された文字数は%dです。\n",i);
return 0;
}
このプログラムが上手く動きません。
for(i=0; str[i] != '\n'; i++);
のところがおかしいみたいなんです。
誰か教えていただけませんか?
0918デフォルトの名無しさん
2009/12/14(月) 14:58:470919デフォルトの名無しさん
2009/12/14(月) 15:09:480920デフォルトの名無しさん
2009/12/14(月) 15:10:21有難うございました....orz
0921デフォルトの名無しさん
2009/12/14(月) 15:15:42出来合いの関数を使うのもありですね。
0922デフォルトの名無しさん
2009/12/14(月) 15:55:15ですね。
0923デフォルトの名無しさん
2009/12/14(月) 16:52:280924デフォルトの名無しさん
2009/12/14(月) 18:11:09同意!
0925デフォルトの名無しさん
2009/12/14(月) 18:12:420926デフォルトの名無しさん
2009/12/14(月) 18:15:50しねねえええ!!!!!!!!
0927デフォルトの名無しさん
2009/12/14(月) 18:16:55例えば>>918はどれくらいの価値があるの?
0928デフォルトの名無しさん
2009/12/14(月) 18:21:24負の価値。
0929デフォルトの名無しさん
2009/12/15(火) 02:11:19ちんたらやってるお前にアナグラマムルはありえんよなぁ
0930デフォルトの名無しさん
2009/12/15(火) 07:03:470931デフォルトの名無しさん
2009/12/15(火) 08:14:470932デフォルトの名無しさん
2009/12/15(火) 08:19:300933デフォルトの名無しさん
2009/12/15(火) 11:12:33仮想メモリが流行ってる昨今、実際の搭載メモリ量以上にメモリを確保できたりしますし
CPUの速度ってのも難しい問題でして、
最近のCPUは状況に応じて速度を変えたりしますし
0934デフォルトの名無しさん
2009/12/15(火) 11:56:090935デフォルトの名無しさん
2009/12/15(火) 13:18:160936デフォルトの名無しさん
2009/12/15(火) 13:21:32プログラムを実行しなければ、その調べる方法とやらを実行することもできません
0937デフォルトの名無しさん
2009/12/15(火) 13:30:020938デフォルトの名無しさん
2009/12/15(火) 14:45:50常に動いているであろうosに聞くのが一番です
0939デフォルトの名無しさん
2009/12/15(火) 15:06:40説明不足。もっと細かく質問いなさい
0940デフォルトの名無しさん
2009/12/15(火) 15:09:43多重起動かどうかを調べたり、するかもしれない。
0941デフォルトの名無しさん
2009/12/15(火) 15:14:23他のアプリケーションの実行状態を知りたいのか
0942デフォルトの名無しさん
2009/12/15(火) 15:20:580943デフォルトの名無しさん
2009/12/15(火) 15:23:260944デフォルトの名無しさん
2009/12/15(火) 15:25:58OS書いてそのOSのスレで聞く。
0945デフォルトの名無しさん
2009/12/15(火) 15:32:15わかるだろ?
0946デフォルトの名無しさん
2009/12/15(火) 15:48:080947デフォルトの名無しさん
2009/12/15(火) 15:55:590948デフォルトの名無しさん
2009/12/15(火) 18:00:19晩御飯にチャーハンを作る予定です。
何分炒めればよいのでしょうか?
ご教示ください。
0949デフォルトの名無しさん
2009/12/15(火) 18:00:570950デフォルトの名無しさん
2009/12/15(火) 18:44:23ハードウェアの状態を調べるのにOS越しでしか問い合わせられないやつはクソである。
メモリのことならメモリコントローラにアクセスすればよい。
0951デフォルトの名無しさん
2009/12/15(火) 18:52:52宣言時
int *P; /* これはint型のポインタPだよ */
使用時
P; /* これはint型ポインタPのアドレスだよ */
*P; /* これはint型ポインタPのデータだよ */
で、いいのですか。いつどんなときでも、*をつければデータを表し、つけなければアドレスを表すのですか。
0952デフォルトの名無しさん
2009/12/15(火) 18:59:43正確には違うが、初心者はそれで問題ない。
0953デフォルトの名無しさん
2009/12/15(火) 19:03:17職場のソースで
int* ptr;
int src;
int dest;
・
・
・
ptr = dest;
というのがあるので、なぜアドレスに値をいれられるのかまったく分かりません。
0954デフォルトの名無しさん
2009/12/15(火) 19:04:42つけたかつけてないかじゃなくて、個数も考えたい。
int **p; // intへのポインタへのポインタ
のとき、*pはintへのポインタだし、**pは、intだ。
0955デフォルトの名無しさん
2009/12/15(火) 19:05:49そのソースを書いたやつを首にしてください
0956デフォルトの名無しさん
2009/12/15(火) 19:08:200957デフォルトの名無しさん
2009/12/15(火) 19:12:19ただわかりやすさのため書いてるが
結局アドレスも実態はただのINT型数値
C++じゃ厳密になってるので無理
int x=100;
int *p=x;
こんなことも可能。
このあと*p=500;
とか書くと、アドレス[100]を500にしろ
というとんでもないことができる。
0958デフォルトの名無しさん
2009/12/15(火) 19:12:59志村、それバグっとるよw
ptr = &dest; // int型変数destの「アドレス」を代入
*ptr = dest; // ptrが指す場所にあるint領域へ、destの値を代入
どっちかになるとオモ。最初の部分がタイプミスでなければ。
0959デフォルトの名無しさん
2009/12/15(火) 19:35:53int **p; /* **pはint型だよ */
int ***p; /* ***pはint型だよ */
0960デフォルトの名無しさん
2009/12/15(火) 20:07:13ユーザプロセスが?
ハードウェアに?
ばかなの?
>>957
入門以前の人が嘘を並べて惑わせるスレじゃないんだが。
0961デフォルトの名無しさん
2009/12/15(火) 20:16:01OSを通さないのに。
32bitOSで4GB以上のメモリを積んだとき、メモリマップできない以上のメモリを
RAMディスクとして用いるアプリがある
どうやって実現していると思っているのか。
そもそもメモリ管理はOSしかできないことか。
0962デフォルトの名無しさん
2009/12/15(火) 20:19:06BIOSの制御構造がわかってれば直接制御できるだろう。
0963デフォルトの名無しさん
2009/12/15(火) 20:21:40ますますもって出来ない理由がない。
そもそも誰も出来なかったらBIOSは存在し得ない。
BIOSが存在しなかったらOSもない。
だいたいコンピュータ自体成立しない。
0964デフォルトの名無しさん
2009/12/15(火) 20:25:59何がウソなのかkwsk。
単にキミがC言語とC++の違いを把握できてないだけだと思うけど。
0965デフォルトの名無しさん
2009/12/15(火) 20:26:010966デフォルトの名無しさん
2009/12/15(火) 20:28:25みたいなもん。
ハードウェアと、俺らが作る上っ面の仲立ちをしてくれる。
でも程度の差こそあれ、俺たちが通常作るソフトウェアであることには変わりない。
なら、OSができることは、「同じことをしてやれば」俺たちも出来る
ってことだ。
0967デフォルトの名無しさん
2009/12/15(火) 20:32:120968デフォルトの名無しさん
2009/12/15(火) 20:34:15その仲立ちのため、アプリケーションソフトウェアが勝手にメモコンまで手を出されては困るので、
WindowsやUnixなどでは、アプリからは手を出せないようにしている。そこは役割分担。
「同じことをしてやれば」は、こっちもOSを作ればという意味でなら、その通りだ。
ちなみに、RAMディスクはカーネルモードで動くデバイスドライバ。
アプリケーションと同じ扱いではない。
0970デフォルトの名無しさん
2009/12/15(火) 20:35:190971デフォルトの名無しさん
2009/12/15(火) 20:35:51アクセスする方法が書かれているな。
ここのレジスタにアクセスしてページングせえよ、横と縦のアドレス得ろや、
そういうことが書いてあるからCなどアドレッシングが楽な言語で書くと。
アセンブリソースを別オブジェクトにしてJAVAでやってもいい。遅いが。
0972デフォルトの名無しさん
2009/12/15(火) 20:36:430973デフォルトの名無しさん
2009/12/15(火) 20:43:24俺らが書くような、普通のアプリケーションみたいなものなんだよ。
ただ、それはハードウェアを制御するアプリケーションという「ような」ものであって。
大したもんじゃない。
例えばCPUのレジスタEAXに1を書き込むとメシを作ってくれるとしよう
EAXに1か0を書き込むソース(関数)が、デバイスドライバだ。
ソースにしたら、
int input_to_EAX(char input)
{
EAX = 1;
}
これでデバイスドライバになる。
大したもんじゃないだろ
何も特別なことをしていない。
で、デバイスドライバを呼び出すときに使われるのがAPI
これもさっきの、EAXに1か0を書き込むだけの関数を呼び出すためだけのもの。
int Go_to_da_kitchin(char input)
{
input_to_EAX(char hogera);
}
これでAPIだ
アクセスする関数があるなら直にユーザーに使わせりゃいいのに、
それだとなんか不都合があるらしい。
0974デフォルトの名無しさん
2009/12/15(火) 20:46:39「すごく高度な、大層なもの」というイメージを持ってるやつがいる。
大間違い。
単にデバイスのレジスタにアクセスして、値を取ったり入れたりしてるだけ。
デバイスはレジスタに値が入れば動くような設計になっていることが多い。
ただ、そこに対して値を入れているだけ。
ソフト的にはどう入れるか、OS的にはどちら側で動くかが問題なのであって、
やってることは大したことじゃない。
以上で述べたような簡単過ぎるコードだって然るべき側で動かせば立派に動く。
メシを作ってくれるCPUがあるならば、だが。
0975デフォルトの名無しさん
2009/12/15(火) 20:50:25このスレにはいますか?
0976デフォルトの名無しさん
2009/12/15(火) 20:54:00って事だよな。
0977デフォルトの名無しさん
2009/12/15(火) 20:54:53ピクセル単位でのデータのやり取りになるから、制御も複雑になっていく。
でも、自分ちで自分が試すぶんには面白いものだ。
0978デフォルトの名無しさん
2009/12/15(火) 20:55:17x86 ならリングレベルというものがある。
一般アプリではなんでもかんでもできるというわけじゃない。
0979デフォルトの名無しさん
2009/12/15(火) 20:59:31不都合がある「らしい」じゃなくて実際あるから。
マルチタスクOSでは、複数アプリから同時に要求が来たときの調停をこなさないといけない。
そんなことアプリを作る度に考えるのはやっていられないので、OSとデバイスドライバの仕事になった。
逆に、>>957だって組込ならとんでもないなんてことはない。よくある光景。
あとC++でもキャストすれば使える。
0980デフォルトの名無しさん
2009/12/15(火) 20:59:53途中でbreakを使いたいだけのとき
そんなループ書くくらいならgoto使った方がマシなのかなぁ
0981デフォルトの名無しさん
2009/12/15(火) 21:03:380982デフォルトの名無しさん
2009/12/15(火) 21:04:33goto を使う
禁止されているときは do{ 〜 }while(0);
それも禁止なら関数化して途中で return
0983デフォルトの名無しさん
2009/12/15(火) 21:05:45そういう用途で break を使うと、break される条件が switch 文になったり、ループの中に入ったときに発見しにくいバグになる。
私は、goto を使うべきだと信じている。
0984デフォルトの名無しさん
2009/12/15(火) 21:05:540985デフォルトの名無しさん
2009/12/15(火) 21:06:25どってことないようになってる。
世の中のドライバ全部が全部そうであるとは言わないがロックくらいはしてんだろ
ドライバ内でもリソースの取り合いなんかザラにするわけだし、
ドライバであるから並行してどうこう、にはならない。
そういう意味でちょっとAPIの存在意義に疑問。
0986デフォルトの名無しさん
2009/12/15(火) 21:08:59「絶対使うな」って風潮どっから来たのかねえ。
そういうふうに言ったとされる人物、Edsgerなんちゃらってのも
「私は絶対使うなとは言ってない」なんて釈明するザマだし。
0987デフォルトの名無しさん
2009/12/15(火) 21:11:370988デフォルトの名無しさん
2009/12/15(火) 21:12:56「普段見慣れない命令」が入ってると、ここで何かやってる!てのが分かりやすい。
適切に使われているgotoもそうだが、読みやすいコードになると思う。
エラー起きてるのが分かりきってんのにグダグダやってんじゃねえ、ってときもそうだが
わざわざbreakとかで戻らす意味を感じない。
0989デフォルトの名無しさん
2009/12/15(火) 21:14:29こっちは仕事でやってんだよ
0990デフォルトの名無しさん
2009/12/15(火) 21:17:57逆switch-case みたいな構文が欲しいと?
0991デフォルトの名無しさん
2009/12/15(火) 21:18:33自称プログラマー乙
0992デフォルトの名無しさん
2009/12/15(火) 21:18:470993デフォルトの名無しさん
2009/12/15(火) 21:19:47できればラベルは書きたくない
breakでぬけられるってことは多重ループ脱出でもなさそうだし
ifとか関数にするとかでどうにかなんないの?
0994デフォルトの名無しさん
2009/12/15(火) 21:19:49俺は好きだな
0995デフォルトの名無しさん
2009/12/15(火) 21:25:020996デフォルトの名無しさん
2009/12/15(火) 21:49:39確か goto カウンターだったかな。
0997デフォルトの名無しさん
2009/12/15(火) 23:35:040998デフォルトの名無しさん
2009/12/15(火) 23:40:54#define HOGE ((volatile unsigned int *)(0x3FFFC020))
この文の意味がわかりません。
#define HOGE 0x3FFFC020
ではだめなのでしょうか?
0999デフォルトの名無しさん
2009/12/15(火) 23:43:53http://pc12.2ch.net/test/read.cgi/tech/1260888175/
1000デフォルトの名無しさん
2009/12/15(火) 23:45:0010011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。