1 名前:デフォルトの名無しさん [2009/12/15(火) 23:42:55 ] C言語の*入門者*向け解説スレッドです。 ★前スレ C言語なら俺に聞け(入門編)Part 57 pc12.2ch.net/test/read.cgi/tech/1260020924/ ★過去スレ 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.70【環境依存OK】 pc12.2ch.net/test/read.cgi/tech/1258873470/ とか ★教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。 C/C++の宿題片付けます 133代目 pc12.2ch.net/test/read.cgi/tech/1260532772/ ★C++言語についてはなるべく聞かないでください。C++対応明記スレへどうぞ ★分からない事をなるべく詳しく書いて下さい。 ★ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること # サイズが大きい場合は宿題スレのアップローダ等を利用してください ★開発環境や動作環境も晒すと答えが早いかもしれません。 ★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
52 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 02:09:36 ] 逆アセンブル・逆コンパイラ・絶対ダメ
53 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 02:10:10 ] 醍醐味だと思うけど
54 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 02:11:07 ] >>47 地球外知的生命体なら・・
55 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 02:13:33 ] >>49 何故に憲法w 「憲法」の定義から始めようかw
56 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 02:15:24 ] 最近ずっと話題になってる小沢の暴論のコピペだよ。天皇の部分を変えただけ
57 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 02:16:16 ] >>55 は世間知らず
58 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 02:20:02 ] コピペの誤用のほうを詰るべきだろ
59 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 02:23:35 ] >>40 そろそろ本題へ。 できるコードには基本的には違いありません。 基本はキャストするです。 キャストしないとコンパイラの警告レベルを上げるとwarning が出ますが、しなくてもコンパイルはできます。 昔は今の void* の代わりにintが使われていましたが、その頃はキャストしないのが普通だったようです。
60 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 02:24:01 ] >>40 「キャストしなくていい」 ・・・ 個人の趣味レベルのプログラム 「キャストしないほうがいい」 ・・・ 学校の授業レベルのプログラム 「キャストしてはいけない」 ・・・ プログラマー
61 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 02:26:05 ] C関連のスレではキャストの話でいつも盛り上がるね
62 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 02:26:52 ] 見た目が面白いよね、うん。
63 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 02:28:55 ] >>40 キャストすべき
64 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 02:29:08 ] 安全だろうが安全でなかろうが男ならどんな言語でも明示キャスト
65 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 02:29:40 ] >59 最後の文は正しいのか
66 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 02:31:22 ] 可読性を重視したコーディングを心がけなさい>入門者たちよ
67 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 02:32:55 ] 何が真実なのかさっぱりわからねえ
68 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 02:32:56 ] >>66 自己レス乙
69 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 02:34:22 ] >>67 自分で調べずに人に訊くからこうなる。まず自分で調べなさい
70 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 02:37:48 ] クライアントから要求された以上のプログラムを実現する必要性は無い。余計なことは技術の無駄遣いだ。
71 名前:デフォルトの名無しさん [2009/12/16(水) 02:55:34 ] 何の話かわからないけど キャストは別にしなくていいんじゃないかな? 必要ないんならしないほうがすっきりして読みやすいよ
72 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 02:55:49 ] 配列の全要素を同じ値にする関数があったと思うんですが名前を失念しました なんという名前でしたっけ? 関数名(配列,値) ってかんじだったはず
73 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 02:59:34 ] >>72 memset fill
74 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 03:05:29 ] ありがとう!
75 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 04:44:57 ] 関数内に宣言されるauto変数について教えてください。 staticを付けないと関数から抜けたときメモリが開放されますが以下の書き方だと 開放されないようです。なぜ開放されないのかが理解できません。 *sには見えないstaticが付いているのでしょうか? char *func(void) { char *s=malloc(20); (省略) return s; }
76 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 04:58:37 ] 解放されるのは変数sに割り当てられてるメモリであって、 変数sに入ってる値じゃないから。
77 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 05:17:07 ] char *s=alloca(20); にすれば期待した動作に成るよ
78 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 05:56:30 ] ビットフィールドなるものがあるのを先日知りお試しPGを作成したのですが、ちょっとわからない箇所が。 struct tag1{ unsigned int a :1; unsigned int :2; unsigned int b :4; short id; }; struct tag2{ unsigned int b :4; short id; }; 構造体tag1、tag2ともsizeofでサイズを見てみると6でした。 なぜ6となったのでしょうか? ------------------------------------------------------------------ int型のサイズは4バイト、short型のサイズは2バイトのOS(WinXP)で実行。 VCの設定項目である構造体メンバのアライメントは1バイトに設定しています。 ------------------------------------------------------------------
79 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 05:58:36 ] ビットフィールドは悪魔だ できるなら使わない方がいい 速度も大幅に低下するし
80 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 06:27:51 ] その通りだ よくぞ言った
81 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 06:49:51 ] >>78 ビットフィールドを理解していれば何の疑問もない筈だが? いくつになるべきだと思うんだ?
82 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 06:52:34 ] 3になるとか思ったんじゃね?
83 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 07:37:34 ] 78です。 ビットフィールドを知ったのが最近なので理解不足であります。 知っているのは、コロンの後ろの数値が :4 なら0x0〜0xFまでが格納出来るエリアが確保されるくらいでしょうか。 このビットエリアが明らかにtag1、tag2違うのに同じサイズになるのが理解できません(´д`)
84 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 08:08:21 ] 使ってるビットだけのエリアが確保されるんじゃなくて、 unsigned intのエリアを確保してそこから、そのビットの分を使用してるだけ。
85 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 08:21:30 ] それはない
86 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 09:18:50 ] あるってw
87 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 11:37:39 ] ビットフィールドはできるだけ局在化したほうがいいとは思うが、必要なら積極的に使えばいいと思う。 一々シフトしてアンドマスクかけて取り出すなんて面倒だし間違いやすい。 # 勿論、環境依存になるのでその旨ドキュメントに明記するのは当然として。
88 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 12:18:39 ] test
89 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 13:07:26 ] >>84 が正解。 だが、マスク・アンマスク方が、結局わかりやすい。 (値の取り出し用、設定用のマクロも作る)
90 名前:デフォルトの名無しさん [2009/12/16(水) 18:55:11 ] あああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ ぬああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ PowerPCいい!!!!!!!!!!!! 割り込み処理ラク!!!!!!!!!!! ベクタとかいらねえ、まんま関数を置けばいいんじゃん!!!!!!!!!!!!!!!!!!!!!!!!! でも俺の中ではSH >>>> PowerPC だけどな!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
91 名前:デフォルトの名無しさん [2009/12/16(水) 19:15:14 ] やっぱ割り込みコントローラを自分で持ってる奴はいいなあ!!!!! チョー気持ちいい x86みたいにメンドクセーことしないで済む ええなあ ええ ええぞ
92 名前:デフォルトの名無しさん [2009/12/16(水) 19:49:49 ] ああもう素晴らしい カウンタもついてる SHみたいにナノセカンド単位でのカウンティングができる!!!!!!!!! すばらしい!!!!!!!!! OSのミリセカンドオーダーのスリープなんぞに頼らなくてもよい!!!!!!!!!!!! 蕎麦らしい!!!!!!!!!!
93 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 19:54:06 ] すーぱーひたちとかネーミングがダサすぎて話しにならん
94 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 19:57:46 ] はなしし?
95 名前:デフォルトの名無しさん [2009/12/16(水) 21:03:00 ] ハードわからん奴カワイソス
96 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 21:04:07 ] 91 :デフォルトの名無しさん [] :2009/12/16(水) 19:15:14 なんか91というラベルがあって デフォルトの名無しさんという配列があるように見える俺の専用ブラウザ。
97 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 22:01:48 ] ncursesを使ってプログラム作ってます。(debian&gcc) 画面(端末)の背景全体を、特定の色にしようと思ったら init_pairで指定した上でスペースで埋めないといかんのでしょうか?
98 名前:デフォルトの名無しさん [2009/12/16(水) 22:02:07 ] *(unsigned int *)(0xAAAA) というのが示すのは int型のポインタが示す実体ですか?
99 名前: ◆QZaw55cn4c mailto:sage [2009/12/16(水) 22:10:43 ] >>98 アラインメントを考えないことにすれば、そのとおりでしょうね。 ハードウェアよりな言い方をすれば、アドレス 0xaaaa から始まる int 型の変数の値ですね。
100 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 22:15:07 ] 謎のトリさん現る
101 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 22:15:43 ] >98 「int型のポインタ」という言葉使いからして型がわかってないぞ。 *(unsigned int *)(0xAAAA) の意味は 0xAAAAからsizeof(unsigned)分をunsignedとみたてて アクセスしている。
102 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 22:20:35 ] >>97 画面クリアの類でいいんじゃね?
103 名前:デフォルトの名無しさん [2009/12/16(水) 22:24:14 ] >>99 ありがとうございます。 >>101 ではどのようにいったらよいのですか? unsigned int型のポインタ??
104 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 22:34:35 ] unsigned int*型の変数 まぁ別に難でもい伊田ろ。いい太古とはわ軽んだから
105 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 22:37:56 ] そうそう、ポインタっつってもメモリのどっかに記憶されてる変数だから
106 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 22:49:22 ] >>102 具体的には? 例えば、文字色を白、文字背景を青にして なんも手を加えてない状態の端末背景が黒だと 文字のある所だけ背景が青になるんで、文字のないとこも 青色にしたいんですが。
107 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 22:54:55 ] バカの言うことに惑わされんなよ ポインタは通常の変数として規定されていない。
108 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 22:56:25 ] バカがバカと罵るスレ
109 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 22:56:49 ] >103 型名は宣言から識別子を抜いたもの。 よって int *a; の型名は「int *」日本語なら「intを指すポインタ型」だろうな。 よく「int型のポインタ」という人がいるが int *a[10]; とかよめないだろ。 この場合の型名は「int *[10]」で日本語なら「intを指すポインタの配列[要素数10]」型。 int (*a)[10]; だったら 型名は「int (*)[10]」で日本語なら「intの配[要素数10]を指すポインタ」型
110 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 22:58:20 ] C言語のプログラムをVisualC++で書いていて、そっちでは普通に動いていたのですが、 メモ帳にこぴぺしてCygWinで実行したら、 parse error before~ だとか braces around scalar initializer というようなエラーが出ます。 主に配列の宣言・初期化のあたりで発言するのですが。 何が原因なのでしょうか
111 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 22:58:41 ] データの「型」を指すってのは有り得ない事だよな。 型は変数でもメモリのアドレスでもない。
112 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:00:14 ] >>111 え?
113 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:13:06 ] int *p=(int*)214F23BC; pは214F23BCを指しているがintは指していない。
114 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:15:43 ] int *p[10]は「int型の変数のアドレスを指すポインタ変数の配列[要素数10]」型 決して「intを指すポインタの配列[要素数10]」型ではないので間違えないように。
115 名前:デフォルトの名無しさん [2009/12/16(水) 23:18:25 ] unsigned char TITLE[]="HOGE" これはどういうこと?
116 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:19:58 ] ??
117 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:23:01 ] >>115 HOGEという文字列の先頭へのchar型の変数を指すポインタ変数
118 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:25:51 ] おいおい……
119 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:26:56 ] >>177 char *x="abcde" char x[]="abcde" の区別ができてないバカ発見
120 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:27:09 ] 配列の初期化
121 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:27:39 ] 入門以前のやつは来るなよww 来ても良いけど回答者の側には来るなw
122 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:28:49 ] アウトプットは学習効率を良くするからなあ
123 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:32:44 ] >>119 117と177の区別ができてない馬鹿発見
124 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:32:54 ] >>115 わざわざunsingedがついているところで、深読みをしてしまう。 昔は、char が unsigned のコンパイラも多かったなあ。
125 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:34:23 ] >>115 書く場所によって意味が変わる。 関数の外なら unsigned char TITLE[5]={'H','O','G','E','\0'}; の糖衣構文。 また、関数の中なら auto unsigned char TITLE[5]; TITLE[0]="HOGE"[0];TITLE[1]="HOGE"[1]; TITLE[2]="HOGE"[2];TITLE[3]="HOGE"[3]; TITLE[4]="HOGE"[4]; の糖衣構文になる。
126 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:36:26 ] 補足すると、代入を strcpy に置き換えるコンパイラもある。
127 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:40:52 ] >125 関数の外も中も同じ意味だぞ。 >126 (== 125?) 代入とstrcpyは別だろ。 unsigned char TITLE[]="HOGE" は初期化であって代入ではない。 なんか昨日からポインタの知識が怪しい奴が回答側にいるな。 初級者は注意すること。 中級者は間違い探しをするとイイかも。
128 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:41:22 ] 入門者が入門者に適当を答えるスレです。 上級者様は上級者様専用のむずかしーいスレにいって戻ってくるなよ
129 名前:127 mailto:sage [2009/12/16(水) 23:43:58 ] 言い忘れたけど unsigned char TITLE[]="HOGE" のunsignedはない方がよいかも。 文字列リテラルの型はconst charの配列だから。
130 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:45:40 ] 125は、初心者が陥りやすい大きな間違いをしている。
131 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:46:07 ] >>127 は、もはや荒らしの一種だな。
132 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:47:31 ] >>128 荒らすな。
133 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:50:25 ] >114 またわけのわからない読み方をするね。 宣言 int *p[10]; があるとき、pの型はint *[10] ここまでは確定。 日本語にどう変換するかは規定されていないけどね。 あなたの日本語はよくわからない。 ポインタはポインタであって、アドレスではない。 アドレスを指すポインタ変数?
134 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:51:33 ] 127にとっては int x=100; これは初期化であって代入ではないらしい
135 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:51:51 ] データ型ってのはサイズを示す指針だから、指しようがねえよw
136 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:54:08 ] マイナスの値を取らない、取り得ないものだったら 明示的にunsignedを付けたほうがいい。 他人に読ますときは特に
137 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:55:49 ] >113 >int *p=(int*)214F23BC; >pは214F23BCを指しているがintは指していない。 pは214F23BCを指しているわけではない。 pの値が214F23BCであると言うだけ。 pは自分がどんな型を指しているか知っているので *が適用されたときにどうやって値を取り出せばよいかわかる。 pが指しているのがintか、charか、struct{char x; short y; long z}なのかで 値の取り出し方が変わる。
138 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:58:05 ] >134 >int x=100; >これは初期化であって代入ではないらしい その通りですがなにか?
139 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:58:15 ] int *p[10]; これは普通に使うけど、 int (*p)[10]; これって使い道ある? 使ったことないぞ。
140 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 00:01:22 ] 上級者さまうぜぇ 関係ない話するなや こんなところで「入門者バーカ」って言って悦にいってないでさっさと首つって市ね。
141 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 00:03:43 ] >139 2次元配列を引数にとる変数の型。 void func(int p[10][10]); のpの型がint (*p)[10] 後は組み込みでVRAMの先頭が与えられたときに 2次元配列として扱いたいときに、この型で領域の先頭を 指したりする。
142 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 00:04:20 ] 質問に答えず、質問とは無関係などうでもいい話には必死。 自分で回答する気はぜんぜんないくせに、間違った解答を見つけたとたん待ってましたとばかりにたたきにくる。 マジうぜぇわ。
143 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 00:05:01 ] すくなくとも、このスレになってからは上級じゃなきゃできないような回答はひとつもないように見える。
144 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 00:05:14 ] >>139 typedef int (*p)[10] なら、稀によく使う
145 名前:厨房 ◆hfigpiEhOM [2009/12/17(木) 00:05:38 ] ゲームの改造とかやりたいんですけど、C言語でできるようになりますか?
146 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 00:06:26 ] プロアクションリプレイかコードフリークでも使ってろ
147 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 00:07:07 ] このスレのローカルルール 上級者は荒らし
148 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 00:07:21 ] ハッカーになりたいならCだけじゃ無理
149 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 00:07:46 ] >110 問題の出るコードを貼ってみたら。 だけど環境依存の問題だろうから、 こっちがイイかも 【初心者歓迎】C/C++室 Ver.70【環境依存OK】 pc12.2ch.net/test/read.cgi/tech/1258873470/
150 名前:厨房 ◆hfigpiEhOM [2009/12/17(木) 00:10:45 ] >>147 >>148 ポインターがどうのとか言っていたので改造コードにはC言語の知識が必要なのかと思いました。 以前
151 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 00:15:50 ] >>138 そうなんだけどさ、セクション配置かスタックに積むかで バイナリレベルじゃ変わってくるじゃん?てことを言いたいんじゃないかとおも
152 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 00:33:52 ] >>145 とりあえず、アセンブラだけでなく機械語も覚えろ。 改造だけなら、言語としてはこれだけの知識しか使用しない。