C言語なら俺に聞け(入門編)Part 58
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/12/15(火) 23:42:55★前スレ
C言語なら俺に聞け(入門編)Part 57
http://pc12.2ch.net/test/read.cgi/tech/1260020924/
★過去スレ
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.70【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1258873470/
とか
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 133代目
http://pc12.2ch.net/test/read.cgi/tech/1260532772/
★C++言語についてはなるべく聞かないでください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
0002デフォルトの名無しさん
2009/12/15(火) 23:46:490003デフォルトの名無しさん
2009/12/15(火) 23:50:38だと、コンパイラ君に怒られることがあるかも?
0004デフォルトの名無しさん
2009/12/15(火) 23:51:160005デフォルトの名無しさん
2009/12/15(火) 23:55:35メモリマップドIOや、別スレッドとの共有メモリなど。
0006デフォルトの名無しさん
2009/12/15(火) 23:57:20>>前スレの998
#define HOGE ((volatile unsigned int *)(0x3FFFC020))
この文の意味がわかりません。
#define HOGE 0x3FFFC020
ではだめなのでしょうか?
0007デフォルトの名無しさん
2009/12/16(水) 00:06:26>>5 は、 #define HOGE ((unsigned int *)(0x3FFFC020)) じゃダメな理由ね。
0008デフォルトの名無しさん
2009/12/16(水) 00:10:29それはこのマクロをどう使うかによる。
キャストしているところを見ると、メモリ領域を示しているのだろうから、
ポインタとして使うだろう。
全スレでも話題になったが、int とvolatile unsigned int *では型が違うからね。
単に0x3FFFC020なら、intとして扱われる。
0009デフォルトの名無しさん
2009/12/16(水) 00:53:47があったとき
a=(int*)calloc(100,sizeof(int));
*a=(int*)calloc(100,sizeof(int));
a=(int)calloc(100,sizeof(int));
*a=(int)calloc(100,sizeof(int));
a=(int*)calloc(100,sizeof(int*));
*a=(int*)calloc(100,sizeof(int*));
a=(int)calloc(100,sizeof(int*));
*a=(int)calloc(100,sizeof(int*));
どれが正しいか分からない
0010デフォルトの名無しさん
2009/12/16(水) 00:56:00たかが8通り
全部コンパイルして試せばいいよ
正常に処理されたものだけ正しい
どれも正常に処理されなければ、おまでの常識は崩れ去る
0011デフォルトの名無しさん
2009/12/16(水) 01:06:510012デフォルトの名無しさん
2009/12/16(水) 01:10:24コンパイルできるから正しい訳じゃないぞ。
*a=(int)calloc(100,sizeof(int));
*a=(int)calloc(100,sizeof(int*));
はコンパイルは正常に完了するが、その後
正しくコーディングできるとは思えない。
0013デフォルトの名無しさん
2009/12/16(水) 01:11:490014デフォルトの名無しさん
2009/12/16(水) 01:12:38int*a=calloc(100,sizeof(int));
0015デフォルトの名無しさん
2009/12/16(水) 01:14:000016デフォルトの名無しさん
2009/12/16(水) 01:15:03セマンティクス上では全ては正しくない
0017デフォルトの名無しさん
2009/12/16(水) 01:18:38ttp://yougo.ascii.jp/caltar/セマンティクス
0018デフォルトの名無しさん
2009/12/16(水) 01:20:17a=calloc(100,sizeof(int));
*a=calloc(100,sizeof(int));
a=calloc(100,sizeof(int*));
*a=calloc(100,sizeof(int*));
どれが正しいの?
001912
2009/12/16(水) 01:21:35追記
a=(int*)calloc(100,sizeof(int*));
もコンパイルは通るけど、間違いだろうな。
この後メモリリークや、領域破壊しないでコードが書けるなら、
そもそもこんな書き方はしない。
正しい書き方といえるのは
a=(int*)calloc(100,sizeof(int));
だけかな。>11のいうようにCではキャスト不要なのだから
キャストしないほうがよいスタイルだと思う。
0020デフォルトの名無しさん
2009/12/16(水) 01:22:09たかが4通り、全て試してみればよい
0021デフォルトの名無しさん
2009/12/16(水) 01:23:380022デフォルトの名無しさん
2009/12/16(水) 01:24:18左辺と右辺の型を考えようね。
a=calloc(100,sizeof(int));
a=calloc(100,sizeof(int*));
は文法上はどちらも正しい。
しかし
a=calloc(100,sizeof(int*));は普通は誤り。
0023デフォルトの名無しさん
2009/12/16(水) 01:25:170024デフォルトの名無しさん
2009/12/16(水) 01:30:13(その場合はextern "C"も必要だが。)
Cだけで使うならキャストは不要。
0025デフォルトの名無しさん
2009/12/16(水) 01:30:51アフォ
calloc は、void* を返す。コンパイル通るからいいなんて言うなよ!
002622
2009/12/16(水) 01:31:25int *a;である場合、aが指す領域はaが指している型のサイズの整数倍の
領域が確保されなければならないから。
ポインタは指している型のサイズ分、アドレスが進むし、参照したときには
型サイズ分の領域を読むことになるから、実用上は
型Tと正の整数Nがあったときに
T *a = malloc(sizeof(T) * N);
となっていないと間違いと思ってよい。
0027デフォルトの名無しさん
2009/12/16(水) 01:32:20まとめ
Cだけで使うなら
a=calloc(100,sizeof(int));
が正しい(Cはキャストいらない)
C++でも使いたいなら
a=(int*)calloc(100,sizeof(int));
が正しい
C#では使えない
0028デフォルトの名無しさん
2009/12/16(水) 01:33:10× >>9,11
○ >>9,18
0029デフォルトの名無しさん
2009/12/16(水) 01:34:05Cでは
void*は関数ポインタ型以外のポインタ型の値を、キャスト無しで格納できるし、
元の型に戻したときに同じになることが保証されている。
C++ではmallocなんて使わずにnew使え。
0030デフォルトの名無しさん
2009/12/16(水) 01:34:370031デフォルトの名無しさん
2009/12/16(水) 01:35:580032デフォルトの名無しさん
2009/12/16(水) 01:36:210033デフォルトの名無しさん
2009/12/16(水) 01:37:520034デフォルトの名無しさん
2009/12/16(水) 01:40:210035デフォルトの名無しさん
2009/12/16(水) 01:41:140036デフォルトの名無しさん
2009/12/16(水) 01:42:51入門者はまず制御文や条件文を目を閉じてでも書けるように上達するのが先
0037デフォルトの名無しさん
2009/12/16(水) 01:47:150038デフォルトの名無しさん
2009/12/16(水) 01:49:440039デフォルトの名無しさん
2009/12/16(水) 01:50:16君が言ってることは正しいが、
>>9 は、void* を int* あるいは int にキャストしようとしているので、
その例には当てはまらない。int* → void* ならC++でもキャストいらない。
0040デフォルトの名無しさん
2009/12/16(水) 01:54:38と
キャストした場合a=(int*)calloc(100,sizeof(int));
と
何か内部的なことに違いがあるの?
「キャストしなくていい」の?
「キャストしないほうがいい」の?
「キャストしてはいけない」の?
0041デフォルトの名無しさん
2009/12/16(水) 01:57:42自分で調べてみて分からなかった時だけ質問しやがれ
0042デフォルトの名無しさん
2009/12/16(水) 02:00:290043デフォルトの名無しさん
2009/12/16(水) 02:01:450044デフォルトの名無しさん
2009/12/16(水) 02:03:050045デフォルトの名無しさん
2009/12/16(水) 02:03:360046デフォルトの名無しさん
2009/12/16(水) 02:03:590047デフォルトの名無しさん
2009/12/16(水) 02:04:50世界中の文献を調べて分からないようなことを知る人物などおりゃせん
0048デフォルトの名無しさん
2009/12/16(水) 02:05:290049デフォルトの名無しさん
2009/12/16(水) 02:06:05それはそれとして、君は日本国憲法を読んでいるか。
逆アセンブルは何て書いてある。それはどういう風に書いてある、憲法に。
0050デフォルトの名無しさん
2009/12/16(水) 02:07:230051デフォルトの名無しさん
2009/12/16(水) 02:08:100052デフォルトの名無しさん
2009/12/16(水) 02:09:360053デフォルトの名無しさん
2009/12/16(水) 02:10:100054デフォルトの名無しさん
2009/12/16(水) 02:11:07地球外知的生命体なら・・
0055デフォルトの名無しさん
2009/12/16(水) 02:13:33何故に憲法w
「憲法」の定義から始めようかw
0056デフォルトの名無しさん
2009/12/16(水) 02:15:240057デフォルトの名無しさん
2009/12/16(水) 02:16:160058デフォルトの名無しさん
2009/12/16(水) 02:20:020059デフォルトの名無しさん
2009/12/16(水) 02:23:35そろそろ本題へ。
できるコードには基本的には違いありません。
基本はキャストするです。
キャストしないとコンパイラの警告レベルを上げるとwarning が出ますが、しなくてもコンパイルはできます。
昔は今の void* の代わりにintが使われていましたが、その頃はキャストしないのが普通だったようです。
0060デフォルトの名無しさん
2009/12/16(水) 02:24:01「キャストしなくていい」 ・・・ 個人の趣味レベルのプログラム
「キャストしないほうがいい」 ・・・ 学校の授業レベルのプログラム
「キャストしてはいけない」 ・・・ プログラマー
0061デフォルトの名無しさん
2009/12/16(水) 02:26:050062デフォルトの名無しさん
2009/12/16(水) 02:26:520063デフォルトの名無しさん
2009/12/16(水) 02:28:55キャストすべき
0064デフォルトの名無しさん
2009/12/16(水) 02:29:080065デフォルトの名無しさん
2009/12/16(水) 02:29:40最後の文は正しいのか
0066デフォルトの名無しさん
2009/12/16(水) 02:31:220067デフォルトの名無しさん
2009/12/16(水) 02:32:550068デフォルトの名無しさん
2009/12/16(水) 02:32:56自己レス乙
0069デフォルトの名無しさん
2009/12/16(水) 02:34:22自分で調べずに人に訊くからこうなる。まず自分で調べなさい
0070デフォルトの名無しさん
2009/12/16(水) 02:37:480071デフォルトの名無しさん
2009/12/16(水) 02:55:34キャストは別にしなくていいんじゃないかな?
必要ないんならしないほうがすっきりして読みやすいよ
0072デフォルトの名無しさん
2009/12/16(水) 02:55:49なんという名前でしたっけ?
関数名(配列,値)
ってかんじだったはず
0073デフォルトの名無しさん
2009/12/16(水) 02:59:34memset
fill
0074デフォルトの名無しさん
2009/12/16(水) 03:05:290075デフォルトの名無しさん
2009/12/16(水) 04:44:57staticを付けないと関数から抜けたときメモリが開放されますが以下の書き方だと
開放されないようです。なぜ開放されないのかが理解できません。
*sには見えないstaticが付いているのでしょうか?
char *func(void)
{
char *s=malloc(20);
(省略)
return s;
}
0076デフォルトの名無しさん
2009/12/16(水) 04:58:37変数sに入ってる値じゃないから。
0077デフォルトの名無しさん
2009/12/16(水) 05:17:07にすれば期待した動作に成るよ
0078デフォルトの名無しさん
2009/12/16(水) 05:56:30struct 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バイトに設定しています。
------------------------------------------------------------------
0079デフォルトの名無しさん
2009/12/16(水) 05:58:36できるなら使わない方がいい
速度も大幅に低下するし
0080デフォルトの名無しさん
2009/12/16(水) 06:27:51よくぞ言った
0081デフォルトの名無しさん
2009/12/16(水) 06:49:51ビットフィールドを理解していれば何の疑問もない筈だが?
いくつになるべきだと思うんだ?
0082デフォルトの名無しさん
2009/12/16(水) 06:52:340083デフォルトの名無しさん
2009/12/16(水) 07:37:34ビットフィールドを知ったのが最近なので理解不足であります。
知っているのは、コロンの後ろの数値が :4 なら0x0〜0xFまでが格納出来るエリアが確保されるくらいでしょうか。
このビットエリアが明らかにtag1、tag2違うのに同じサイズになるのが理解できません(´д`)
0084デフォルトの名無しさん
2009/12/16(水) 08:08:21unsigned intのエリアを確保してそこから、そのビットの分を使用してるだけ。
0085デフォルトの名無しさん
2009/12/16(水) 08:21:300086デフォルトの名無しさん
2009/12/16(水) 09:18:500087デフォルトの名無しさん
2009/12/16(水) 11:37:39一々シフトしてアンドマスクかけて取り出すなんて面倒だし間違いやすい。
# 勿論、環境依存になるのでその旨ドキュメントに明記するのは当然として。
0088デフォルトの名無しさん
2009/12/16(水) 12:18:390089デフォルトの名無しさん
2009/12/16(水) 13:07:26だが、マスク・アンマスク方が、結局わかりやすい。
(値の取り出し用、設定用のマクロも作る)
0090デフォルトの名無しさん
2009/12/16(水) 18:55:11ぬああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ
PowerPCいい!!!!!!!!!!!!
割り込み処理ラク!!!!!!!!!!!
ベクタとかいらねえ、まんま関数を置けばいいんじゃん!!!!!!!!!!!!!!!!!!!!!!!!!
でも俺の中ではSH >>>> PowerPC
だけどな!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0091デフォルトの名無しさん
2009/12/16(水) 19:15:14チョー気持ちいい
x86みたいにメンドクセーことしないで済む
ええなあ
ええ
ええぞ
0092デフォルトの名無しさん
2009/12/16(水) 19:49:49カウンタもついてる
SHみたいにナノセカンド単位でのカウンティングができる!!!!!!!!!
すばらしい!!!!!!!!!
OSのミリセカンドオーダーのスリープなんぞに頼らなくてもよい!!!!!!!!!!!!
蕎麦らしい!!!!!!!!!!
0093デフォルトの名無しさん
2009/12/16(水) 19:54:060094デフォルトの名無しさん
2009/12/16(水) 19:57:460095デフォルトの名無しさん
2009/12/16(水) 21:03:000096デフォルトの名無しさん
2009/12/16(水) 21:04:07なんか91というラベルがあって
デフォルトの名無しさんという配列があるように見える俺の専用ブラウザ。
0097デフォルトの名無しさん
2009/12/16(水) 22:01:48画面(端末)の背景全体を、特定の色にしようと思ったら
init_pairで指定した上でスペースで埋めないといかんのでしょうか?
0098デフォルトの名無しさん
2009/12/16(水) 22:02:07というのが示すのは
int型のポインタが示す実体ですか?
アラインメントを考えないことにすれば、そのとおりでしょうね。
ハードウェアよりな言い方をすれば、アドレス 0xaaaa から始まる int 型の変数の値ですね。
0100デフォルトの名無しさん
2009/12/16(水) 22:15:070101デフォルトの名無しさん
2009/12/16(水) 22:15:43「int型のポインタ」という言葉使いからして型がわかってないぞ。
*(unsigned int *)(0xAAAA)
の意味は
0xAAAAからsizeof(unsigned)分をunsignedとみたてて
アクセスしている。
0102デフォルトの名無しさん
2009/12/16(水) 22:20:35画面クリアの類でいいんじゃね?
0103デフォルトの名無しさん
2009/12/16(水) 22:24:14ありがとうございます。
>>101
ではどのようにいったらよいのですか?
unsigned int型のポインタ??
0104デフォルトの名無しさん
2009/12/16(水) 22:34:35まぁ別に難でもい伊田ろ。いい太古とはわ軽んだから
0105デフォルトの名無しさん
2009/12/16(水) 22:37:560106デフォルトの名無しさん
2009/12/16(水) 22:49:22具体的には?
例えば、文字色を白、文字背景を青にして
なんも手を加えてない状態の端末背景が黒だと
文字のある所だけ背景が青になるんで、文字のないとこも
青色にしたいんですが。
0107デフォルトの名無しさん
2009/12/16(水) 22:54:55ポインタは通常の変数として規定されていない。
0108デフォルトの名無しさん
2009/12/16(水) 22:56:250109デフォルトの名無しさん
2009/12/16(水) 22:56:49型名は宣言から識別子を抜いたもの。
よって
int *a;
の型名は「int *」日本語なら「intを指すポインタ型」だろうな。
よく「int型のポインタ」という人がいるが
int *a[10];
とかよめないだろ。
この場合の型名は「int *[10]」で日本語なら「intを指すポインタの配列[要素数10]」型。
int (*a)[10];
だったら
型名は「int (*)[10]」で日本語なら「intの配[要素数10]を指すポインタ」型
0110デフォルトの名無しさん
2009/12/16(水) 22:58:20メモ帳にこぴぺしてCygWinで実行したら、
parse error before~
だとか
braces around scalar initializer
というようなエラーが出ます。
主に配列の宣言・初期化のあたりで発言するのですが。
何が原因なのでしょうか
0111デフォルトの名無しさん
2009/12/16(水) 22:58:41型は変数でもメモリのアドレスでもない。
0112デフォルトの名無しさん
2009/12/16(水) 23:00:14え?
0113デフォルトの名無しさん
2009/12/16(水) 23:13:06pは214F23BCを指しているがintは指していない。
0114デフォルトの名無しさん
2009/12/16(水) 23:15:43決して「intを指すポインタの配列[要素数10]」型ではないので間違えないように。
0115デフォルトの名無しさん
2009/12/16(水) 23:18:25これはどういうこと?
0116デフォルトの名無しさん
2009/12/16(水) 23:19:580117デフォルトの名無しさん
2009/12/16(水) 23:23:01HOGEという文字列の先頭へのchar型の変数を指すポインタ変数
0118デフォルトの名無しさん
2009/12/16(水) 23:25:510119デフォルトの名無しさん
2009/12/16(水) 23:26:56char *x="abcde"
char x[]="abcde"
の区別ができてないバカ発見
0120デフォルトの名無しさん
2009/12/16(水) 23:27:090121デフォルトの名無しさん
2009/12/16(水) 23:27:39来ても良いけど回答者の側には来るなw
0122デフォルトの名無しさん
2009/12/16(水) 23:28:490123デフォルトの名無しさん
2009/12/16(水) 23:32:44117と177の区別ができてない馬鹿発見
0124デフォルトの名無しさん
2009/12/16(水) 23:32:54わざわざunsingedがついているところで、深読みをしてしまう。
昔は、char が unsigned のコンパイラも多かったなあ。
0125デフォルトの名無しさん
2009/12/16(水) 23:34:23書く場所によって意味が変わる。
関数の外なら
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];
の糖衣構文になる。
0126デフォルトの名無しさん
2009/12/16(水) 23:36:260127デフォルトの名無しさん
2009/12/16(水) 23:40:52関数の外も中も同じ意味だぞ。
>126 (== 125?)
代入とstrcpyは別だろ。
unsigned char TITLE[]="HOGE"
は初期化であって代入ではない。
なんか昨日からポインタの知識が怪しい奴が回答側にいるな。
初級者は注意すること。
中級者は間違い探しをするとイイかも。
0128デフォルトの名無しさん
2009/12/16(水) 23:41:22上級者様は上級者様専用のむずかしーいスレにいって戻ってくるなよ
0129127
2009/12/16(水) 23:43:58unsigned char TITLE[]="HOGE"
のunsignedはない方がよいかも。
文字列リテラルの型はconst charの配列だから。
0130デフォルトの名無しさん
2009/12/16(水) 23:45:400131デフォルトの名無しさん
2009/12/16(水) 23:46:070132デフォルトの名無しさん
2009/12/16(水) 23:47:31荒らすな。
0133デフォルトの名無しさん
2009/12/16(水) 23:50:25またわけのわからない読み方をするね。
宣言
int *p[10];
があるとき、pの型はint *[10]
ここまでは確定。
日本語にどう変換するかは規定されていないけどね。
あなたの日本語はよくわからない。
ポインタはポインタであって、アドレスではない。
アドレスを指すポインタ変数?
0134デフォルトの名無しさん
2009/12/16(水) 23:51:33int x=100;
これは初期化であって代入ではないらしい
0135デフォルトの名無しさん
2009/12/16(水) 23:51:510136デフォルトの名無しさん
2009/12/16(水) 23:54:08明示的にunsignedを付けたほうがいい。
他人に読ますときは特に
0137デフォルトの名無しさん
2009/12/16(水) 23:55:49>int *p=(int*)214F23BC;
>pは214F23BCを指しているがintは指していない。
pは214F23BCを指しているわけではない。
pの値が214F23BCであると言うだけ。
pは自分がどんな型を指しているか知っているので
*が適用されたときにどうやって値を取り出せばよいかわかる。
pが指しているのがintか、charか、struct{char x; short y; long z}なのかで
値の取り出し方が変わる。
0138デフォルトの名無しさん
2009/12/16(水) 23:58:05>int x=100;
>これは初期化であって代入ではないらしい
その通りですがなにか?
0139デフォルトの名無しさん
2009/12/16(水) 23:58:15これは普通に使うけど、
int (*p)[10];
これって使い道ある?
使ったことないぞ。
0140デフォルトの名無しさん
2009/12/17(木) 00:01:22関係ない話するなや
こんなところで「入門者バーカ」って言って悦にいってないでさっさと首つって市ね。
0141デフォルトの名無しさん
2009/12/17(木) 00:03:432次元配列を引数にとる変数の型。
void func(int p[10][10]);
のpの型がint (*p)[10]
後は組み込みでVRAMの先頭が与えられたときに
2次元配列として扱いたいときに、この型で領域の先頭を
指したりする。
0142デフォルトの名無しさん
2009/12/17(木) 00:04:20自分で回答する気はぜんぜんないくせに、間違った解答を見つけたとたん待ってましたとばかりにたたきにくる。
マジうぜぇわ。
0143デフォルトの名無しさん
2009/12/17(木) 00:05:010144デフォルトの名無しさん
2009/12/17(木) 00:05:14typedef int (*p)[10]
なら、稀によく使う
0145厨房 ◆hfigpiEhOM
2009/12/17(木) 00:05:380146デフォルトの名無しさん
2009/12/17(木) 00:06:260147デフォルトの名無しさん
2009/12/17(木) 00:07:07上級者は荒らし
0148デフォルトの名無しさん
2009/12/17(木) 00:07:210149デフォルトの名無しさん
2009/12/17(木) 00:07:46問題の出るコードを貼ってみたら。
だけど環境依存の問題だろうから、
こっちがイイかも
【初心者歓迎】C/C++室 Ver.70【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1258873470/
0150厨房 ◆hfigpiEhOM
2009/12/17(木) 00:10:45ポインターがどうのとか言っていたので改造コードにはC言語の知識が必要なのかと思いました。
以前
0151デフォルトの名無しさん
2009/12/17(木) 00:15:50そうなんだけどさ、セクション配置かスタックに積むかで
バイナリレベルじゃ変わってくるじゃん?てことを言いたいんじゃないかとおも
0152デフォルトの名無しさん
2009/12/17(木) 00:33:52とりあえず、アセンブラだけでなく機械語も覚えろ。
改造だけなら、言語としてはこれだけの知識しか使用しない。
0153デフォルトの名無しさん
2009/12/17(木) 00:35:25これらはもっとも重要なハッキング用言語だというだけでなく、
それぞれプログラミングに対してまったく違ったアプローチをしているので、どれも非常に有益な勉強となるでしょう。
0154厨房 ◆hfigpiEhOM
2009/12/17(木) 00:43:26アセンブリとか難しそうですね。
せめて自分でチートコード作れるくらいになりたいです。
まったくの初心者ですか今後ともよろしくお願いします。
ちなみに以前C言語も学習していましたが、ポインタで投げました。
また1からやり直したいと思います。
0155デフォルトの名無しさん
2009/12/17(木) 00:45:31#include <stdio.h>
char glob[]="HOGE";
void func(int n){
static char sta[]="HOGE";
char aut[]="HOGE";
printf("d%回目\n", n);
printf("global: %s\n", glob);
printf("static: %s\n", sta);
printf("auto: %s\n", aut);
glob[1] = 'A';
sta[1] = 'A';
aut[1] = 'A';
}
int main(){
func(1);
func(2);
return 0;
}
0156デフォルトの名無しさん
2009/12/17(木) 00:49:25C++ は要らねえな。
0157デフォルトの名無しさん
2009/12/17(木) 01:01:570158デフォルトの名無しさん
2009/12/17(木) 01:08:00例えば
int a;
scanf("%d", &a);
switch (a)
{
case 1:
int b;
break;
case 2:
double b;
break;
case 3:
char b;
break;
}
こんな感じで。
0159デフォルトの名無しさん
2009/12/17(木) 01:11:23普及してるが、FORTRAN、COBOLと同じ道を歩み始めている。
0160デフォルトの名無しさん
2009/12/17(木) 01:14:26scanf("%d", &a);
viod b;
switch (a)
{
case 1:
int c=(int)b;
break;
case 2:
double c=(double)b;
break;
case 3:
char c=(char)b;
break;
}
0161デフォルトの名無しさん
2009/12/17(木) 01:29:59通常は、必要に応じてキャストすればいい。
つか、どうしたいんだ?
0162デフォルトの名無しさん
2009/12/17(木) 01:49:45無理。
たとえば、Windows の COM なら VARIANT型を使えば、なんとなくそれっぽいことができるが、入門レベルではない。
0163デフォルトの名無しさん
2009/12/17(木) 01:57:19つか、その質問だけでは何がしたいのかが伝わってこないから答えられん。
0164デフォルトの名無しさん
2009/12/17(木) 02:23:46ここをintでもcharでもいけるにしたい
↓
void function(double *v1)
{
int i;
for(i=0;i<10;i++)
{
//型の関係のない数値計算
P[i]=〜
}
}
ていうことです。
0165デフォルトの名無しさん
2009/12/17(木) 02:24:31ユーザ関数ではとりあえずvoid*型でポインタを引数を受け取って、引数の中に型のタイプの情報(上のscanfのa)
を入れて、それに応じてキャストすればいけるかなと思ったわけです。
void function(void *v1,char a)
{
int i;
switch(a)
{
case 1:
int *P;
P=(int*)v1;
break;
case 2:
double *P;
P=(double*)v1;
break;
case 3:
char *P;
P=(char*)v1;
break;
}
for(i=0;i<10;i++)
{
//型の関係のない数値計算
P[i]=〜
}
}
0166デフォルトの名無しさん
2009/12/17(木) 02:38:04設計からやり直した方がいいよ。
0167デフォルトの名無しさん
2009/12/17(木) 03:00:09{
int iheight;
int iweight;
}
この様に定義された構造体データ(idataNum件)を
身長順にダブルポインタを使ってソートをかけたいのですが、
そのダブルポインタのスワップ処理が分からず困っています・・・。
void swap( DATA** stData_ptr, int idataNum)
{
DATA* stSwap;
for( int i = 0; i < idataNum-1; i++ )
{
for( int n = i + 1; n < idataNum; n++ )
{
if( (*stData_ptr + i )->iheight > (*stData_ptr + n )->iheight )
{
stSwap = ( *stData_ptr + i );
( *stData_ptr + i ) = ( *stData_ptr + n ) ;
( *stData_ptr + n ) = stSwap ;
}
}
}
}
てな感じで自分なりに試行錯誤してみたのですが、どうしてもスワップ部でエラーが出てしまいます。
どうか、お力をお貸しして頂けないでしょうか?
0168デフォルトの名無しさん
2009/12/17(木) 03:02:530169デフォルトの名無しさん
2009/12/17(木) 03:16:59なんで変な書き方したがるかなぁ?
0170デフォルトの名無しさん
2009/12/17(木) 03:19:540171デフォルトの名無しさん
2009/12/17(木) 03:28:48ありがとうございます。
stSwap = *(stMyData+i);
*(stMyData+i) = *(stMyData+n);
*(stMyData+n) = stSwap;
このようにやってみたところ、一応コンパイルは通るのですが、
実行させてみるとメモリー違反っとなってしまいます・・・。
>>168
ごめんなさい。その書き方もあまり分からないので・・・・
0172デフォルトの名無しさん
2009/12/17(木) 04:59:27この世の事実はすべてint型。
つまりint*型とint[]型とint型さえ使うことができればあらゆるプログラムの困難は解決する。
0173デフォルトの名無しさん
2009/12/17(木) 05:01:07マクロで無理矢理やるというおよそ非実用的な手段がある。
#define DEFINE_FUNCTION(type) \
void function_ ## type(type *v1) \
{ \
int i; \
for(i=0;i<10;i++) \
{ \
P[i]=〜 \
} \
}
そして、こんな風に引数として使いたい型だけマクロを並べる。
DEFINE_FUNCTION(int)
DEFINE_FUNCTION(dobule)
すると、それぞれ型に応じたfunction_int、funciton_doubleって関数が出来上がる。
こんなことするくらいだったら、C++のテンプレートを使ったほうがましなんだけど、ここはCのスレだし。
0174デフォルトの名無しさん
2009/12/17(木) 05:02:23そんなものもint*型の前にはひれふすことになる。
0175デフォルトの名無しさん
2009/12/17(木) 07:32:49そういうときは、union使うといい
struct hoge {
int data_type; // 0:int 1:char 2:double ...
union {
char c;
int i;
double d;
...
} u;
};
0176デフォルトの名無しさん
2009/12/17(木) 07:39:33いやその解は有りえんから
0177デフォルトの名無しさん
2009/12/17(木) 11:26:16{
int i;
for(i=0;i<10;i++)
{
//型に応じた数値計算
switch(a)
{
case 1:
//((int*)v1)[i];
break;
case 2:
//((double*)v1)[i];
break;
case 3:
//((char*)v1)[i];
break;
}
}
}
こうはできないものかと妄想したが
0178デフォルトの名無しさん
2009/12/17(木) 12:59:18そんなのが必要になる状況なんてありえないだろ。
0179デフォルトの名無しさん
2009/12/17(木) 13:20:43そうでなけりゃ C++ で template 使え。
0180デフォルトの名無しさん
2009/12/17(木) 14:05:170181デフォルトの名無しさん
2009/12/17(木) 14:48:26もしできるのなら詳しくソースコードを教えてください
0182デフォルトの名無しさん
2009/12/17(木) 14:49:250183デフォルトの名無しさん
2009/12/17(木) 14:50:070184デフォルトの名無しさん
2009/12/17(木) 15:04:330185デフォルトの名無しさん
2009/12/17(木) 15:11:030186デフォルトの名無しさん
2009/12/17(木) 15:14:02漢字使ってる場合とかは読みを別に入力して、その読みの順でソートするんだよ?
読みはローマ字表記のものもあればかな表記のものあるけど
どちらにせよその後は普通のソートだよ
0187デフォルトの名無しさん
2009/12/17(木) 15:53:48比較して自分が並べたい順に並べるしかないだろ。
「太郎」と「次郎」はどっちが先だ?
0188デフォルトの名無しさん
2009/12/17(木) 15:57:48文字コード順なら太郎が咲き
0189デフォルトの名無しさん
2009/12/17(木) 16:02:370190デフォルトの名無しさん
2009/12/17(木) 16:07:14次郎と書いて「つぐろう」と読ませたり
出生届けの読みが自由ってどうなんだろうな
0191デフォルトの名無しさん
2009/12/17(木) 16:14:43読み仮名を登録しないだけかんだから「読ませ方」も自由なら「読み方」も自由
自分の好きな読み方で処理すれば良い
0192デフォルトの名無しさん
2009/12/17(木) 16:15:29読みは登録しないだろ
0193デフォルトの名無しさん
2009/12/17(木) 16:16:260194デフォルトの名無しさん
2009/12/17(木) 16:18:22読み以外の何で整列させればいいんだろ
0195デフォルトの名無しさん
2009/12/17(木) 16:19:39○ 前編を後編より先にしたい場合に
0196デフォルトの名無しさん
2009/12/17(木) 16:21:05正規表現
ハードコーディングで頑張れ
0197デフォルトの名無しさん
2009/12/17(木) 16:24:26正規表現はCで使えたっけ?
0198デフォルトの名無しさん
2009/12/17(木) 16:29:36「この顧客リストを強い順にソートしてくれ」
0199デフォルトの名無しさん
2009/12/17(木) 16:39:490200デフォルトの名無しさん
2009/12/17(木) 18:12:330201デフォルトの名無しさん
2009/12/17(木) 18:14:300202デフォルトの名無しさん
2009/12/17(木) 18:17:05ん〜000000とかの付属情報なしに純粋に文字コードだけ抜き出したいです。
0203デフォルトの名無しさん
2009/12/17(木) 18:19:310204デフォルトの名無しさん
2009/12/17(木) 18:25:04”3042304430463048304a”と書き出されるイメージです。
0205デフォルトの名無しさん
2009/12/17(木) 18:31:57意外と難しいのがセンタリング
フィールドの大きさをまず測る
一文字だけなら、その中心部分、半分に割った位置にフォントの中心部分を置けばいいが
文字数が増えたときのオフセットの取り方が意外とパッと出てこないもの。
普通にやると
「堀 川 掘 ら れ た 町」
にならず、
「堀川掘 られた町」
みたいになってしまう
0206デフォルトの名無しさん
2009/12/17(木) 18:33:340207デフォルトの名無しさん
2009/12/17(木) 18:34:50/'".:=≡ミ_≧_尨彡三:ヽ、≧_尨彡三:ヽ、彡三:ヽ、三:ヽ、:ヽ、
//.:;:彡:f'"´‐------ ``'r=:l------ ``'r=:l-- ``'r=:l ``'r=:l 'r=:l
/〃彡_彡′,.=、 ̄ ̄ ,.=、 |ミ:〉 ̄ ̄,.=、 |ミ:〉,.=、 |ミ:〉、 |ミ:〉|ミ:〉
'y=、、:f´===tr==、.___,. ==、._ゞ{=、.___,. ==、._ゞ{,. ==、._ゞ{==、._ゞ{._ゞ{
{´yヘl'′ | /⌒l′ |`Y} /⌒l′ |`Y}′ |`Y} |`Y}|`Y} ああきあきらあきらめあきらめた
゙、ゝ) `''''ツ_ _;`ー‐'゙:::::l{ノ_ _;`ー‐'゙:::::l{_;`ー‐'゙:::::l{‐'゙:::::l{゙:::::l{ そそこそこでそこで試そこで試合
. ヽ.__ ,ィnmmm、 .:::|!mmm、 .::|!m、 .::|! .::|! .::|!
,.ィ'´ト.´ ´`"`"`゙″ .::::;'`"`"`゙″ .:::;'`゙″ .:::;'″ .:::;' .:::;'
イ´::ノ|::::l \ "' :::/ "' :::/' :::/ :::/ :::/
::::::::::::|:::::l ヽ、 ..:: .:::/.、 ..:: .:::/.、 ..:: .:::/.、: .:::/.、::/.、
:::::: ::: |:::::ヽ ヽ、.......::::/..:::/!\\:/..:::/!\\::/!\\ !\\ \
::::::::::: |::::::::ヽ ``''‐--ァt''′ |!:::ヽ:::\t''′ |!:::ヽ:::\|!:::ヽ:::\:::ヽ:::\:\
:::::::::::::|::::::::::::ヽ、 /i|iト、 |l:::::::ヽ:::::\ |l:::::::ヽ:::::\::::ヽ:::::\:ヽ:::::\:\
:::::::::::::|::::::::::::::/:ヽ、 ∧|i|i|i|〉. ||::::::::::ヽ:::::::\||::::::::::ヽ:::::::\:::ヽ:::::::\ヽ::::::\:\
0208デフォルトの名無しさん
2009/12/17(木) 18:47:020209デフォルトの名無しさん
2009/12/17(木) 18:47:2316進ダンプのことあまり理解してなかったみたいなので出直してきます
0210デフォルトの名無しさん
2009/12/17(木) 19:38:540211デフォルトの名無しさん
2009/12/17(木) 19:40:49パ
/ | \
チ | グ
/ チ \
グ | チ
| \ | / |
| チ グ グ |
パ \ / グ
| パ パ チ |
| / | \ |
チ | パ
\ チ /
パ | チ
\ | /
グ
0212デフォルトの名無しさん
2009/12/17(木) 19:56:200213デフォルトの名無しさん
2009/12/17(木) 21:01:16天才現る!
と思ったら、ソートできてねぇ!w
0214デフォルトの名無しさん
2009/12/17(木) 21:21:280215デフォルトの名無しさん
2009/12/17(木) 23:56:41まず配置のルールがわからない
発想はともかくもっと根本的な部分を調整しろよ
0216デフォルトの名無しさん
2009/12/18(金) 00:08:46ふっ
0217デフォルトの名無しさん
2009/12/18(金) 00:39:29int *p;
{
int x;
p=&x;
}
p[1]=500;
こんなのでも正常にうごいてる(ようにみえる)かもしれないし。
0218デフォルトの名無しさん
2009/12/18(金) 00:46:00>175の方法は普通によくやる。
ていうか>165を見てはじめに思いつくのはこれ。
>178
共用体は、引数に汎用性を持たせたいフレームワーク、メッセージインターフェイス
とかでよく利用する。
後はジャンプテーブルを使うために、関数のプロトタイプ宣言をそろえたいけど、
引数はいろいろあり得るような場合は、引数をvoid*にしたり共用体で渡したりする。
>179
関数のプロトタイプ宣言をそろえるのがミソなので、templateは使えない。
0219デフォルトの名無しさん
2009/12/18(金) 00:48:53そうだね。不具合が発生するのが、全然別の場所、タイミングだったりするのが
やっかいだよね。
0220デフォルトの名無しさん
2009/12/18(金) 06:06:03たしかにやっかいだよね。
0221デフォルトの名無しさん
2009/12/18(金) 09:22:03これだけ勘違いカキコする奴もメヅラシイな
普段何やってんだろ??
0222デフォルトの名無しさん
2009/12/18(金) 09:25:040223デフォルトの名無しさん
2009/12/18(金) 09:31:21別におかしくは無い。
0224デフォルトの名無しさん
2009/12/18(金) 10:05:26おかしくないと思う
0225デフォルトの名無しさん
2009/12/18(金) 10:40:09最後の行は何か勘違いしているように思えてならないが、
まあスレ違いだしどうでもいいや。
0226デフォルトの名無しさん
2009/12/18(金) 10:50:42va_start
自分は使ったことないけど、これじゃダメなの?
ttp://wisdom.sakura.ne.jp/programming/c/c62.html
>printf()関数などは、フォーマット指定子によって引数リストの個数と型をチェックしていますね
と同じように型チェックしてから、、とか
0227デフォルトの名無しさん
2009/12/18(金) 11:42:010228デフォルトの名無しさん
2009/12/18(金) 11:42:440229デフォルトの名無しさん
2009/12/18(金) 11:44:380230デフォルトの名無しさん
2009/12/18(金) 11:49:19結局、何らかの形で型を示す引数を一緒に渡すわけで
>>165 から何も変わっていない。
0231デフォルトの名無しさん
2009/12/18(金) 11:53:270232デフォルトの名無しさん
2009/12/18(金) 12:51:390233デフォルトの名無しさん
2009/12/18(金) 12:54:290234デフォルトの名無しさん
2009/12/18(金) 17:06:34判ってる奴は奴では一行レスのチャチャ入れるだけだからグダグダになるのは仕方がない
0235デフォルトの名無しさん
2009/12/18(金) 17:37:080236デフォルトの名無しさん
2009/12/18(金) 19:25:04> なにがしたいか分からんので、茶々入れるしかない。
もう一度 冷静に自分の言っていることを検証したまえ。
0237デフォルトの名無しさん
2009/12/18(金) 19:43:03キャッチコピーは「戦略的穴掘りゲーム」だろ?
0238デフォルトの名無しさん
2009/12/18(金) 19:50:190239デフォルトの名無しさん
2009/12/18(金) 20:02:520240デフォルトの名無しさん
2009/12/18(金) 22:49:36よくバイソンとかシーインクリメントとかで見るんだけど
なんこれ。
0241デフォルトの名無しさん
2009/12/18(金) 23:27:25戦略的穴掘りゲームおもしろそう
0242デフォルトの名無しさん
2009/12/18(金) 23:29:490243デフォルトの名無しさん
2009/12/19(土) 00:05:15{
int num = 567;
num = num / 10;
num = num % 10;
printf( "%d\n", num );
return 0;
}
これを剰余演算を使わずに書きたいんですが、できますか?
0244デフォルトの名無しさん
2009/12/19(土) 00:10:37remainder = dividend - quotient * divisor
0245デフォルトの名無しさん
2009/12/19(土) 00:13:09を
num - (num / 10) * 10
にする。
0246デフォルトの名無しさん
2009/12/19(土) 00:19:58int num = 6:
0247デフォルトの名無しさん
2009/12/19(土) 00:20:340248デフォルトの名無しさん
2009/12/19(土) 00:24:55itoaを使う方法考えてたのに〜
0249デフォルトの名無しさん
2009/12/19(土) 00:26:130250デフォルトの名無しさん
2009/12/19(土) 00:30:20すまんな…
0251デフォルトの名無しさん
2009/12/19(土) 07:11:41シーインクリメントとは斬新な呼び方だね。
けどなぜCスレで聞く?
もしかしてスルーが正解だったか?戦略的穴掘りに落ちちゃった?
0252デフォルトの名無しさん
2009/12/19(土) 08:42:080253デフォルトの名無しさん
2009/12/19(土) 09:00:32int main(void)
{
int data1 , data2, total, average;
printf("データ1? ");
scanf("%d",&data1);
printf("データ2? ");
scanf("%d",&data2);
total = data1 + data2;
average = total / 2;
printf("合計 : %d\n",total);
printf("平均 : %d\n",average);
return 0 ;
}
何が間違っているか教えてくれないでしょうか?
0254デフォルトの名無しさん
2009/12/19(土) 09:11:200255デフォルトの名無しさん
2009/12/19(土) 09:12:04何を聞きたいのか書いてないから
質問の仕方が間違ってるんじゃないの?
0256デフォルトの名無しさん
2009/12/19(土) 09:29:380257デフォルトの名無しさん
2009/12/19(土) 09:54:57average=total/2.0;
もしかしてこれがしたいのでは無かろうか
0258デフォルトの名無しさん
2009/12/19(土) 10:00:03言っておくがそれも間違いだからな
average = (double)total / 2.0;
じゃなきゃおかしなことになる
0259デフォルトの名無しさん
2009/12/19(土) 10:03:060260デフォルトの名無しさん
2009/12/19(土) 10:11:30つられクマー。
0261デフォルトの名無しさん
2009/12/19(土) 10:59:48scanfが取ったバッファをクリアしてからでないとうまく取れない。
stdinから取ったら、stdinバッファをカラにしてから別のを取らないといけない
scanfは対象の変数のアドレスに値を入れるのではなく
stdinから取得バッファに入れてそこからアドレスに入れるのだ
0262デフォルトの名無しさん
2009/12/19(土) 11:10:03何のための2.0だよ
0263デフォルトの名無しさん
2009/12/19(土) 11:26:31それともmallocで確保したときのアドレスを保持したままですか?
まったく別でしょうか?
0264デフォルトの名無しさん
2009/12/19(土) 11:30:03NULLを指すようにしたければ自分でNULLを代入してください
0265デフォルトの名無しさん
2009/12/19(土) 11:31:340266デフォルトの名無しさん
2009/12/19(土) 11:32:120267デフォルトの名無しさん
2009/12/19(土) 11:37:440268デフォルトの名無しさん
2009/12/19(土) 11:52:06メモリが有限だから?
仮にメモリ領域が無限だったらfreeしなくていいの?
0269デフォルトの名無しさん
2009/12/19(土) 11:54:240270デフォルトの名無しさん
2009/12/19(土) 11:55:57無限だったらしなくていいかもね
0271デフォルトの名無しさん
2009/12/19(土) 12:06:100272デフォルトの名無しさん
2009/12/19(土) 12:09:360273デフォルトの名無しさん
2009/12/19(土) 12:10:250274デフォルトの名無しさん
2009/12/19(土) 12:50:23シミカァロン(英語は発音大事)抜き
ThisIsAPointerForMalloc = Mr_malloc(FUCKINGTOSHINGBUFFERSIZETHATFUCKINGOSINGXING)
if(ThisIsAPointerForMalloc == NULL)
Fucking
なんかムカつく
普通は
if( (ThisIsAPointerForMalloc = Mr_malloc(FUCKINGTOSHINGBUFFERSIZETHATFUCKINGOSINGXING)) == NULL)
だろ
0275デフォルトの名無しさん
2009/12/19(土) 12:52:190276デフォルトの名無しさん
2009/12/19(土) 12:53:28っていう縛りもムカつく
ネイティブから見ると、大文字ってのは大声で叫んでるようにしか見えない。
つまり
FUCKINGOSINGXING
ってのは
FuckingOSingXing!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
って怒りながら叫んでいるように見えるのだ。
それと自分で書いておいてなんだが
is の i だけ大文字にするとすげえ不自然きわまる。
0277デフォルトの名無しさん
2009/12/19(土) 13:00:310278デフォルトの名無しさん
2009/12/19(土) 13:04:000279デフォルトの名無しさん
2009/12/19(土) 13:42:47free(void*)
char *Memory_of_Love;
Memory_of_Love = (char *)malloc(MemorySize512);
ここで
free((void *)Memory_of_Love)
これも何だかなあと思う
void * は別の型にキャストできても
他の型からvoid* にはできないはずである。
またvoid*は「何の型でもいい」から、そのまま渡せば何が来てもウェルカムだから
キャストしても意味あらへん
0280デフォルトの名無しさん
2009/12/19(土) 13:45:210281デフォルトの名無しさん
2009/12/19(土) 14:19:13満足です
0282デフォルトの名無しさん
2009/12/19(土) 14:24:02林先生の出番だろw
0283デフォルトの名無しさん
2009/12/19(土) 14:26:500284デフォルトの名無しさん
2009/12/19(土) 15:51:01シーインクリメントインクリメントのことなら、
俺はシーイクイクって略してる
0285デフォルトの名無しさん
2009/12/19(土) 16:26:15インクリメント・デクリメント・サクラメント・ハラスメント
Cだと++って書けば自動的に値が1増えるし
--って書けば自動的に値が1減るが
CPUの機能として、そのようなものを持っていないものが多い。
特にRISC。
これらのCPUではアセンブラになると逆にそういうことができない。
1命令で値を増減させることが出来ないだけで、ADDなどで増やしてやればいいだけだが。
残るサクラメントとハラスメントだが、CPUには何の関係もない。
単なる語呂合わせに過ぎん。
0286デフォルトの名無しさん
2009/12/19(土) 16:29:33今はもうアセンブラで書くやつはいないから CISC はレガシーだな。
0287デフォルトの名無しさん
2009/12/19(土) 16:31:20いかにもわかったような口ぶりでウソ書いてるやつってちょくちょく
見るけど、どういうつもりなのかマジで疑問。
0288デフォルトの名無しさん
2009/12/19(土) 16:35:40SSE3だのSSE4だのコンパイラが上手く扱えない妙な命令が次々に増えていく現状をどう見るかね
0289デフォルトの名無しさん
2009/12/19(土) 16:36:38が、いろんなところでよく使われるMIPSはそんな便利な命令はない。
むしろ、インクリメントなどの命令があるSHとかがRISC陣営では異端中の異端
0290デフォルトの名無しさん
2009/12/19(土) 16:39:46それ、認識が十数年くらい遅れてる。
0291デフォルトの名無しさん
2009/12/19(土) 16:40:54結局1命令なので実質あるのと同じ
0292デフォルトの名無しさん
2009/12/19(土) 17:05:400293デフォルトの名無しさん
2009/12/19(土) 17:20:40感謝しながら使えよ
あと風呂でションベンするときはお風呂の神様ごめんなさい
だ
0294デフォルトの名無しさん
2009/12/19(土) 17:56:28> void * は別の型にキャストできても
> 他の型からvoid* にはできないはずである。
逆だ。
0295デフォルトの名無しさん
2009/12/19(土) 18:48:15いやあってる。
char *p;
if ((p = malloc(sizeof(struct hoge))) == NULL)
とかけるのは >>279 があっている証拠
0296デフォルトの名無しさん
2009/12/19(土) 19:14:040297デフォルトの名無しさん
2009/12/19(土) 19:39:58279は暗黙のキャストも知らないような
自称上級者なんだから触れんな。
0298デフォルトの名無しさん
2009/12/19(土) 20:11:55あえて明示的にキャストすることでソースの可読性がうんたらかんたら
とかゴチャゴチャ言い出すぞきっと
0299デフォルトの名無しさん
2009/12/19(土) 20:23:48>void * は別の型にキャストできても
>他の型からvoid* にはできないはずである。
>他の型からvoid* にはできないはずである。
が、まさしく「自分は初心者です」ってアピールしてるんだよな。
0300デフォルトの名無しさん
2009/12/19(土) 20:33:430301デフォルトの名無しさん
2009/12/19(土) 20:37:5312345678って書くか[12345678]って書くかの違いだけで。
0302デフォルトの名無しさん
2009/12/19(土) 20:49:04ポインタが int という仮定は例外が多い。
0303デフォルトの名無しさん
2009/12/19(土) 20:54:54ポインタは「整数型」への変換は保証されているが
「int」への変換は保証されていない。
(逆変換で戻したときに情報が失われる可能性がある)
0304デフォルトの名無しさん
2009/12/19(土) 21:17:28どこが間違っているのでしょうか
#include<stdio.h>
void baisuu(int y)
{
int b;
for(b=2;b<=20;b++)
{
if(y%b)
printf("%dの倍数です",b);
}
int main(void)
{
int x;
printf("整数を入力してください\n小数点以下は切り捨てます\n");
scanf("%d",&x);
baisuu(x);
return 0;
}
0305デフォルトの名無しさん
2009/12/19(土) 21:24:07!
0306デフォルトの名無しさん
2009/12/19(土) 21:30:07論理式に単項式だけを書くやり方
そう if( y % 3)とかwhile( !p )とか
はかっこいい
ように見えて実は
古くダサい
し、下らないミスの温床
if( (y % 3) != 0)とか
while( p != 0 )とか
書く癖のほうが類似書式のプログラミング言語(Javaとか)
も使うようになった時を考えるといい
0307デフォルトの名無しさん
2009/12/19(土) 21:31:00void baisuu(int y)にも}が足らん
0308デフォルトの名無しさん
2009/12/19(土) 21:37:54今度は「左辺値が必要」というエラーが出て
うまく倍数判定もできません
void baisuu(int y)
{
int b;
for(b=1;b<=20;b++)
{
if((y%b)=0)
printf("%dの倍数です\n",b);
}
}
0309デフォルトの名無しさん
2009/12/19(土) 21:42:51ととして
((a-shift)?(a-shift):2)
の演算でおかしな挙動するので調べてみたら
a-shiftがマイナスでも真と判定されてた
(((a-shift)>0)?(a-shift):2)
としたらちゃんと動いた
真と偽の動作を勘違いしてました
0310デフォルトの名無しさん
2009/12/19(土) 21:43:31それは代入だろ。
y % b == 0
0311デフォルトの名無しさん
2009/12/19(土) 21:45:36おお、ちゃんと動きました
=と==の違いを忘れてました
0312デフォルトの名無しさん
2009/12/19(土) 21:54:24さすがに上級者はそんな間違いをする人はいなくなるが。
0313デフォルトの名無しさん
2009/12/19(土) 22:01:51どうしてこうなったのか。
おかげで等価演算子は == という悲しさ。。
0314デフォルトの名無しさん
2009/12/19(土) 22:07:20面倒なことはできるだけしない、可能な限りシンプルにしたい、そう考えると納得がいく
0315デフォルトの名無しさん
2009/12/19(土) 22:22:540316デフォルトの名無しさん
2009/12/19(土) 22:49:47pascal のように代入を := にし、比較は == にすれば公平でいいかも。
0317デフォルトの名無しさん
2009/12/19(土) 23:02:430318デフォルトの名無しさん
2009/12/19(土) 23:08:46おれはめっちゃ初心者のときしか間違えてないよ。
0319デフォルトの名無しさん
2009/12/19(土) 23:19:2720年前は、
char *p, *q;
...
if (p = q) {...}
で、この = は間違ってないというような書き方が普通に行われていた。
0320デフォルトの名無しさん
2009/12/19(土) 23:29:35…みたいな考え方のアフォとは一緒に仕事したくないな。
0321デフォルトの名無しさん
2009/12/19(土) 23:33:07それは、今は警告でるし。
>>320
そういうのは状況によるとしかいいようがない。
「冗長に書けば書くほどわかりやすい」とか思ってるやつも勘弁して欲しいし。
0322デフォルトの名無しさん
2009/12/19(土) 23:35:15繰返し回数は可能な限り少ない方が良い。
0323デフォルトの名無しさん
2009/12/19(土) 23:40:1230年前の間違いだろ。
20年前は既に警告出すコンパイラが主流だし
わかりやすさを優先することが当然になっていたよ。
まあ類は友を呼ぶというから
そういう人達の間ではそれが普通だったのかもしれんがね。
0324デフォルトの名無しさん
2009/12/19(土) 23:42:29printfもpfとかに名前をかえて
int a;
void f(){
pf("asdf");
}
こんなことしたがるような人?
0325デフォルトの名無しさん
2009/12/19(土) 23:43:270326デフォルトの名無しさん
2009/12/19(土) 23:48:26質問内容はコンパイルの出来ない理由を御聞きしました。
どうやら原因は全角スペースに問題があったみたいです。
回答してくれた方ありがとうございます。
0327デフォルトの名無しさん
2009/12/19(土) 23:49:58そういう考えでできたのが構造体やクラスや配列なんだろうな
int Taro_age;
int Taro_ID;
char* Taro_Name;
char* Taro_EmailAddress;
int Hanako_age;
int Hanako_ID;
・
・
・
みたいに一個一個作ってたら大変だし。
0328デフォルトの名無しさん
2009/12/20(日) 00:13:15int* p;
p=&x;
printf("%d",p);
この結果が毎回違うのはなぜ?
アドレス固定することはできないの?
0329デフォルトの名無しさん
2009/12/20(日) 00:17:15pに格納しているxのアドレスを表示している
0330デフォルトの名無しさん
2009/12/20(日) 00:20:130331デフォルトの名無しさん
2009/12/20(日) 00:21:19int* p;
p=&x;
printf("%d",p);
int x;
int* p;
p=&x;
printf("%d",&x);
int x;
int* p;
p=&x;
printf("%d",*p);
int x;
int* p;
p=&x;
printf("%d",x);
0332319
2009/12/20(日) 00:28:57少々遅レスで悪いが、30年前だと、K&Rの出版年になっちゃいますね。
20年じゃなくてもう2,3年前かも知らんけど、warningがたくさん出るようになったのは ANSI-C普及と同時期だったような気がする。
前のは例が悪かったけど、少なくとも当時は、
while (!(p = p->next)) { ... }
といった書き方はごく普通だったと思うし、悪いともされてなかったと思う。
このスレでもキャストうざい派がいるように、いまだに警告無視する人はいるみたいですよ。
0333デフォルトの名無しさん
2009/12/20(日) 00:32:26俺もそう思ってたが
先週 != を ! = と書いて
すっげー落ち込んだ
0334デフォルトの名無しさん
2009/12/20(日) 00:34:540335デフォルトの名無しさん
2009/12/20(日) 00:35:38確かに、警告を出すのは比較的あたらしいコンパイラって印象がある。
そもそもこの警告って、C言語の文法に違反してるとかじゃなくて
よくある間違いだから、って理由だしね
0336デフォルトの名無しさん
2009/12/20(日) 00:37:210337デフォルトの名無しさん
2009/12/20(日) 00:40:36プゲラ
トーシロは黙ってろよwww
0338デフォルトの名無しさん
2009/12/20(日) 00:41:560339デフォルトの名無しさん
2009/12/20(日) 01:30:05それは可読性を考えたらこっちがよくないか?
(( a > shift) ? (a-shift) : 2)
0340デフォルトの名無しさん
2009/12/20(日) 01:34:36そのコードで&xの値が毎回同じになることを期待してはいけない。
自分でメモリ管理するのでなければ、変数やmallocの具体的な
値については、知らなくてイイし、依存するようなコードを書くべきではない。
0341デフォルトの名無しさん
2009/12/20(日) 01:45:170342デフォルトの名無しさん
2009/12/20(日) 01:53:360343デフォルトの名無しさん
2009/12/20(日) 02:37:24char a[10];
strcpy_s(a, "こんにちわ"); ・・・・・・・ これは正常に動きます。
a = "こんにちわ" ・・・・・・・ これはエラーになります。なぜでしょう。
a は配列の先頭アドレスです。"こんにちわ"も配列の先頭アドレスです。
a = "こんにちわ"は、アドレスをコピーするだけなので正常に動く気がしてしまうのです。
エラーメッセージは、「const char [11]' から 'char [20]' に変換できません。」です。
変換?「=」は代入を行っているわけではないのでしょうか?
0344343
2009/12/20(日) 02:38:140345デフォルトの名無しさん
2009/12/20(日) 02:45:400346デフォルトの名無しさん
2009/12/20(日) 02:49:450348デフォルトの名無しさん
2009/12/20(日) 03:04:01a = "こんにちわ";
0349デフォルトの名無しさん
2009/12/20(日) 03:17:270350デフォルトの名無しさん
2009/12/20(日) 03:19:20これを試してみ
char a[11];
a = "こんにちわ";
VBとかJavaに慣れてると、Cの配列や文字列は扱いづらいよね
最初のうちは参考書をちゃんと見た方がいいよ
0351デフォルトの名無しさん
2009/12/20(日) 03:26:340352デフォルトの名無しさん
2009/12/20(日) 03:42:52配列と文字列リテラルは一緒じゃないよ。
文字列リテラル"こんにちは"は、その時点でメモリのどこかに確保されてるわけじゃない。
確保されてない領域のアドレスを代入しても意味が無い。
配列がポインタに成り下がるのは"右辺"のみ。配列の内容はあくまで[20]の部分。
アドレスじゃなくて配列の内容を書き換えたいのだから、単純な代入ではできない。
0353デフォルトの名無しさん
2009/12/20(日) 04:06:47と
char *p = "こんにちわ";
は全くの別物。
0354デフォルトの名無しさん
2009/12/20(日) 04:12:26char a[20]="因習文法";
は禁止される予定
SJISとして
char a[20]={ 0["一貫文法"],1["一貫文法"],2["一貫文法"],3["一貫文法"],
4["一貫文法"],5["一貫文法"],};
てな感じしか許されなくなる可能性も示唆
0355デフォルトの名無しさん
2009/12/20(日) 04:13:32バカ?
0356デフォルトの名無しさん
2009/12/20(日) 05:08:580357デフォルトの名無しさん
2009/12/20(日) 06:20:56配列とポインタ、アドレスの理解がごちゃごちゃになってるからそうなる。
0358デフォルトの名無しさん
2009/12/20(日) 06:40:450359デフォルトの名無しさん
2009/12/20(日) 07:41:09もちろん特点加算無し
0360デフォルトの名無しさん
2009/12/20(日) 07:59:150361デフォルトの名無しさん
2009/12/20(日) 08:02:19メモリが100GB、CPUの処理速度も今の数百倍とかになったら
C言語も変わるかなぁ
0362デフォルトの名無しさん
2009/12/20(日) 08:57:45>>350は文字列と配列をなんにも分かってない。
0363デフォルトの名無しさん
2009/12/20(日) 09:29:34そりゃスタイルは多少変化するだろうけど
コンピュータの仕様が根本的に変わらない限りCに望まれる働きも変わらないはず
新しい環境に合わせたプログラミングモデルを作るのはむしろ派生言語の役目だと思う
0364デフォルトの名無しさん
2009/12/20(日) 09:45:20お前には言ってないからw
0365デフォルトの名無しさん
2009/12/20(日) 09:46:16とりあえず、「配列には代入できないから」と思ってください。
正確には、配列は式の中では、「その先頭要素を指すポインタ」
として評価されるが、それは「代入できない左辺値」であるから。
ついでに(初期化付き)宣言と式では文法が別物になっている。
char a[20] = "hello";
はOK
char a[20];
a = "hello";
はNG
0366デフォルトの名無しさん
2009/12/20(日) 09:52:41疑問の主旨とは変わるけど
strcpy_sだったら、そのコードコンパイル通らないんじゃないの?
CRT-Cだと思うから、こんなコードじゃね?
strcpy_s(a, sizeof(a), "hello");
0367デフォルトの名無しさん
2009/12/20(日) 09:55:14と思う
0368デフォルトの名無しさん
2009/12/20(日) 10:02:38そして、だれもが曖昧な理解だけで通り過ぎていく箇所だわな。
0369デフォルトの名無しさん
2009/12/20(日) 10:05:55ちょっと説明が怪しいぞ。
Cの文法のイヤらしいところでわかりにくいのだけれどさ。
文字列リテラルの型はconst char[文字列長]で、普通は
書込不能な静的メモリ領域に置かれる。これは>343
でエラーになることとは直接関係ない。
「配列がポインタに成り下がるのは"右辺"のみ。」
はそんな感覚でよいと思うけど、正確には
「配列を評価すると代入できない左辺値となる」
char a[10];
a[0] = 1;
は左辺だけど、ポインタとして評価されている。
0370デフォルトの名無しさん
2009/12/20(日) 11:19:19最近は大学でさえ教えないからな
俺のときはやったのに
0371デフォルトの名無しさん
2009/12/20(日) 11:29:46Z80を使ったアセンブラ演習はした。
テンキーでマシン語入力して実行させるんだよな。
ステップ実行でメモリを観察しながら。
0372デフォルトの名無しさん
2009/12/20(日) 11:31:34メモリ管理に留まらず、スレッディングやマネジメントも含まれる。
聞いたら、そういうの今の大学じゃやってねえっちゅう話じゃねえか
なもんで、リバースエンジニアリングすらも満足に出来ないと。
それできないとウィルスのリバースエンジニアリングも出来ない=検知できない
だからセキュリティ業界は人材の確保が大変だとよ
0373デフォルトの名無しさん
2009/12/20(日) 11:39:35とにかくありとあらゆる既存のライブラリやミドルウェアなどを使わずに
自分で何もかも構成した。売り物には、かなわないにしろな
HDDの制御やファイルシステムなども自分で考えて構成したりした。
普通大学つったらそういうことやるだろ
が、今は何かねむたいことを言ってやらないと。
0374デフォルトの名無しさん
2009/12/20(日) 11:53:000375デフォルトの名無しさん
2009/12/20(日) 12:20:430376デフォルトの名無しさん
2009/12/20(日) 12:31:250377デフォルトの名無しさん
2009/12/20(日) 15:50:09明白に誰が何に使っているか分かってないものは渡せません!
っていうお約束がある。
「こんにち波」っていうのは、あくまでも「まだどこにも属しておらず、アドレスともデータとも認められていない」
状態である。そのソースを呼んだ感じで言えば。
「文字列は連続したアドレスに入れられるよ」って言うのは人間だから分かっているだけで、
コンピュータ内部では「まだどこにもンなもんあらへんやん」という未知の物体なのである。
それと、アドレスだけでは「どこからどこまでか」が分からないので
これも単純にやりとりするわけには行かんのである。
配列は長さが明白に分かってるポインタのようなものだから、
それが分からないポインタには単純に代入できない。
0378デフォルトの名無しさん
2009/12/20(日) 15:52:46ξ _ ヽ
 ̄ ├-┤
/ ̄ ̄ ̄\)〆 |
| \ |
‐∩∩―┐ ||
|・ ・ | |│ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
┗ ^ ┛ | | | < ツェー!!!
/777^l | || \
) ̄ ̄_ノ__| lヽl|  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
,―  ̄ ̄_η_|/V^ |
l  ̄ ̄|_Ξ)/ |
`‐―┬┘\/ |
| |
| 〇 |
| |
|__∧___|
| | | ∩
| |__|_ __ ∫ )
| \ ̄ ノ
`―┬‐―┬‐┘ ̄
/ /
/ /
/ /
,〜^⌒\__/
0379デフォルトの名無しさん
2009/12/20(日) 16:47:46free(p);
これを行うと何がおこる?
mallocで確保した10000個の領域が全部開放されるの?
0380デフォルトの名無しさん
2009/12/20(日) 16:54:260381デフォルトの名無しさん
2009/12/20(日) 16:59:09じゃあbyte* p=malloc(10000);
ってのは悪いやりかた?
0382デフォルトの名無しさん
2009/12/20(日) 17:11:59byteのサイズがいくつになるかわからんから、 sizeof (byte) * 10000 で
0383デフォルトの名無しさん
2009/12/20(日) 17:12:43一般的なOS上で動く寿命の短いソフトなら起こっても大した問題は起きない
デーモンとかサービスみたいな起動しっぱなしのソフトや低レベルなソフトとかだと死亡
0384デフォルトの名無しさん
2009/12/20(日) 17:12:460385デフォルトの名無しさん
2009/12/20(日) 17:15:48これこそ、なにがしたいのかわからん質問。
0386デフォルトの名無しさん
2009/12/20(日) 17:51:20Z80 にステップ実行させる機能(内部割込み)はない。それはZ80 ではないのでは?
0387デフォルトの名無しさん
2009/12/20(日) 17:57:18過去にmalloc()/realloc() したときに取得したサイズを、現在 get できればいいのですが。
やっぱりどこかに覚えとくしかないか。
0388デフォルトの名無しさん
2009/12/20(日) 17:57:580389デフォルトの名無しさん
2009/12/20(日) 18:01:120390デフォルトの名無しさん
2009/12/20(日) 18:10:15答えられない質問には、その質問自体が無意味であることを主張した方が
自分の優位性を保てるから
0391デフォルトの名無しさん
2009/12/20(日) 18:25:15今、10日くらいでhelloから始まり今if文とかの入門書に書いてある
関数の基礎を一回ずつコンパイルしました。
それから配列についてちょこっとやってます。
それで今 実行の引数やポインタに進んでいます。
そこで、勉強法としてそのまま先に進めていっていいのでしょうか?
それとも変数や配列を極めたほうがいいでしょうか?
ちなみに自分はあんまり関係ない機械関係の運用の仕事をしていてすぐに実務に使用するわけではありません。
目的は、プログラミングの勉強をしてゲームプログラムを自分で作れるようになりたいです。
0392デフォルトの名無しさん
2009/12/20(日) 18:27:43内部的には持ってるだろうけど、通常の方法では無いね。
まあ最後のメンバーが可変長の構造体作って管理する手もある。
0393デフォルトの名無しさん
2009/12/20(日) 18:28:19訳分からなくてもとりあえず最後までやる
同じ本を何度かやってりゃ分かるようになる
クズ本じゃなければの話だけど
0394デフォルトの名無しさん
2009/12/20(日) 18:29:52途中の部分を極めるって考えはどうなのかね
0395デフォルトの名無しさん
2009/12/20(日) 18:37:390396デフォルトの名無しさん
2009/12/20(日) 18:38:160397デフォルトの名無しさん
2009/12/20(日) 20:09:23ICEとかエミュとか上位互換のカスタムチップとかクロックそのものを止めるとか、
いくらでもステップ実行させる方法はある。
今は学習用だとWin上でエミュが主流だから、テンキー入力するのはちょっと前の世代か
ハンダ付けの実習も兼ねてるか。
0398デフォルトの名無しさん
2009/12/20(日) 20:14:16↓ ↑
コンパイル&検証orエラー
このプロセスを経ずして理解できたなどと、おこがましいとは思わんかね?
0399デフォルトの名無しさん
2009/12/20(日) 20:34:150400デフォルトの名無しさん
2009/12/20(日) 20:39:28まちがい。なぜわざわざ嘘を教えるの?それともマジ?
C++のnew、deleteと勘違いしていないか?
>379, >381
>380は間違い。
>379自体は問題ない。
ただし1000がsizeof(byte)の倍数になっていないと、
pを使うときに問題が起こるかも。>382はそのことを言っている。
0401デフォルトの名無しさん
2009/12/20(日) 20:43:490402デフォルトの名無しさん
2009/12/20(日) 20:47:260403デフォルトの名無しさん
2009/12/20(日) 21:02:37次のように書くと動作するのですが
while(--argc > 0 && (*++argv)[0] == '-')
if((*argv)[1] == 'D') debug = 1;
while(--argc > 0 && (*++argv)[0] == '-' && (*argv)[1] == 'D')
と書くと動作しません。
2個目の条件(*++argv)[0]でargvが1進み、3個目の条件では+1されたargvが参照されると期待しているのですが、
こうはいかないのでしょうか。
ちなみに、
while(--argc > 0 && (*++argv)[0] == '-' && (*++argv)[1] == 'D')
とした場合segmentation errorとなります。
また3番目の条件をargv[0][1]=='D'などと指定してもうまくいきません。
whileの条件中だけで全て条件付けることはできないのでしょうか。
0404デフォルトの名無しさん
2009/12/20(日) 21:05:18目的を達するために getopt を使うとか strcmp で比較するのはどう?
0405デフォルトの名無しさん
2009/12/20(日) 21:06:480406デフォルトの名無しさん
2009/12/20(日) 21:10:58ネタにマジレスするのは、どうかと思うが、つっこんでみる。
怪しい知識をたとえ話にするから、よくわからんぞ。
知らない人は理解できないだろうから、誤解しようも無いが・・・・・・。
>明白に誰が何に使っているか分かってないものは渡せません!っていうお約束がある。
そんな約束はない。Cのポリシーは、明示的にせよ、暗黙にせよソースにかかれたものは
その通り実行する、である。だからポインタにどんな値がセットされていようが、その通り動作しようとする。
>「こんにち波」っていうのは、あくまでも「まだどこにも属しておらず、アドレスともデータとも認められていない」
状態である。
リテラルはコードの中に埋め込まれている。メモリ上に置かれているからポインタも取れる。
>配列は長さが明白に分かってるポインタのようなものだから
配列とポインタは別物。
0407デフォルトの名無しさん
2009/12/20(日) 21:12:540408デフォルトの名無しさん
2009/12/20(日) 21:13:57debug=1 はどこにあるの?
0409デフォルトの名無しさん
2009/12/20(日) 21:15:57最初の引数が -D じゃなかったらwhileループから抜けてしまって2個め以降の引数を見ないのでは?
0410デフォルトの名無しさん
2009/12/20(日) 21:28:53とりあえず
while(--argc > 0 && (*++argv)[0] == '-' && (*argv)[1] == 'D')
でも問題なさそうだけど。どういう動作を期待しているの?
ちなみに次のように、[]演算子を使って書く方がわかりやすいと思う。
while(--argc > 0 && argv[argc][0] == '-' && argv[argc][1] == 'D')
0411デフォルトの名無しさん
2009/12/20(日) 21:33:09すごくでかいint型限界値の値が出ますけど
これって値が0同士の変数で計算はするなということでしょうか?
int table[UCHAR_MAX+1];
char *text = "nanntokakanntoka";
int shift;
int i;
問題の演算: (BMWCT[(UINT)text[i]]-shift)
演算時のそれぞれの値
BMWCT[(UINT)text[i]] ==0;
shift==0;
iは任意
0412403
2009/12/20(日) 21:35:01getopt調べてみました。かなり便利そうですね。ありがとうございます。
>>409
それでした。この行以前に違うコマンドで認識させている部分があって、-Dは2番目の引数になっていたためでした。
こんな1種類の引数を検出する方法はそもそも汎用性がなさそうですね。
実際に使う時はcaseで場合分けなどしようと思います。
ただ条件文の評価の仕方は疑問が取れてすっきりしました。ありがとうございました。
0413デフォルトの名無しさん
2009/12/20(日) 21:35:210414デフォルトの名無しさん
2009/12/20(日) 21:35:44意味が分からないので動作するソースを貼ってちょ
0416デフォルトの名無しさん
2009/12/20(日) 21:39:14foo()&&bar()
と
foo()&&bar()
の違いを教えてください。
0417デフォルトの名無しさん
2009/12/20(日) 21:42:24同じじゃね?
bool の表現が 0 1 だけじゃないかもしれないし
0418デフォルトの名無しさん
2009/12/20(日) 21:44:15と
bar() && foo()
は違うけどな。
0419デフォルトの名無しさん
2009/12/20(日) 21:46:56てか、上と下が同じに見えるんだけど。
0420416
2009/12/20(日) 21:52:18foo()&&bar()
と
foo()&bar()
の違いでございました。。。
0421デフォルトの名無しさん
2009/12/20(日) 21:56:37ごめん解決したわ
unsigned int とint で演算やってたんだがintのみでやったら変な値でなくなった
0422デフォルトの名無しさん
2009/12/20(日) 21:57:21>>415 ×
ごめんなさい間違えました
0423デフォルトの名無しさん
2009/12/20(日) 22:09:51え。それじゃ、 (unsigned int)0 - 0 が、0 にならなかったってこと?
0424デフォルトの名無しさん
2009/12/20(日) 23:12:09なんで **argv と *argv[]は
同じに見てくれるのですか。コンパイラは。(倒置法)
0425デフォルトの名無しさん
2009/12/20(日) 23:16:08立ち入らないで下さい。
0426421,411
2009/12/20(日) 23:19:54UINT shift
shift==0
(UINT)text[i]==110 正常
BMWCT[(UINT)text[i]]==0 正常
(BMWCT[(UINT)text[i]]-shift)==4294967289 異常
>>423
こんな感じ
BMWCTとshiftとかをUINTにしたりintにしたりと変えてみた結果int同士だとうまくいった
UINT同士だとだめだった
0427デフォルトの名無しさん
2009/12/20(日) 23:22:08配列もポインタも、アドレスを表現しているという意味で同じだから。
0428デフォルトの名無しさん
2009/12/20(日) 23:29:320429デフォルトの名無しさん
2009/12/20(日) 23:29:54理解するのが一番。深入りしない。苦労して
覚えない。その為にコンパイラにシンタックスチェッカーが
付いているんだからさw
エラーを指摘せず勝手に内部でコード作って実行しちゃう
JavaScriptとかと違ってCは良心的。但し生産性が高い
言語では無くなってるけどね。
0430デフォルトの名無しさん
2009/12/20(日) 23:43:190431デフォルトの名無しさん
2009/12/20(日) 23:45:31という説明が char argv[][] という有名な落とし穴へ子羊を蹴落とす
0432デフォルトの名無しさん
2009/12/21(月) 00:02:58なお、後者は前者のシンタックスシュガー、C言語規格によるただの"親切"である。
i はインデックスではなく、hoge が示すアドレスからのオフセットである。
これでいいですか?
0433デフォルトの名無しさん
2009/12/21(月) 00:06:59「関数のプロトタイプ宣言の中では」配列とポインタは同じ。
Cでは関数に配列を渡すことはできない。
しかし使う場合は実引数として配列名を書くことが多く、それは配列の
先頭を指すポインタとして評価され、ポインタを渡していることになる。
以下の3つは全て同じ意味。
void func(int *a);
void func(int a[]);
void func(int a[N]);
0434デフォルトの名無しさん
2009/12/21(月) 00:07:55上位互換チップはありだと思いますが、一般にICE ではどうやって実行を一命令ごとに停止させるのでしょうか?
やっぱりCPU のステップ実行割り込みを利用してそうなんですが。
0435デフォルトの名無しさん
2009/12/21(月) 00:12:370436デフォルトの名無しさん
2009/12/21(月) 00:14:28ショートカットの有無かな?&& で前の式が偽だったら、後の式は評価すらされない、という。
0437デフォルトの名無しさん
2009/12/21(月) 00:15:35君大間違い。配列とポインタは全く別物。
>432
「つまり配列とはアドレス演算である。」
この一文が致命的な誤り。その他の部分はあっている。
1番目のポイント 宣言と式では文法が別物になっている
2番目のポイント &, *のオペランドになったとき以外は配列名のみを書くと、
配列の先頭要素を指すポインタとして評価される。
二項演算子[]はポインタと整数型をオペランドとし以下のように定義する。
*(p + i) ≡ p[i]
0438デフォルトの名無しさん
2009/12/21(月) 00:25:17オメー 何書いてあるかわかんねネーンダy
0439デフォルトの名無しさん
2009/12/21(月) 00:57:140440デフォルトの名無しさん
2009/12/21(月) 00:59:34*(hoge + i) と hoge[i]以外で、配列とポインタで異なる事例はいくらでもあるから、
配列 == ポインタという図式は成り立たないということ。
>>437
&, *ではなくて&, sizeofだよね。
0441デフォルトの名無しさん
2009/12/21(月) 01:01:54&変数はあくまでも整数定数値。&を省略出来るケースも
多い。それを適切なポインタにキャストするだけ
そのポインタが&を指定した変数を指してくれてるかどうかは
コンパイラの気分次第。あんまし曖昧だととんでもないところ
を指すかも知れない。
0442デフォルトの名無しさん
2009/12/21(月) 01:03:40( ゚Д゚)ハァ?
0443デフォルトの名無しさん
2009/12/21(月) 01:06:312行目以降が残念な文章だった。
0444デフォルトの名無しさん
2009/12/21(月) 01:09:11Z80のデバッガだと、止めたいアドレスをRST命令に書き換えて、デバッガを実現していた。
0445デフォルトの名無しさん
2009/12/21(月) 01:12:05&a[2]は「アドレス」としてコンパイル時に定められる
翻って
int a[10],i;
&a[i]は文法上はアドレスとしては定義不能。
あくまでもコンパイラに恣意的な解釈裁量権がある。
従って「アドレス」という概念は定まっているとは言い切れないんだ
な。これがw。
0446437
2009/12/21(月) 01:13:37そう、*じゃなくてsizeofでした。
実はもう一つ文字列リテラルを配列の初期化子として与えたとき
というものがあるのだが、これは宣言の中だからね。
0447デフォルトの名無しさん
2009/12/21(月) 01:13:430448デフォルトの名無しさん
2009/12/21(月) 01:13:46お前>>441?何の本の受け売りか知らんが、ちゃんと理解してから書き込めよ
0449デフォルトの名無しさん
2009/12/21(月) 01:18:42もとの質問 >>424 は、ポインタと配列とではどこが同じなのか(意訳)ということを聞いてるんだよ。
0450デフォルトの名無しさん
2009/12/21(月) 01:22:24根比べになっているけどさ、「アドレス」が無いってのは正しい。
ポインタの内部表現がどうなるべきかは定められていない。
その割には単項&がアドレス演算子だったりするのだけれど。
型T,識別子xにたいして
T x;
という宣言があったとき、&xがxを指すポインタを生成し、
*(&x)の評価結果がxでアリさえすればよい。
>&a[i]は文法上はアドレスとしては定義不能。
この文章の意味不明。
&a[i]は文法上何の問題もなくコンパイラも実行もできる。
ただし実行結果が保証されるのは0〜9だけ。
0451デフォルトの名無しさん
2009/12/21(月) 01:26:33>&a[i]は文法上はアドレスとしては定義不能。
iがゴミの値だからどこにアクセスするかわからないのだけれど、そういう意味なの?
&a[i]→&(*(a + i))でiの値は不定。
0452451
2009/12/21(月) 01:28:43&a[i]→&(*(a + i))→a + i
でiの値は不定なので、ポインタの値も不定。
0453デフォルトの名無しさん
2009/12/21(月) 01:58:560454デフォルトの名無しさん
2009/12/21(月) 02:33:070455デフォルトの名無しさん
2009/12/21(月) 02:35:01&a[2]がコンパイル時定数になると書かれているように見える点については突っ込まなくていいのか?
0456デフォルトの名無しさん
2009/12/21(月) 08:10:58>>437が出てくる意味がわからん。
intとdoubleはどちらも数値と言う意味で一緒
↓
intは整数でdoubleは実数だからまったく別物!int==doubleはまったく違う!
つってるやつと同じ感じだな。
0457デフォルトの名無しさん
2009/12/21(月) 09:27:28失礼、68000じゃった…。68000シリーズのどれかの石じゃった。
0458デフォルトの名無しさん
2009/12/21(月) 10:19:39おじいちゃーん、免許更新の際にはに認知症のテストを受けてね
0459デフォルトの名無しさん
2009/12/21(月) 12:07:050460デフォルトの名無しさん
2009/12/21(月) 16:57:28んなバカな。
0461デフォルトの名無しさん
2009/12/21(月) 18:42:26んなアホな。
0462デフォルトの名無しさん
2009/12/21(月) 19:16:39Z80 の人気はどうしてなのか?と今でも首を傾げています。
0463デフォルトの名無しさん
2009/12/21(月) 19:18:39命令がシンプルだからじゃね?
0464デフォルトの名無しさん
2009/12/21(月) 19:19:410465デフォルトの名無しさん
2009/12/21(月) 19:59:568080との互換性
0466デフォルトの名無しさん
2009/12/21(月) 20:23:59そんな答えじゃったら、なんで8080互換は人気なの?
0467デフォルトの名無しさん
2009/12/21(月) 20:27:11自分で考えてくれ
0468デフォルトの名無しさん
2009/12/21(月) 21:37:34たまたま、パソコンがたくさん売れ始めた時代にZ80を採用した機種が多数派で
みんながそれで育ったから。
パソコンに限った話じゃないれけど、世の中性能とか関係なく「売れたもん勝ち」なんだよ。
0469デフォルトの名無しさん
2009/12/21(月) 21:40:228086 vs. Z80 vs. 6809 vs. 6502 その4
http://gimpo.2ch.net/test/read.cgi/i4004/1252639237/
ここのレスのジジイどもに一言ガツンと言ってやってください
0470デフォルトの名無しさん
2009/12/21(月) 21:40:49TK-80?
0471デフォルトの名無しさん
2009/12/21(月) 21:41:04○>>468
とにかく勘違い頑固ジジイどもばかりで困ります
0472デフォルトの名無しさん
2009/12/21(月) 22:06:12typedef struct{
char id[ID_LEN + 1];
int *num;
} HOGE;
int main(void)
{
HOGE *hoge;
if((hoge = malloc(sizeof(HOGE))= NULL){
fprintf(stderr, "Out of memory!\n");
exit(1);
}
if((hoge->num = malloc(sizeof(int) * 10)) == NULL){
fprintf(stderr, "Out of memory!\n");
exit(1);
}
......
とやってるのですが,hoge->numの領域を確保するところで落ちます.
よろしくお願いします.
0473デフォルトの名無しさん
2009/12/21(月) 22:27:02if((hoge = malloc(sizeof(HOGE))= NULL){
を
if ((hoge = (HOGE *)malloc(sizeof(HOGE))) == NULL){
にしてみてくれ。
0475デフォルトの名無しさん
2009/12/21(月) 23:21:27だが68系の後継の6809は6800と互換がなかったため、
68系はソフト資産が分散・死亡してしまった
0476デフォルトの名無しさん
2009/12/22(火) 00:13:42leave
ret
0477デフォルトの名無しさん
2009/12/22(火) 00:30:12速くて正確に動けばそれでいい
0478デフォルトの名無しさん
2009/12/22(火) 00:33:330479デフォルトの名無しさん
2009/12/22(火) 01:00:310480デフォルトの名無しさん
2009/12/22(火) 01:04:20どんな人生送ってきたんだ
0481デフォルトの名無しさん
2009/12/22(火) 01:11:480482デフォルトの名無しさん
2009/12/22(火) 01:15:25# ジジィ発言は気持ちわかる
# 当時の俺も同じ心境だったから
0483デフォルトの名無しさん
2009/12/22(火) 01:20:16配列があれば複雑な数値計算もできそう
0484デフォルトの名無しさん
2009/12/22(火) 01:21:13ふざけんな!
0485デフォルトの名無しさん
2009/12/22(火) 01:39:24一次元配列とかわらん?
a[100]ってやるのもa[10][10]ってやるのも確保されるメモリは一緒でしょ?
0486デフォルトの名無しさん
2009/12/22(火) 01:43:360487デフォルトの名無しさん
2009/12/22(火) 01:45:460488デフォルトの名無しさん
2009/12/22(火) 01:48:480489デフォルトの名無しさん
2009/12/22(火) 01:49:13BIOSの考え方自体は後のマシンとの付き合い方にSVCとはまた違った方向性を示してくれたことには違いない
当時はアセンブラ主体だったが、そこでのノウハウが後にCを始めてから**や(*)への一挙跳躍をもたらしてくれた
0490デフォルトの名無しさん
2009/12/22(火) 02:24:240491デフォルトの名無しさん
2009/12/22(火) 03:54:39お前いい加減にしろよ
みんなうんざりしてんだよ
0492デフォルトの名無しさん
2009/12/22(火) 04:33:05最近調べたんでしょ
0493デフォルトの名無しさん
2009/12/22(火) 09:52:24ただのガス抜き
0494デフォルトの名無しさん
2009/12/22(火) 11:48:06スレ違いもいい所だ
0495466
2009/12/22(火) 11:58:540496デフォルトの名無しさん
2009/12/22(火) 12:11:050497デフォルトの名無しさん
2009/12/23(水) 03:35:38ネイティブの何も必要としない純粋ピュアな.exeを作りたいと思って
手頃な入門サイトでCを押さえて今Win32APIをやってるんだけど、これが中々おもしろい。
なんの仲介もなく直にWindowsとふれあってる感じがする。
今までダブルクリックで起動するjar(関連付けによっては動かなかったりする)を使ったり
それをexewrapでexe化したりなんだかなぁという事ばっかりやってたのでCで普通のexeが作れて感動。
Cはポインタが難しいとよく言うけど実際やってみるとこれPerlのリファレンスじゃんって感じで飲み込めた。
他にもPerlやJavaの仕様の前身となったようなものが見受けられてあぁ、これが元ネタなんだなと思うこと多数。
なんの質問でもないけど、C言語っておもしろいですね。
0498デフォルトの名無しさん
2009/12/23(水) 03:49:10それにしてもサクサク動くから楽しいかな
Perlと比べると文字列の処理が貧弱すぎてびっくりするかも知れんけどがんばってー
0499デフォルトの名無しさん
2009/12/23(水) 07:13:100500デフォルトの名無しさん
2009/12/23(水) 09:54:16Win32API やってるなら
windows.h を少しずつでも見たほうが良いよ。
0501デフォルトの名無しさん
2009/12/23(水) 10:53:19アセンブラおすすめ。
APIの呼び方さえ覚えておけば実行ファイルがあまりにも小さくなって感動する。
今までのWindowsアプリはなんだったんだって思う。
0502デフォルトの名無しさん
2009/12/23(水) 10:54:590504デフォルトの名無しさん
2009/12/23(水) 11:05:19アセンブラはコードがいちいち長くなって書くのも読むのも非常に面倒なだけ
0505デフォルトの名無しさん
2009/12/23(水) 11:46:170506デフォルトの名無しさん
2009/12/23(水) 12:00:30どのDLLがあるとか無いとかから開放されないようが気がする。
0507デフォルトの名無しさん
2009/12/23(水) 14:41:120508デフォルトの名無しさん
2009/12/23(水) 22:56:41http://pc12.2ch.net/test/read.cgi/tech/1096478651/
アセンブリ言語最強伝説
http://pc12.2ch.net/test/read.cgi/tech/1199952217/
Windowsってアセンブリで作られてる?
http://pc12.2ch.net/test/read.cgi/tech/1248434163/
0509デフォルトの名無しさん
2009/12/23(水) 22:57:03http://pc12.2ch.net/test/read.cgi/tech/1035288252/
0510デフォルトの名無しさん
2009/12/23(水) 22:59:21レベル-10: むしろnasmとかみたいなちゃんとしたアセンブラを使ったほうが楽だったことに気付く。
http://d.hatena.ne.jp/w_o/20060808#p3
0511デフォルトの名無しさん
2009/12/24(木) 01:48:43report5.c : 7 : error : syntax error before numeric constant
というエラーが出ます
どう修正したらいいのでしょう?
ソースは以下です
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10302.c
0512デフォルトの名無しさん
2009/12/24(木) 01:57:49> #define N 50
>
> void sort(int x[], int N)
#defineでシンボルNを定義しているので、2行後が
void sort(int x[], int 50)
と置換される。
0513デフォルトの名無しさん
2009/12/24(木) 02:27:34深夜にありがとうございます!
仮引数になっていないのが原因だったってことでしょうか?
Nを小文字のnに変えてもみたのですが、今度は
report5.c : In function `sort':
report5.c : 9 : error : 'x' redeclared as different kind of symbol
report5.c : 7 : error : previous definition of 'x' was here
と出てしまいました…
ググってみるとxが衝突してるとのことですが、関数部とデータ入出力部の両方でxを使用しても問題ないはずですよね?
0514511
2009/12/24(木) 02:39:11自己解決しました
どうやら7行目と9行目の両方で変数xを定義していたのが問題だったようで…
>>512様ありがとうございました
0515デフォルトの名無しさん
2009/12/24(木) 12:57:05満足じゃー
0516デフォルトの名無しさん
2009/12/25(金) 10:34:07linuxで、g++でemacsで書いて、k-termでコンパイル。
すみません。今日締切の問題で、スレ違いかもしれないんですが、どうかスレ主さま、作ってください。
お願いします。
0517デフォルトの名無しさん
2009/12/25(金) 10:38:26このスレの方が勢いがあるから?当然のようにageてるし
0518デフォルトの名無しさん
2009/12/25(金) 10:46:10酷いマルチ>>516のほうが後ってのが特に
0519デフォルトの名無しさん
2009/12/25(金) 10:54:380520デフォルトの名無しさん
2009/12/25(金) 13:46:35すみません。すれ違いでした。でも本当に急いでいて・・
みなさん、無駄にスレ使ってしまってすみませんでした。
0521デフォルトの名無しさん
2009/12/25(金) 13:50:14逆効果なんだけど特別に許してあげるよ
感謝すればね
0522デフォルトの名無しさん
2009/12/25(金) 14:11:41はい。
0523デフォルトの名無しさん
2009/12/25(金) 14:16:280524デフォルトの名無しさん
2009/12/25(金) 17:01:150525デフォルトの名無しさん
2009/12/25(金) 17:03:530526デフォルトの名無しさん
2009/12/25(金) 17:07:18しかし何も出ず終了とは
0527デフォルトの名無しさん
2009/12/25(金) 17:07:360528デフォルトの名無しさん
2009/12/25(金) 17:08:360529デフォルトの名無しさん
2009/12/25(金) 17:08:370530デフォルトの名無しさん
2009/12/25(金) 17:33:21この間1秒
0531デフォルトの名無しさん
2009/12/25(金) 18:31:070532デフォルトの名無しさん
2009/12/25(金) 18:32:100533デフォルトの名無しさん
2009/12/25(金) 18:42:410534デフォルトの名無しさん
2009/12/25(金) 21:26:120535デフォルトの名無しさん
2009/12/25(金) 21:29:040536デフォルトの名無しさん
2009/12/25(金) 21:58:05そりゃあプログラムを変更したい時に一か所一か所変更するのは面倒でしょ
0537デフォルトの名無しさん
2009/12/25(金) 22:06:15あとで変更したくなったときに、ロジック側を弄らなくて済むようにしておく。
あとはデバッグスイッチとかの条件コンパイル用かな。
0538デフォルトの名無しさん
2009/12/25(金) 22:32:540539466
2009/12/25(金) 22:38:240540デフォルトの名無しさん
2009/12/25(金) 23:19:37頼むから冗談はよしてくれ
0541デフォルトの名無しさん
2009/12/26(土) 00:08:470542デフォルトの名無しさん
2009/12/26(土) 00:16:140543デフォルトの名無しさん
2009/12/26(土) 00:23:06それはあんまりだと思って、上機嫌に変えた、つもりだったのです。
0544デフォルトの名無しさん
2009/12/26(土) 00:45:24defineも構造体定義も、ヘッダファイルに書く場合は複数のソースファイルに公開する必要がある場合。
ひとつのソースファイルだけで使用するなら、そのソースファイルで定義するのが基本。
0545デフォルトの名無しさん
2009/12/26(土) 01:37:05あたまわるいなぁ、とか言われなかったんだな
0546デフォルトの名無しさん
2009/12/26(土) 01:57:05MFCのマクロは、Cプリプロセッサの究極をいってるな。
いっちゃってるけど。
0547デフォルトの名無しさん
2009/12/26(土) 08:11:390548デフォルトの名無しさん
2009/12/26(土) 17:30:50いやいや、究極と言えば、Boost.Preprocessorとかメタプログラミングの類。
こんな調子で、演算とかさせるんだぜ。頭がおかしいとしか思えない。
ttp://d.hatena.ne.jp/qnighy/20091107/1257587259
MFCなんてかわいいもんだ。
0549デフォルトの名無しさん
2009/12/26(土) 18:14:49プリプロセッサメタプログラミングだぜ?
本当にやりやがった・・・的な衝撃が走る。
0550デフォルトの名無しさん
2009/12/26(土) 18:32:21○病的
0551デフォルトの名無しさん
2009/12/26(土) 18:34:030552デフォルトの名無しさん
2009/12/26(土) 19:00:450553デフォルトの名無しさん
2009/12/26(土) 19:11:58feofというのは一体何の略なんでしょうか?
0554デフォルトの名無しさん
2009/12/26(土) 19:21:16EOF は End Of File
細かいことはキニシナイ
0555デフォルトの名無しさん
2009/12/26(土) 19:21:43eof = End Of File
FILE *fp を取り扱う関数は、一般に fopen(), fclose(), fseek() のように頭に f がつくので、
f + End Of File = feof()
本当のところは知らないのですけど。
0556553
2009/12/26(土) 19:26:58ファイルポインタがEOFに達しているかどうかを調べるんだそうです
ttp://www.phpbook.jp/func/file/index3.html
ありがとうございました
0557デフォルトの名無しさん
2009/12/26(土) 19:36:570558デフォルトの名無しさん
2009/12/26(土) 22:59:09変数の値が変更されたときに自動で関数に飛ぶことって出来ないんですか?
atexit()みたいな感じに
0559デフォルトの名無しさん
2009/12/26(土) 23:00:00環境依存なのでOS等の情報が必要です
0560デフォルトの名無しさん
2009/12/26(土) 23:02:390561デフォルトの名無しさん
2009/12/26(土) 23:09:56これをもう少しスマートにやる方法ないですか?
0562デフォルトの名無しさん
2009/12/26(土) 23:16:030563デフォルトの名無しさん
2009/12/26(土) 23:22:17http://codepad.org/3p4Q55et
本に書いてある内容を要約するとこんな感じになるんですが、
( !feof( stdin) )
というのは一体何を表しているのでしょうか。
stdinの中身がEOFにならなかったら〜という風に読めるのですが、
stdinとはcfPtrを指しているのでしょうか?
stdinでググると標準入力だというようなことが出てくるのですが、
標準にそのままキーボードから打たれたものがEOFになったら〜という意味でいいのでしょうか?
0564デフォルトの名無しさん
2009/12/26(土) 23:28:05戻り値
feof は,指定したストリーム上の最後の入力操作でファイル終了標識が
検出されると 0 以外の値を返し,ファイル終了標識に達しなければ 0 を返します。
とあるから、標準入力からWindowsならCTRL+Z、Unix系ならCtrl+Dが押される
と !演算子によって条件が反転し真になる
0565デフォルトの名無しさん
2009/12/26(土) 23:28:18ビットフィールドを使う
0566デフォルトの名無しさん
2009/12/26(土) 23:29:12そうだよ。
ソースに書いてある通り、ctrl-zでEOFが入力される。
0567デフォルトの名無しさん
2009/12/26(土) 23:29:46それぞれ1bitなら
if ((flag & (BIT1|BIT2)) == (BIT1|BIT2))
0568デフォルトの名無しさん
2009/12/26(土) 23:34:42標準にキーボードから入力していてEOFが検出されなかった場合〜という意味ですね。
ありがとうございました。
0569デフォルトの名無しさん
2009/12/26(土) 23:37:400570デフォルトの名無しさん
2009/12/26(土) 23:42:21すいませんどういう意味でしょうか?
0571デフォルトの名無しさん
2009/12/26(土) 23:46:41ファイルからリダイレクトとか。
0572デフォルトの名無しさん
2009/12/26(土) 23:46:47パイプやリダイレクトとか
0573デフォルトの名無しさん
2009/12/26(土) 23:47:47C言語にはストリームという概念がある。
ここに結び付けられるものは何でも良い。ファイルでも入出力デバイスでもC言語から見れば一緒。
ただ、一般的なPCではディスプレイ、キーボードが付いてるので"デフォルト(標準)"をそこにしてあるだけ。
標準入力がシリアル通信ポートだったり、標準出力がファイルだったりする環境もあるってこと。
0574デフォルトの名無しさん
2009/12/26(土) 23:53:40あきらめてアクセサメソッドを介して変数を参照するようにしてはいかがでしょうか。
0575デフォルトの名無しさん
2009/12/26(土) 23:54:090576デフォルトの名無しさん
2009/12/26(土) 23:58:10入力できればなんでもいいってことですか、ありがとうございました。
0577デフォルトの名無しさん
2009/12/27(日) 00:00:00何が割り当てられてるかだ
0578デフォルトの名無しさん
2009/12/27(日) 15:46:46その前提条件って必要なの?
0579デフォルトの名無しさん
2009/12/27(日) 16:11:57&&がなくなるから、速くはなりそうな気もするけど、
最適化でチャラになるかもしれないし、読みやすさなら
元のコードのほうがいいと思う。
0580デフォルトの名無しさん
2009/12/27(日) 21:48:47char hello[] = {'h', 'e','l','l','o'};
puts(hello);
}
結果がおかしくなります
0581デフォルトの名無しさん
2009/12/27(日) 21:50:48じゃなくて
char hello[] = {'h', 'e','l','l','o','\0'};
0582デフォルトの名無しさん
2009/12/27(日) 21:58:22ありがとう、期待する動作になりました。
0583デフォルトの名無しさん
2009/12/27(日) 21:58:27char hello[] = "hello";
0584デフォルトの名無しさん
2009/12/28(月) 00:10:13例えばBIT1が ((1<<0)|(1<<1)) だった場合
flagの下位2bitがそれぞれ 01,10,11 のどれであっても
(flag & BIT1) は非0になるが
(flag & BIT1) == BIT1 となるのは、11の場合のみ。
>>579
普通は"(BIT1|BIT2)"をそのまま使うなんてやり方しないよ。
const mask = BIT1 | BIT2; // constじゃなくてdefineだろうがenumだろうが構わんが。
if ((flag & mask) == mask)
これを可読性が悪いとか言うならどうかしてる。
元の
>if ((flag & BIT1) && (flag & BIT2)) {
よりわかりやすいだろうに。
0585デフォルトの名無しさん
2009/12/28(月) 01:03:34(1) if ((flag & mask) == mask)
(2) if ((flag & BIT1) && (flag & BIT2))
どうみても(2)の方が分かりやすい
0586デフォルトの名無しさん
2009/12/28(月) 03:31:36個人的には識別子が1個少ない分、(1)の方が読みやすい
0587デフォルトの名無しさん
2009/12/28(月) 03:40:460588デフォルトの名無しさん
2009/12/28(月) 04:30:39どうみても(2)の方が分かりやすいよね!
(1) auto hoge_mask=BIT1|BIT2|BIT3|BIT4|BIT5|BIT6|BIT7|BIT8|BIT9;
if((flag&hoge_mask)==hoge_mask)
(2) if((flag&BIT1) && (flag&BIT2) && (flag&BIT3) && (flag&BIT4) && (flag&BIT5) && (flag&BIT6) && (flag&BIT7) && (flag&BIT8) && (flag&BIT9))
0589デフォルトの名無しさん
2009/12/28(月) 05:52:52!^(flag|^mask) // こうだな
0590デフォルトの名無しさん
2009/12/28(月) 06:29:05ドモルガン使ってこう書いた方が見た目は奇麗。
!(~flag&mask)
まぁ~maskは定数になるだろうから>>589と計算量は殆ど同じだろうけど
0591デフォルトの名無しさん
2009/12/28(月) 10:39:410592デフォルトの名無しさん
2009/12/28(月) 10:54:10禿同
可読性云々以前にコメントつければすむ問題
0593デフォルトの名無しさん
2009/12/28(月) 11:02:080594デフォルトの名無しさん
2009/12/28(月) 11:38:36時代は関係ないし、それいうならC使う事自体がどうなんだって話に。
移植性考えないならビットフィールドでもいいかも知れん。
0595デフォルトの名無しさん
2009/12/28(月) 12:14:55ただのフラグならビットフィールドでも移植性は関係無いだろ。
0596デフォルトの名無しさん
2009/12/28(月) 12:51:330597デフォルトの名無しさん
2009/12/28(月) 12:58:56フラグAが立つ、かつ、フラグBが立つ
なのか
ビットAとビットBの両方がセットされてる
なのかで使いわけろよ
フラグの実装がビットだからビット演算使うのは短絡的
0598デフォルトの名無しさん
2009/12/28(月) 13:00:280599デフォルトの名無しさん
2009/12/28(月) 13:56:28ビットフィールド使うくらいなら、_Bool 使えばいいのに。
0600デフォルトの名無しさん
2009/12/28(月) 14:07:42ビット演算についてだけ言えば
if (value & 0x0001)
奇数かどうか、を見るこれだけでも
ビット演算はコメントを必ず入れるべきと思う。
0601デフォルトの名無しさん
2009/12/28(月) 14:11:17> 上位ビット/下位ビットのどっちから割り振られるかが処理系次第な
どんなもん、どっちでもいいだろ。
0602デフォルトの名無しさん
2009/12/28(月) 14:11:210603デフォルトの名無しさん
2009/12/28(月) 14:11:280604デフォルトの名無しさん
2009/12/28(月) 14:12:300605デフォルトの名無しさん
2009/12/28(月) 14:22:14if(IS_ODD(value))
0606デフォルトの名無しさん
2009/12/28(月) 14:23:200607デフォルトの名無しさん
2009/12/28(月) 14:40:050608デフォルトの名無しさん
2009/12/28(月) 15:02:13どっちでもいいだろ。
問題になるのはハードにマップされてるとかそういう時だけで、フラグで使ってるだけならメモリの配置は関係ない。
0609デフォルトの名無しさん
2009/12/28(月) 16:40:370610デフォルトの名無しさん
2009/12/28(月) 18:06:000611デフォルトの名無しさん
2009/12/28(月) 18:20:290612デフォルトの名無しさん
2009/12/28(月) 18:30:260613デフォルトの名無しさん
2009/12/28(月) 19:37:070614デフォルトの名無しさん
2009/12/28(月) 19:57:03ビット数分だけ判定繰り返すしかないかな
0615デフォルトの名無しさん
2009/12/28(月) 20:15:240616デフォルトの名無しさん
2009/12/28(月) 21:05:18どんな方法があるのか教えてくれたら教えるお(´・ω・`)クフゥ
0617デフォルトの名無しさん
2009/12/28(月) 21:10:45最上位ビットの位置が記された256個のテーブルを使う
0618デフォルトの名無しさん
2009/12/28(月) 21:13:180619デフォルトの名無しさん
2009/12/28(月) 21:27:100620デフォルトの名無しさん
2009/12/28(月) 21:33:570621デフォルトの名無しさん
2009/12/28(月) 21:52:03警戒心起たせちゃって
0622デフォルトの名無しさん
2009/12/28(月) 23:00:34他人に作らせるのがもっとも賢い方法
0623デフォルトの名無しさん
2009/12/28(月) 23:13:1132bit なら 5回
下の関数みたいなのをマクロで作ればおk
int leftbit(unsigned long x)
{
int bit=0;
if(x&0xffff0000) bit+=16,x>>=16;
if(x&0xff00) bit+=8,x>>=8;
if(x&0xf0) bit+=4,x>>=4;
if(x&0xc) bit+=2,x>>=2;
if(x&0x2) bit+=1,x>>=1;
return bit;
}
0624デフォルトの名無しさん
2009/12/28(月) 23:27:01>>623
それいただきます!
0625デフォルトの名無しさん
2009/12/29(火) 23:11:44お日様も笑ってる
るーるるるるっるー
今日もいいテンキー
だからどうしたというのですか。
っていうか何故テンキーが重要なのですか。
0626デフォルトの名無しさん
2009/12/29(火) 23:15:03for(bit=0; result != 1; bit << 1){
result = (BITCHECK & bit);
}
0627デフォルトの名無しさん
2009/12/29(火) 23:16:01ほな逆にMSBから
0628デフォルトの名無しさん
2009/12/29(火) 23:32:48え?
0629デフォルトの名無しさん
2009/12/29(火) 23:36:01実数演算だけど、logで計算したほうが、条件分岐が入るより速いんじゃないか?
0630デフォルトの名無しさん
2009/12/30(水) 00:15:060631デフォルトの名無しさん
2009/12/30(水) 00:17:500632デフォルトの名無しさん
2009/12/30(水) 00:18:350633デフォルトの名無しさん
2009/12/30(水) 00:33:09>>629は誤差とは関係ないだろ。
0634デフォルトの名無しさん
2009/12/30(水) 00:46:19すまん。俺が間違ってたorz
0635デフォルトの名無しさん
2009/12/30(水) 02:28:38なんで誤差とは関係ないの?
浮動小数点演算である以上、誤差はあるはず
誤差が1未満だから ceil()で消えるってこと?
>>629
ceil じゃなくて floor じゃないの?
0636デフォルトの名無しさん
2009/12/30(水) 03:11:06そう。
整数部にまで及ぶような誤差がでないと結果に誤差が反映しない。
はるか下のほうの桁にしか、誤差はでないと思われ。
よくみたら、切り上げだと桁が繰り上がるところで正しい結果がでないね。
+1してfloor()だ。
0637デフォルトの名無しさん
2009/12/30(水) 08:37:44mx(mx(mx(mx(mx(a,x,0xaaaaaaaa,1),x,0xcccccccc,2),x,0xf0f0f0f0,4),x,0xff00ff00,8),x,0xffff0000,16);
0638デフォルトの名無しさん
2009/12/30(水) 08:40:37あ、だめだx変わんね!
0639デフォルトの名無しさん
2009/12/30(水) 08:49:40浮動小数点数使うんなら frexp(x, &result) でいいじゃん。
0640デフォルトの名無しさん
2009/12/30(水) 10:21:01ビットが立っていない場合が 0 になるように一部変更してる。
http://codepad.org/VT7XBJAP
Core2Duo T7600(2.33GHz) / RAM 3GB
gcc version 4.3.4 20090804 (release) 1 (GCC)
最適化オプション指定なしで 50,000,000 要素に対して 10 回実行した平均値だと
>>623 1.4564秒
>>629 6.2842秒
>>639 1.5501秒
-O2 指定で
>>623 0.6673秒
>>629 6.0827秒
>>639 1.2921秒
0641デフォルトの名無しさん
2009/12/30(水) 10:57:310642デフォルトの名無しさん
2009/12/30(水) 11:09:46#define mx(b,m,x,a) (x&m>x&~m)?(a)|b,(a))
=mx(1,0x55555555,x,mx(2,0xaaaaaaaa,x,mx(4,0xf0f0f0f0,x,mx(8,0xff00ff00,x,mx(16,0xffff0000,x,0)))));
0643デフォルトの名無しさん
2009/12/30(水) 11:15:41「計算」が早くは無い。CPUレベルのサポートで
並列化を促進すれば何倍も速くなる筈だが、コストパフォーマンス
が低くやる価値が少ないと判断されてるだけ。
0644デフォルトの名無しさん
2009/12/30(水) 11:35:420645デフォルトの名無しさん
2009/12/30(水) 11:39:10「試行回数を減らせば早くなりますよ!」
0646デフォルトの名無しさん
2009/12/30(水) 11:40:56回数が少なければ「わかりやすい」コードがお勧め
0647デフォルトの名無しさん
2009/12/30(水) 11:45:410648デフォルトの名無しさん
2009/12/30(水) 11:49:19「呼んだ関数が処理してる時間は極力短く」
「呼んだ関数だけじゃなく処理時間そのものも極力短く」
「デッドラインを設ける」
とまあ常に組み込み状態
すべての処理コードが割り込みの考え方で動いてる
(他の誰も入って来れない時間を短く=CPU占有の時間を短く)
0649デフォルトの名無しさん
2009/12/30(水) 11:51:04底の変換してからFYL2X使ってるみたい
二回計算しないといけないから遅いのかもね
0650デフォルトの名無しさん
2009/12/30(水) 11:52:53logは底がネイピア数だからそのままFYL2Xでいいのか
その周囲の面倒臭いコードはDOMAIN ERRORとかチェックしてるだけか
そうなるとlog10ならもっと遅いだろうね
0651デフォルトの名無しさん
2009/12/30(水) 12:00:37昔組み込みやってた
小さいものはパズルみたいで楽しかったけど
大きなものだと死にそうになるんだよな・・・・
0652デフォルトの名無しさん
2009/12/30(水) 13:09:09なるね
0653デフォルトの名無しさん
2009/12/30(水) 23:12:36ってのはどうすればいいの?
Sleepだと遅れることあるんでしょ?
0654デフォルトの名無しさん
2009/12/30(水) 23:15:09ズレが積算しなければ多少ズレてもいいの?
0655デフォルトの名無しさん
2009/12/30(水) 23:18:59CPUのクロックパルスをカウントする方法がある。
OSのタスクスリープ類は、オーダーが不足する。いいとこミリセカンド単位だろ
これは十分ではない!(直訳した英文ふうに)
CPUのクロックパルスならナノセカンド単位で管理できる。
0656デフォルトの名無しさん
2009/12/30(水) 23:22:28分周率決めて初期値入れてカウントダウンして
それがアンダーフローしたと同時に割り込みを入れてくれる。
割り込みが来たらベクタを参照して然るべき関数を呼び出すだけ。
PowerPCならベクタもいらねえ
まんま関数を置くだけ
このカウントはタスク外、OSの関知外、CPUの処理外だから
実行速度に何の影響も及ぼさずいくらでもタイマー処理ができる。
これを一回味わうとOSのタスクスリープに頼りたくなくなる。
んでx86系統で苦労する。
0657デフォルトの名無しさん
2009/12/30(水) 23:23:47遅れることが本当に許されないなら、リアルタイムOSを使うしかない。
自分は、経験ない。
0658デフォルトの名無しさん
2009/12/30(水) 23:25:54アプリが使うものじゃない。
複数のプロセスから同時に使えないだろう?
0659デフォルトの名無しさん
2009/12/30(水) 23:27:13本当にシビアにデッドラインが決まっているならハードウェアをお友達にならなければならない。
いくつも同時にカウントできるのはSHでさえ3つまでだが
本当に遅れが許されないものに絞って使えばよい
0660デフォルトの名無しさん
2009/12/30(水) 23:48:31許される誤差の範囲は具体的にどのくらい?
0661デフォルトの名無しさん
2009/12/31(木) 00:18:410662デフォルトの名無しさん
2009/12/31(木) 00:35:01さあ
0663デフォルトの名無しさん
2009/12/31(木) 10:00:310.5秒でも後れたら大問題とか、そういうところでは
そもそも使われないだろ。
0664デフォルトの名無しさん
2009/12/31(木) 10:47:42本当に使用できるのかどうか誰も知らない。
ドライバ書いたこともないしマルチタスクを意識したアプリも書いた事がないから。
0665デフォルトの名無しさん
2009/12/31(木) 11:22:500666デフォルトの名無しさん
2009/12/31(木) 12:26:29格闘ゲームのように「1ピコセカンドだって遅れたら勝てねえ!」ちゅう
ウメハラのようなもんをメインターゲットに据えている格闘ゲームなら
本格的にCPUた、割り込みコントローラと付き合わないといかぬわい
0667デフォルトの名無しさん
2009/12/31(木) 12:34:38「一時トリプルボギーでも後でアルバトロス出せば差し引きチャラHEAD-CHARAであって胸がパチパチするほど騒ぐ元気玉」
みたいなシステムなら、スリープ時間を動的に増減したらいい。
「1フェムトセカンドでも遅れたら死!後からのリカバリは認めない」
ってシステムなら、ハードウェアとフレンドになる。
特段遅れてもどーってことないシステムでもハードウェアと友達になっておいて損はないのだが。
0668デフォルトの名無しさん
2009/12/31(木) 12:45:11具体的にどんな「ハードウエア」君と友達になれって?
0669デフォルトの名無しさん
2009/12/31(木) 12:46:27分子加速器みたいなのじゃね?
0670デフォルトの名無しさん
2009/12/31(木) 13:08:250671デフォルトの名無しさん
2009/12/31(木) 13:18:240672デフォルトの名無しさん
2009/12/31(木) 21:19:45現金を盗んだ
が
元気を盗んだ
になってたときがあった
0673デフォルトの名無しさん
2009/12/31(木) 21:27:190674デフォルトの名無しさん
2010/01/01(金) 01:26:473+4の+が演算子
10==5+5の==も演算子
int* p=&x;
*p=7;
の*も演算子
なんかよくわからんけど特殊な意味をもった記号を演算子っていうのか?
0675デフォルトの名無しさん
2010/01/01(金) 01:32:160676デフォルトの名無しさん
2010/01/01(金) 19:08:210677デフォルトの名無しさん
2010/01/01(金) 22:16:390678デフォルトの名無しさん
2010/01/01(金) 22:20:050679デフォルトの名無しさん
2010/01/01(金) 22:29:59それは10進数で入力された文字列を数値に変換するってこと?
10桁入力されたときは、どうすればいいんだろう。
0681デフォルトの名無しさん
2010/01/01(金) 22:44:59「1234567890」って10桁打ち込まれたら、8桁の数字にならないんだけど
どうすんの?
0683デフォルトの名無しさん
2010/01/01(金) 22:48:260684デフォルトの名無しさん
2010/01/01(金) 22:49:14それだと「10文字」ってのがナゾになるな
だれかキバヤシ呼んできてくれ
0685デフォルトの名無しさん
2010/01/01(金) 22:49:18crypt とか md5 計算して頭のほうだけ使えばいいんじゃね?
0686デフォルトの名無しさん
2010/01/01(金) 22:51:55少しわかってきたが、わざわざ「英数」とか「文字」って言ってるのだから、
「0〜9」以外の文字も入力される可能性があるって意味だよな?
0687デフォルトの名無しさん
2010/01/01(金) 22:52:47#include <stdio.h>
int main()
{
char s[20];
int n;
fgets(s, 10, stdin);
n = atoi(s);
printf("%d\n", n);
return 0;
}
0689デフォルトの名無しさん
2010/01/01(金) 22:59:58#include<stdio.h>
unsigned long str2num(const unsigned char *str)
{
unsigned long value=0x22360679;
for(;*str;str++) value=value*(9012583+*str)+3003779;
return value%100000000;
}
int main(void)
{
printf("%08lu\n", str2num("hello"));
printf("%08lu\n", str2num("hello!"));
printf("%08lu\n", str2num("Hello"));
return 0;
}
0690デフォルトの名無しさん
2010/01/01(金) 23:19:40みなさんrestrict は現実のプログラムで使っていますか?
付け忘れて困ったためしがないからなあ。
0692デフォルトの名無しさん
2010/01/02(土) 00:03:25ですよねぇ。
ありがとうございます。
0693デフォルトの名無しさん
2010/01/02(土) 00:11:10fprintf使うと上書きじゃなくて追加書き込みになるけど
上書きで使うにはどうすれば良いの?
0694デフォルトの名無しさん
2010/01/02(土) 00:13:34"r+b" で開いて fseek で移動
0695デフォルトの名無しさん
2010/01/02(土) 03:09:210696デフォルトの名無しさん
2010/01/02(土) 13:01:430697デフォルトの名無しさん
2010/01/02(土) 14:45:16Windows の話なんだろうけど、ウィンドウベースのプログラムは
コンソールベースのプログラムに比べて40倍 (当社比) くらい面倒。
↓こういう感じで。
ttp://www.geocities.jp/ky_webid/win32c/002.html
0698デフォルトの名無しさん
2010/01/02(土) 14:55:470699デフォルトの名無しさん
2010/01/02(土) 15:04:520700デフォルトの名無しさん
2010/01/02(土) 18:15:45atol
頼むから「アトイ」だの「アトル」だの言うな!
どこのラノベ主人公やねん
0701デフォルトの名無しさん
2010/01/02(土) 18:17:12流れが見えないカキコが続いてるけど、誤爆かなにか?
0702デフォルトの名無しさん
2010/01/02(土) 18:19:15常にストールなく流れているもんちゃうで
たまにはキャッシュミスしたり分岐予測が外れてしまうことも
あるんやで
0703デフォルトの名無しさん
2010/01/02(土) 18:24:50CUIなら
0704デフォルトの名無しさん
2010/01/02(土) 19:11:16リンクするときに link /subsystem:windows を指定する
http://msdn.microsoft.com/ja-jp/library/fcc1zstk%28VS.80%29.aspx
※ これは C の話ではなく Windows の、もっと言うなら .exe ファイルの話なので
そっち系のスレで聞いた方がいい
>>699
「使える」の意味による
機能だけでなくライセンスも通常は選択理由の1つとなる
0705デフォルトの名無しさん
2010/01/02(土) 19:33:43ライセンスとか特に気をつけないと
民事ー訴訟沙汰になる
0706デフォルトの名無しさん
2010/01/02(土) 19:49:34MinGW?
Cygwinよりもってこと?
0707デフォルトの名無しさん
2010/01/02(土) 20:34:280708デフォルトの名無しさん
2010/01/02(土) 20:57:340709デフォルトの名無しさん
2010/01/03(日) 01:50:50GUIアプリが作れないのか?
それともVCとか方が作りやすいって意味?
0710デフォルトの名無しさん
2010/01/03(日) 02:22:28「windows.hがあって」
「Windowsのプログラミング作法を知っていれば」
できるものだから、特にコンパイラを問うものでない。
コンパイラよりも「何をどうすればWindows上やLinux上でGUIが出るのか」
を、プログラマ自身が知らないと話にならんのだ
0711デフォルトの名無しさん
2010/01/03(日) 02:33:58プログラミング作法をしらないと
「ウィンドウの中身が更新されない」
「消えない」
「メッセージが送られない」
とか、まるでGUIの意味がないことになるから
まず作法を知るほうが早い。
0712デフォルトの名無しさん
2010/01/03(日) 05:02:01参考にしたいので、教えてください><
0713デフォルトの名無しさん
2010/01/03(日) 08:22:190715デフォルトの名無しさん
2010/01/03(日) 09:50:12そうですねー、確かに「本格的」って何だかよく分りませんね
無理して定義すれば、ゲームであればオセロとか、仕事なら初めて1から書き上げたルーチンとか、
自分のPCを便利にする為にユーティリティ作ったとかとか、
頭の中の知識、実際にプログラミングで使った機会と、いったイメージです
あるいは、このオープンソースのコードをみっちり読んだ、とかでも結構です
0716706
2010/01/03(日) 09:57:36そうなの?
それはしらんかったが、
本の虫: libstdc++を使って作られたプログラムはGPLか
http://cpplover.blogspot.com/2008/01/libstdcgpl.html
これのことじゃなくて??
0717デフォルトの名無しさん
2010/01/03(日) 10:08:24Cygwin はランタイムである cygwin1.dll 自体が(オープンソースなものに対する例外条項付き)GPLだから、
Cygwin 使う時点でバイナリ配布するなら(GPLである必要性はないが)オープンソースライセンスにせざるを得ない。
MinGW はランタイムそのものは Public Domain なんで問題ないけどライブラリを使う場合はそれぞれの
ライセンスに従う必要がある(これは Cygwin でも同じ)。
0718デフォルトの名無しさん
2010/01/03(日) 10:26:34if( foo() && a ){ ... } って書くのアリなの?
普通書かないだろうけど、言語的にどうなのよ
0719デフォルトの名無しさん
2010/01/03(日) 10:50:41論理演算氏は左から評価されるから、大丈夫なんじゃね?
0720デフォルトの名無しさん
2010/01/03(日) 10:56:310721デフォルトの名無しさん
2010/01/03(日) 13:07:05Cでもコードの位置を変えると動作が変わるということは
インタプリタと同じじゃないんですか。
0722デフォルトの名無しさん
2010/01/03(日) 13:12:11ただインタプリタは一行一行機械語に翻訳していくのに対しコンパイラはビルドしてexeにして
一気にやっちゃうだけの違いでしかない。
そんなもん知らなくても何の支障もでない。
0723デフォルトの名無しさん
2010/01/03(日) 13:26:360724デフォルトの名無しさん
2010/01/03(日) 13:26:380725デフォルトの名無しさん
2010/01/03(日) 13:39:33int a はどこで宣言されていますか? int a がfoo() のなかだと意味がない。
0726デフォルトの名無しさん
2010/01/03(日) 13:40:38インタープリタは単独で実行可能なファイル(実行ファイル)を出力しない。
0727デフォルトの名無しさん
2010/01/03(日) 15:12:32コピー先を参照渡しじゃなくて戻り値として取得することは出来ないの?
0728デフォルトの名無しさん
2010/01/03(日) 16:14:02グローバルです。
正確には、関数ポインタなんですが
int f1() { return 0; }
int f2() { return 1; }
int (*a)() = f1;
int f() { a = f2; return 1; }
int main() {
if( f() && a() ) { // ← これ
....
}
}
&& や || が左からってのは知ってて a() が後から実行されるのは
わかるんですが a の値そのものも後から評価されるのかなぁと
不安になりました
0729デフォルトの名無しさん
2010/01/03(日) 16:33:47のプログラムをそのまま試しにコンパイル&実行しようとしても
「コンパイルに失敗しました
ファイル " 〜 .exe" は存在しません」と出て実行できません
エディタ、コンパイラは CPad for LSI C-86 、 LSI C86 v3.30試食版 です
どうすれば良いんですか
0730デフォルトの名無しさん
2010/01/03(日) 16:40:03別のにしなさい
0731デフォルトの名無しさん
2010/01/03(日) 16:41:38別のコンパイラを使いましょう。
0732デフォルトの名無しさん
2010/01/03(日) 16:43:060733デフォルトの名無しさん
2010/01/03(日) 17:51:08char *strcpy(s, ct) の戻り値は s だが、それでは不満?
とすれば、C 言語には文字列型はないので、それは不可能。
というか、C 言語の malloc()/free() について経験と考察が必要と思われます。
strcpy が文字列を戻り値として返してきたとして、それを解放するのは誰?
0734デフォルトの名無しさん
2010/01/03(日) 17:54:31この例では f() は 0 を返すので、 a() 、正確には (*a)() は実行されません。
0735デフォルトの名無しさん
2010/01/03(日) 17:56:05失礼、f() は1を返すんですね。とすれば a() は実行されますね。
0736デフォルトの名無しさん
2010/01/03(日) 17:59:46f() は return 1; だぜよ。手持ちの VC6 では if の中実行される。
ところで話違うけど a() って (*a)() って書くのが正しいの?
0737デフォルトの名無しさん
2010/01/03(日) 18:03:24ご指摘ありがとうございます。
で、a は関数のポインタだから、(*a) と書いて呼び出しますね。a だけでもいいんですけれども。
0738706
2010/01/03(日) 18:12:14なるほど。丁寧にどうもありがとう。
それをヒントに探してみたら、
MinGW について頻繁に尋ねられる質問と回答(MinGW FAQ)
ttp://www.sixnine.net/cygwin/translation/mingw-doc/mingwfaq.html
> MinGW とは何ですか?
> (中略)
> MinGW は Windows オペレーティングシステムと共に配布されている
> Microsoft のランタイムライブラリを利用します。
> Windows に対して移植された他の GCC とは異なり、
> このランタイムライブラリは
> GNU 一般公有使用許諾契約書の元では配布されていません。
> 従って、あなたのプログラムと共にあなたのソースコードも配布する必要はありません。
> 勿論、あなたのプログラムが GPL のライブラリを利用していない限りですが…
こんなんが見つかった。
ってことは、
色々聞いて申し訳ないんですけれども、
MinGW上で
PublicDomainのライブラリX
標準Cライブラリ
標準C++ライブラリ
を使って全部staticリンクしてクローズドソースな実行ファイル.exeを一般に配布する
ということは可能だと解釈してよろしいです?
0739デフォルトの名無しさん
2010/01/03(日) 18:18:03環境によっちゃstrdupがあったりするけど、コピー先決められないのって不便じゃね?
0740デフォルトの名無しさん
2010/01/03(日) 18:24:030741デフォルトの名無しさん
2010/01/03(日) 18:27:59そんなところあるの?
0742デフォルトの名無しさん
2010/01/03(日) 19:40:34なぜに、というか strncpy() 推奨ってことかも。
0743デフォルトの名無しさん
2010/01/03(日) 20:10:56しかしstrncpyもstr系には入らないのか?
0744デフォルトの名無しさん
2010/01/03(日) 21:01:24strdup() にしても使用後にはちゃんと解放しなければならないし。
0745デフォルトの名無しさん
2010/01/03(日) 21:02:09んー、入るでしょうかね、んー。
0746デフォルトの名無しさん
2010/01/03(日) 21:41:270747デフォルトの名無しさん
2010/01/03(日) 21:46:45場合によっては '\0' をつけないときがあるのがややこしいですね。
0748デフォルトの名無しさん
2010/01/03(日) 21:47:47しかもそれを推奨するコンパイラ
0749デフォルトの名無しさん
2010/01/03(日) 21:51:16おっとVCの悪口はそこまでだ
0750デフォルトの名無しさん
2010/01/03(日) 21:52:00GCCなどワガママが作ってるコンパイラには入ってない
お前ンとこのポリシーがどうかじゃなく
安全かどうかだっつうに
0751デフォルトの名無しさん
2010/01/03(日) 21:54:01bccでlstrcatでも使ってろ
0752デフォルトの名無しさん
2010/01/03(日) 22:00:21> 安全かどうかだっつうに
それこそお前だけのポリシーじゃねぇか
お前本当に職業プログラマかよw
移植性とか標準規格とか考えたこともないの?哀れな。
0753デフォルトの名無しさん
2010/01/03(日) 22:02:300754デフォルトの名無しさん
2010/01/03(日) 22:30:090755デフォルトの名無しさん
2010/01/03(日) 22:42:23ん?オープンソースで活躍している人も
ほとんどが(元)職業プログラマですけど。。。
0756デフォルトの名無しさん
2010/01/03(日) 23:18:270757デフォルトの名無しさん
2010/01/03(日) 23:30:48そんな自分に言い聞かせなくてもw
0758デフォルトの名無しさん
2010/01/03(日) 23:30:59鬼車以外に無い?
regex.h はGPLなので除外=B
0759デフォルャgの名無しさん
2010/01/03(日) 23:37:04隣の席の人のやってるプロジェクトが、str系使わないで、
memcpy()とかmemcmp()を使って、文字列のサイズをことごとく、
直接書いてるのな。
memcpy(a, b, 10); みたいに。
str系はセキュアじゃないみたいなのが、間違って伝わってるんだろうなって
推測してる。
0760デフォルトの名無しさん
2010/01/03(日) 23:38:350761デフォルトの名無しさん
2010/01/03(日) 23:40:02企業の経営的な意味で。
0762デフォルトの名無しさん
2010/01/03(日) 23:41:25独自って言っても、そのうち標準になるんでしょ?
0763デフォルトの名無しさん
2010/01/03(日) 23:52:05そんなんいつの話さ。
0764デフォルトの名無しさん
2010/01/03(日) 23:58:17char *head;
if( (head = (char *)malloc(SIZE1024)) == NULL){
fprintf(DISPLAY, "Process couldn't get Memory space\r\n");
return -1;
}
・・・
・・・
・・・
free(head); /* free */
head = NULL; /* headは他からもfreeされる恐れあり */
ってやると「やり直せ!」と言われるんだけどなして?
0765デフォルトの名無しさん
2010/01/04(月) 00:04:32SIZE1024って意味なくね?
0766デフォルトの名無しさん
2010/01/04(月) 00:06:04SIZE1024の意味は?
0767デフォルトの名無しさん
2010/01/04(月) 00:07:520768デフォルトの名無しさん
2010/01/04(月) 00:08:090769デフォルトの名無しさん
2010/01/04(月) 00:09:40俺は単純に見た目分かりやすいのを好むのと、
C++ではvoid*は明示的にキャストしないといけないからやっていただけだっつうのに。
なんぞ悪いんかい。って思った。
0770デフォルトの名無しさん
2010/01/04(月) 00:12:46名前の付け方とか
0771デフォルトの名無しさん
2010/01/04(月) 00:18:28何ひとつ解っていない、と思われても仕方ないレベル
0772デフォルトの名無しさん
2010/01/04(月) 00:32:22不必要にキャストするのはバグの元だし、C++ならCのキャストは使わない方がいいし
どっちにしろ怒られるのは仕方がないことかと
0773デフォルトの名無しさん
2010/01/04(月) 01:03:39特にリエントラントとか言い出すと
それすら「やんな」ちゅうんだぜ
0774デフォルトの名無しさん
2010/01/04(月) 01:27:580775デフォルトの名無しさん
2010/01/04(月) 02:04:16こーゆー奴に限ってmainの特別視とか何とも思わねーのな
「規格で決められた」範囲でしか思考できておらず
本質的に何かという観点が完全に欠如している
救いようもなく終わってる奴ね
0776デフォルトの名無しさん
2010/01/04(月) 02:16:470777デフォルトの名無しさん
2010/01/04(月) 03:20:57済まんが、誰に何を言っているのか解らない。
0778デフォルトの名無しさん
2010/01/04(月) 10:02:05ローカル変数のheadが他からもfreeされる恐れってなんぞ
0779デフォルトの名無しさん
2010/01/04(月) 10:41:500780デフォルトの名無しさん
2010/01/04(月) 10:49:54str系はセキュアじゃないだろ。
0781デフォルトの名無しさん
2010/01/04(月) 11:04:46{
strncpy()
else{
printf("you are fucked\n");
0782デフォルトの名無しさん
2010/01/04(月) 11:07:130783デフォルトの名無しさん
2010/01/04(月) 12:35:22教えてくだしあ
Linux/GCC ver4.1.2
普段はシェルスクリプトで書いているんだけど
hoge.shを
Cで実行したらどうなるのか試してみたいんです
--huga.sh--
#!/bin/sh
/bin/hoge.sh
/bin/hoge2.sh
これをCで書くにはどうすりゃいいの?
CとシェルとUnixのエロい人おしえてぇ〜
0784デフォルトの名無しさん
2010/01/04(月) 12:41:21#include <stdlib.h>
int main()
{
system("/bin/hoge.sh ");
system("/bin/hoge2.sh ");
return 0;
}
0785729
2010/01/04(月) 14:46:27コンパイラを Borland C++Compiler に変えてみたのですができませんでした
助けて下さい
0786デフォルトの名無しさん
2010/01/04(月) 14:56:40まずコンパイラの使用を熟知したほうがいい
0787デフォルトの名無しさん
2010/01/04(月) 15:00:03コンパイルできてないんじゃね?
0788デフォルトの名無しさん
2010/01/04(月) 15:02:09どんなことが起こるかな
それゆけベーツェーツェーツェー
甲斐性なし(ってけてっ)
0789デフォルトの名無しさん
2010/01/04(月) 15:08:37何をしてどうなった?
できないと判断したのはどういう状況で?
0790デフォルトの名無しさん
2010/01/04(月) 15:15:44有り難うございます
0791デフォルトの名無しさん
2010/01/04(月) 15:17:02>>729と同じ状況です
0792デフォルトの名無しさん
2010/01/04(月) 15:38:30まずインストールしたのか、コンソールのHalloWorldくらいはコンパイルできたのか
ヘッダーのインクルードに失敗してないか、リンクするライブラリはちゃんと指定してるか
いろいろ確認することあるだろ
0793デフォルトの名無しさん
2010/01/04(月) 15:42:52後者のやり方を使う意義ってなんでしょうか?
0794デフォルトの名無しさん
2010/01/04(月) 15:47:020795デフォルトの名無しさん
2010/01/04(月) 15:47:35a[b] は、*(a + b) の略記というだけ。
0796デフォルトの名無しさん
2010/01/04(月) 15:47:36http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1218285417
0797デフォルトの名無しさん
2010/01/04(月) 15:48:00正常位中出しエッチと教えてくれました。
信じていいのでしょうか?
0798デフォルトの名無しさん
2010/01/04(月) 15:48:18質問の意味を理解して下さい
0799デフォルトの名無しさん
2010/01/04(月) 15:50:04略記だから、人間がどう捉えるかの問題。
0800デフォルトの名無しさん
2010/01/04(月) 16:25:47使い方による。
0801デフォルトの名無しさん
2010/01/04(月) 16:26:03コンパイラの都合。使う意義はない。
コンパイラ作ってみればわかる。
a[5]は許可して5[a]を禁止するのってめんどくさいから、両方許可してるだけ。
0802デフォルトの名無しさん
2010/01/04(月) 16:37:14わざわざ禁止する理由もないしな
0803デフォルトの名無しさん
2010/01/04(月) 16:40:34*(a+5)だから?
0804デフォルトの名無しさん
2010/01/04(月) 16:41:45*(5+a)でも一緒だろ?
0805デフォルトの名無しさん
2010/01/04(月) 16:41:51アドレスにオフセットを足すか、オフセットにアドレスを足すか、っていう違いじゃないのかな
0806デフォルトの名無しさん
2010/01/04(月) 16:44:000807デフォルトの名無しさん
2010/01/04(月) 16:55:480808デフォルトの名無しさん
2010/01/04(月) 16:57:56禁止する理由、というか禁止「すべき」理由はあるでしょ。
だからこの文法に関して「意義」とか言ってもただの愚問だね。
本来あるべき理想からいったら、正しくないわけだから。
そもそも「Cの精神」とやらが矛盾だらけの分裂症患者の妄言みたいなものだからさw
一方で「自分の足だって撃てる自由」を望んでおいて(だからこんなありえない文法を
あえて許容したんだろうたぶん)、他方で型安全なフールプルールを主張してるわけで。
0809デフォルトの名無しさん
2010/01/04(月) 17:09:54C#は前者、Cは後者。
もともとのCには void 型もなかったぐらい古い言語なので、
今日的な視点だけでこうあるべきだから禁止すべきというのはナンセンス。
0810デフォルトの名無しさん
2010/01/04(月) 17:14:52よく判ってないなら恥かくだけだから黙ってたほうがいいぞ
0811デフォルトの名無しさん
2010/01/04(月) 17:35:41>今日的な視点だけでこうあるべきだから禁止すべきというのはナンセンス。
それこそナンセンスな意見だ。
今日だろうと当時だろうと、プログラムを書くのは同じ人間なんだけど、
それを理解してるのかな。
もちろん「当時は技術的に困難だった」事柄や「当時には一般的じゃなかった知見」
についてはこの限りではない。
だが、30年前だって5[a]を禁止することが技術的に困難だったとも思えないし、
こんなものを許すより許さない方が好ましいことが理解されないほど
低レベルな世界じゃなかったと思うけど。
0812デフォルトの名無しさん
2010/01/04(月) 17:37:29エスパーのエロい人ありが�d!
0813デフォルトの名無しさん
2010/01/04(月) 19:19:32>30年前だって5[a]を禁止することが技術的に困難だったとも思えないし
困難だったんだよ。
CPUは8MHz、RAMは256KB、フロッピーディスクでコンパイルしてたような時代を憶測で語ろうとする無謀さに気づけ。
0814デフォルトの名無しさん
2010/01/04(月) 19:45:32同じように困難なはずだと思うけどねw
0815デフォルトの名無しさん
2010/01/04(月) 19:46:04抽象アセンブラを目指した言語にあるのは何の不思議もない
0816デフォルトの名無しさん
2010/01/04(月) 20:02:06オペランドの1つ目と2つ目を交換できない機械語なんか普通に存在するのだけど
0817デフォルトの名無しさん
2010/01/04(月) 20:27:54どこかに書いてあったんだが忘れた。
>>815と似たようなこと(思想的な部分)が回答として書かれていたはず。
0818デフォルトの名無しさん
2010/01/04(月) 20:30:50まったく意味が違う。
ポインタ[オフセット] は古いCでは 整数A[整数B] と展開されるから、整数Aと整数Bを区別できなかっただけ。
今時のC99とかC++とかの型付けの感覚で語るなと何度言えば。いや何度言ってもムダか・・・
0819デフォルトの名無しさん
2010/01/04(月) 20:58:14「その」展開そのものにはアンタッチャブルで文句言わないお約束なの?w
よくわからん思考をするお方。
0820デフォルトの名無しさん
2010/01/04(月) 21:05:36ちょっとAVRやってくる
0821738
2010/01/04(月) 21:18:190822デフォルトの名無しさん
2010/01/04(月) 21:28:180823デフォルトの名無しさん
2010/01/04(月) 21:29:070824デフォルトの名無しさん
2010/01/04(月) 21:42:30ブール代数か何かで
等価交換の法則だか半島の法則だか何だか忘れたが
A+B は B+Aと等しい(キリッ
ちゅう法則があったような気もするが
0825デフォルトの名無しさん
2010/01/04(月) 21:43:23キーボ入力で身長の下限および体重の下限を入力し,
その範囲の学生の学籍番号とその身長および体重を表示するには
どうすればよいですか?
0826デフォルトの名無しさん
2010/01/04(月) 21:43:49> ブール代数か何かで
もっとレベルを落として小学生ないし中学生まで戻っても
交換法則
って用語があるだろ?
それのことじゃないのかい?
0827デフォルトの名無しさん
2010/01/04(月) 21:45:01Programming Language C 3.3.2.1 には、
The Committee found no reason to disallow the symmetry that permits a[i]
to be written as i[a].
と書いてある。ANSI の委員会の考え方は、このとおり。
0828デフォルトの名無しさん
2010/01/04(月) 21:52:120829デフォルトの名無しさん
2010/01/04(月) 21:54:33cwsk
0830デフォルトの名無しさん
2010/01/04(月) 22:07:2110:00:00になったら
/bin/hoge.sh を起動したいのですが
その場合時間をどこで見るようにしたらいいのでしょうか?
バックグラウンドプロセスとして動かせるように出来ると
涙チョチョ切れものです szo
cronに書いとけヴォケってのは許してww
0831デフォルトの名無しさん
2010/01/05(火) 00:39:290832デフォルトの名無しさん
2010/01/05(火) 00:52:181 2 3 4 …n な感じで数値の間に半角スペースを入れて入力したいのですが、
どうすればいいですか?
0833デフォルトの名無しさん
2010/01/05(火) 01:07:50char s[0x100];
fgets(s, 0x100, stdin);
nptr = strtok(s, " ");
while (nptr) {
atoi(nptr); /* 返り値が数値。エラー処理を厳しくしたいなら strtol(...) */
nptr = strtok(NULL, " ");
}
テストしてないし適当ですまん。こんなんで理解してくれればうれしい
0834デフォルトの名無しさん
2010/01/05(火) 03:49:12crontabに書けない理由は述べないのか
10:00:00になるまでsleepすればいいよ
0835デフォルトの名無しさん
2010/01/05(火) 07:25:44あ、どもsleepは気が付きませんでしたw
cronを使えないというのは
cronで実行すると約1秒ほど時間が掛かるので
んじゃ、Cならどうかな〜?と
軽く考えてみただけっすw
ちょっとC本漁ってきます
0836デフォルトの名無しさん
2010/01/05(火) 10:33:310837デフォルトの名無しさん
2010/01/05(火) 10:37:100838デフォルトの名無しさん
2010/01/05(火) 10:40:460839デフォルトの名無しさん
2010/01/05(火) 10:45:580840デフォルトの名無しさん
2010/01/05(火) 20:17:46注文受けるほど何かできるわけなすなす
って>>784師匠のおかげでだいぶ早くなったので
もうどうでもいいやとか思いつつもBashって限界あるのな〜とか思った
玄箱でWebカメラと音声を連続で取り込んで
コマコマムービー作ろうと思ったんだけど
1秒ズレるんでCならば・・・と思っただけです
ではではおせわさまですたたたた〜
0841デフォルトの名無しさん
2010/01/05(火) 20:33:060842デフォルトの名無しさん
2010/01/05(火) 21:14:240843デフォルトの名無しさん
2010/01/05(火) 21:55:420844デフォルトの名無しさん
2010/01/05(火) 23:42:25むしろ遅くなって然るべきだな。
0845デフォルトの名無しさん
2010/01/05(火) 23:43:23p="foo";
p="bar";
これって同じ領域に代入されてるの?
それとも別の場所?
0846デフォルトの名無しさん
2010/01/05(火) 23:46:06p という領域にリテラルのアドレスを代入してる
0847デフォルトの名無しさん
2010/01/05(火) 23:50:360848デフォルトの名無しさん
2010/01/05(火) 23:53:400849デフォルトの名無しさん
2010/01/05(火) 23:55:540850デフォルトの名無しさん
2010/01/05(火) 23:57:120851デフォルトの名無しさん
2010/01/05(火) 23:57:36その通りです!
0852デフォルトの名無しさん
2010/01/06(水) 00:01:14p="foo";
printf("%d %d\n",&p,p);
p="bar";
printf("%d %d\n",&p,p);
とかで確認してみるといいかもね
0853デフォルトの名無しさん
2010/01/06(水) 00:05:55サンクス
0854デフォルトの名無しさん
2010/01/06(水) 00:36:48何やら10バイト浮動小数点という型も世の中にはあるようで、調べてみたんですが
FPUって10バイトのスタックに積んで計算をしているという記事をどこかで見ました
どうせ10バイトのスタックにつまれるなら同じものになるはずですよね
なのにfloatとdoubleで速度が違うという話を聞く(doubleの方が速い?)のですが、
速度の差ってどこから来るんでしょうか
0855デフォルトの名無しさん
2010/01/06(水) 00:41:01適切なスレへ行ってください
0856デフォルトの名無しさん
2010/01/06(水) 01:35:17math.hの数学関数が軒並みdoubleを引数に取るので、
floatで計算する場合、それらの関数を使うといちいちdoubleとの変換が必要で遅くなるというC固有の事情もある。
C95/C99でfloat版関数も揃えられたからこの問題は解消されたと言えるけど。
0857デフォルトの名無しさん
2010/01/06(水) 02:33:520858デフォルトの名無しさん
2010/01/06(水) 10:08:290859デフォルトの名無しさん
2010/01/07(木) 02:30:581つのCファイルにすべての関数を入れてライブラリにするより、
関数ごとにCファイルを作ってライブラリにした方が、
そのライブラリを使って動くCプログラムのバイナリサイズが
小さくなるのではと思い比較してみたのですが、
結果的には後者のライブラリを用いた方がバイナリサイズが大きくなってしまいました。
なぜこのようなことが起きるのか、お分かりになる方、ご教授ください。
0860デフォルトの名無しさん
2010/01/07(木) 02:47:26逆アセンブルしてみたら?
0861デフォルトの名無しさん
2010/01/07(木) 03:07:570862デフォルトの名無しさん
2010/01/07(木) 04:01:57/* Author : Nanashi-San
* 01/07/2010 Last Update
*
*/
0863862
2010/01/07(木) 04:04:20ソースの冒頭に、このソースの大まかな説明、作者、バージョンなどがコメントされていますが、
皆さんはどういうスタイルで記述されていますか?
あるいは、参考になるような神プログラマのソースがあったら、お教えくだちい><
0864デフォルトの名無しさん
2010/01/07(木) 04:20:47/*
* cdjpeg.c
*
* Copyright (C) 1991-1997, Thomas G. Lane.
* This file is part of the Independent JPEG Group's software.
* For conditions of distribution and use, see the accompanying README file.
*
* This file contains common support routines used by the IJG application
* programs (cjpeg, djpeg, jpegtran).
*/
大切なことは読んだ人がわかることだと。
ルールがあればそれに従う。
0865デフォルトの名無しさん
2010/01/07(木) 04:38:30レス感謝です
>大切なことは読んだ人がわかることだと。
なるほど!分りにくいところを簡素に説明、ってのがコメントの基本ですよね
初めてこのソースを読む人の気持ちを忘れないようにします
>ルールがあればそれに従う。
チームを組んで、大きなプログラムを作ってゆく時は大切そうですね・・・覚えておきます。
ありがとうございました!
0866デフォルトの名無しさん
2010/01/07(木) 04:53:03コンパイル単位に.oやら.objが作成される。
.obj .oは純粋にコードだけで出来ているのでは
なく、いくらか不純物を含む。(コンパイラやリンカ
が使用する情報)この不純物の量は.obj .oのサイズに
関わらずほぼ一定。つまり一つの.oや.objにコード
を詰め込んだほうが概して「純度」があがる。
リンクした際にも、この「不純物」はいくらか混入
する。よってリンクする.o .objが増えたらサイズが
それなりにでかくなってもおかしくはない。
0867デフォルトの名無しさん
2010/01/07(木) 04:56:28MAPファイル出力するようにしてそれを見てみたら
0868デフォルトの名無しさん
2010/01/07(木) 14:39:23内積をだすプログラムを作ろうとしましたが型をうまく使えません。
この場合エラーをどうすれば消せるのでしょうか?
又、&変数と変数[]は同じだというのを見たのですが、
visualc++でデバッグすると書き換えるとエラーの文章が変わる時があります。どう使い分ければいいのでしょうか
0869デフォルトの名無しさん
2010/01/07(木) 14:57:14よくみてないけど、こうしたいのか?
0870デフォルトの名無しさん
2010/01/07(木) 17:03:12例えば配列で
int a[5];
の値が全部1だったら〜ってのを
if(a[0]==1 && a[1]==1 && a[2]==1 && a[3]==1 && a[4]==1)
なんてやんないでスマートにやるにはどうすればいいんだい
0871デフォルトの名無しさん
2010/01/07(木) 17:07:340872デフォルトの名無しさん
2010/01/07(木) 17:08:27if (1 == (a[0] & a[1] & a[2] & a[3] & a[4]))
0873デフォルトの名無しさん
2010/01/07(木) 17:09:06a[0]==3
0874デフォルトの名無しさん
2010/01/07(木) 17:10:300875デフォルトの名無しさん
2010/01/07(木) 17:10:370876デフォルトの名無しさん
2010/01/07(木) 17:12:580877デフォルトの名無しさん
2010/01/07(木) 17:13:20}
0878デフォルトの名無しさん
2010/01/07(木) 17:15:35C言語でおk
ついでに 0 と 1 以外の値でアボン
0879デフォルトの名無しさん
2010/01/07(木) 17:32:52x[10]=20;
みたいにできる、配列の最大要素数が無い欠陥言語だから
870のようにやるにはちょっと面倒なことしなきゃならん。
0880デフォルトの名無しさん
2010/01/07(木) 17:43:410881デフォルトの名無しさん
2010/01/07(木) 17:45:410882デフォルトの名無しさん
2010/01/07(木) 17:48:520883デフォルトの名無しさん
2010/01/07(木) 17:50:01入門スレだからしょうがないね
0884デフォルトの名無しさん
2010/01/07(木) 18:00:520885デフォルトの名無しさん
2010/01/07(木) 18:10:480886デフォルトの名無しさん
2010/01/07(木) 18:28:500887デフォルトの名無しさん
2010/01/07(木) 18:34:18C と付き合い始めて25年、いろいろやったけれども、まだわからないことが多いです。
0888デフォルトの名無しさん
2010/01/07(木) 18:35:53たとえば?
0889デフォルトの名無しさん
2010/01/07(木) 18:38:170890デフォルトの名無しさん
2010/01/07(木) 18:56:01資料とにらめっこばかりで全然コーディングしないここの回答者連中のこと
0891デフォルトの名無しさん
2010/01/07(木) 19:18:150892デフォルトの名無しさん
2010/01/07(木) 19:27:13コボラーなら一つの言語だけで食っていけるのだろうか
0893デフォルトの名無しさん
2010/01/07(木) 19:36:460894デフォルトの名無しさん
2010/01/07(木) 19:43:140895デフォルトの名無しさん
2010/01/07(木) 19:45:20とりあえずルールだけ覚えた将棋みたいなものか
0896デフォルトの名無しさん
2010/01/07(木) 19:49:48規格を(右辺がどの左辺がどうのなども)丸暗記してる奴がいたら、
あいまいな理解であいまいな表現をしてあいまいなコード書く奴よりはいい。
0897デフォルトの名無しさん
2010/01/07(木) 19:51:170898デフォルトの名無しさん
2010/01/07(木) 20:02:110899デフォルトの名無しさん
2010/01/07(木) 20:06:05mem p cpyのcやpが何なのかわからん
0900デフォルトの名無しさん
2010/01/07(木) 20:25:56エラー処理をどうすればいいか、とか。
http://pc12.2ch.net/test/read.cgi/tech/1260532772/203
0901デフォルトの名無しさん
2010/01/07(木) 20:32:04こりはいよいよデバッガの参上か、と毎回おもいつつ、printf() とひらめきだけでなんとかおさまっていますう。
0902デフォルトの名無しさん
2010/01/07(木) 21:10:280903デフォルトの名無しさん
2010/01/07(木) 21:15:00使い道がわからない。あと引数があるときはどう指定するの?
0904デフォルトの名無しさん
2010/01/08(金) 00:48:18例えばgoto文やグローバル変数を否定する理由を明確に答えられる奴はその歳でも少ないよ
0905デフォルトの名無しさん
2010/01/08(金) 00:52:40ちなみにお前は答えられるのか?
0906デフォルトの名無しさん
2010/01/08(金) 00:59:170907デフォルトの名無しさん
2010/01/08(金) 01:06:27うん、答えられるよ
おまえには教えないけどね
0908デフォルトの名無しさん
2010/01/08(金) 01:07:391.適当なフォルダにあるEXEファイルを右クリック→[スタート]メニューにアイコンを追加を選択
2.先ほどのEXEファイルがあるフォルダ自身の名前を変更する
3.スタートメニューを開いて上記の手順で追加したリンクを右クリック→プロパティを選択
4.無効なリンクになっているので、[変更]ボタンを押す
5.該当ファイルの変更後の正しい場所を指定する
6.・・・なにぃ!!
感想きぼんぬ
※ 一人でニヤニヤした後は設定を元に戻しておきましょう
0909デフォルトの名無しさん
2010/01/08(金) 01:13:50goto 文は、今は否定されていだいだろ。
0910デフォルトの名無しさん
2010/01/08(金) 01:14:11今頃ひっかかってよっぽどくやしかったのかな
0911デフォルトの名無しさん
2010/01/08(金) 01:15:09部分的に認められているけど、「やっちゃいけないパターン」は今でも健在
0912デフォルトの名無しさん
2010/01/08(金) 01:15:37あなたの言葉が理解できない
0913デフォルトの名無しさん
2010/01/08(金) 01:15:54へぇどうなんの?
vistaだから分からないや
0914デフォルトの名無しさん
2010/01/08(金) 01:16:37これやるとexeをどのクリックしても、5で選んだアプリが起動するようになる
つうか、何が起こってるか最初わからず、泣きそうになったw
0915デフォルトの名無しさん
2010/01/08(金) 01:17:500916デフォルトの名無しさん
2010/01/08(金) 01:18:37ム板に貼ってなんか意味あんのかなあ
0917デフォルトの名無しさん
2010/01/08(金) 01:19:36goto禁止厨がいるかぎりgotoをしようすべきではない
0918デフォルトの名無しさん
2010/01/08(金) 01:20:350919デフォルトの名無しさん
2010/01/08(金) 01:20:41「gotoはいついかなる状況でも絶対つかっちゃいけません。」
ならgotoキーワード廃止しろよと思うが。
浦島太郎さんこの箱をあげましょう、でも絶対にあけないでくだしあ。
玉手箱ですかw
0920デフォルトの名無しさん
2010/01/08(金) 01:22:00脱出とか
0921デフォルトの名無しさん
2010/01/08(金) 01:45:17を極度に読みにくく出来るので、乱用を恐れて
禁止するケースが多い。例:http://codepad.org/UFWzPjxr
業務PGでは変数名、関数名、ファイル名など管理しなければ
ならないものが多いので、ラベルまで管理対象に入れたくないが
使われると入れざるを得ないという理由で禁止されるケース
が多いが、これも一見まっとうに見えて実は何かが間違っている
0922デフォルトの名無しさん
2010/01/08(金) 01:46:070923デフォルトの名無しさん
2010/01/08(金) 01:50:30goto文を「使うべき」ケースが藤原さんのページでごく軽く示されているが
泣き所が関数をまたげないことで、この点はK&Rの説明でさえダメだからな・・・
0924デフォルトの名無しさん
2010/01/08(金) 02:10:54キミの会社ではローカル変数まで部署管理なのかw?
ウチでは関数までは部署管理で追加する場合や新規に
呼び出す場合や呼び出しを廃止する場合とかはイチイチ
報告書書かなければならないけど。さすがにローカルauto変数
の追加、廃止、使用方法変更で報告書までは書かされないよ。
名称はコーディング規約で厳格に規制されてるけど。
ラベルはどうかは知らない。switchラベルレベルだと自由に
使えるみたいだが関数内ラベルだと恐らく自由だとは思うが
変数名制約に抵触する場合を考えると完全に自由というわけでも
なさそう。
0925デフォルトの名無しさん
2010/01/08(金) 03:50:57コーディング規約で改行の入れ方も規定したほうがいい
0926デフォルトの名無しさん
2010/01/08(金) 04:08:02このバグまだ直ってなかったのか。
拡張子の.exe が別のアプリに関連づけられてシェルからプログラムが
起動できなくなるからやらんほうがいいよ。
修正はここに .exeが登録されてるから削除すればいい。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\
0927デフォルトの名無しさん
2010/01/08(金) 05:00:580929デフォルトの名無しさん
2010/01/08(金) 10:07:57米ドル紙幣としては次のような紙幣とコインがある。
100ドル、50ドル、20ドル、10ドル、5ドル、2ドル、1ドル
50セント、25セント、10セント、5セント、1セント
問題は、キーボードから日本円を入力し、まずドルに変換した後ドルを紙幣とコインに振り分けるプログラムを作成しなさい。但し1ドルを92.69円として換算しなさい。そして、日本円が0円の時にプログラムを終了する。
例
¥195,865
2,112,89$
100$…21枚
50$
20$
10$…1枚
5$
2$…1枚
1$
50¢…1枚
25¢…1枚
10¢…1枚
5¢
1¢…4枚
このような問題なんですがプログラムとして最適なものが分かる方は是非教えてください。
* グレード
0930デフォルトの名無しさん
2010/01/08(金) 10:11:190931デフォルトの名無しさん
2010/01/08(金) 11:01:36#define RATE 92.69
int main(int argc, char *argv[])
{
int i;
float yen = 0.0;;
long dollar = 0;
long exchange;
long k[] = {10000, 5000, 2000, 1000, 500, 200, 100, 50, 25, 10, 5, 1, 0};
char *str[] = {"100$", "50$", "20$", "10$", "5$", "2$", "1$", "50�k", "25�k","10�k","5�k","1�k", ""};
scanf("%f", ¥);
if(yen == 0.0) return 0;
/* ドル円変換式、例題のような変換値にならなかったので固定 */
/*dollar = (long)((yen / RATE) * 100000);*/
dollar = 211289;
for(i=0; k[i] != 0; i++)
{
exchange = dollar / k[i];
printf("%s... %d枚\n", str[i], exchange);
dollar = dollar - (exchange * k[i]);
}
return 0;
}
0932デフォルトの名無しさん
2010/01/08(金) 11:03:420933デフォルトの名無しさん
2010/01/08(金) 12:34:11setjmp
0934デフォルトの名無しさん
2010/01/08(金) 15:28:59例えば"5b7c"だと以下のように格納します。
int digits[];
digits[0] = 0xc
digits[1] = 7
digits[2] = 0xb
digits[3] = 5
0935デフォルトの名無しさん
2010/01/08(金) 15:37:2610進数だったらわかる?
0936デフォルトの名無しさん
2010/01/08(金) 15:48:42すみません、10進法でもわかりませんorz
0937デフォルトの名無しさん
2010/01/08(金) 16:01:08とか
0938デフォルトの名無しさん
2010/01/08(金) 16:46:52たとえば10進数の 7654 の4桁の場合、
digits[0]: 10 で割った余り(を 1 で割った答え)
digits[1]: 100 で割った余りを 10 で割った答え
digits[2]: 1000 で割った余りを 100 で割った答え
digits[3]: (10000 で割った余りを) 1000 で割った答え
0939デフォルトの名無しさん
2010/01/08(金) 16:50:10c = tolower(c);
return 'a' <= c && c <= 'f' ? 10 + c - 'a' : c - '0';
}
int main() {
char *cs = "5b7c", *p;
int digits[4], i;
for (i = 0; i < strlen(cs); i++) digits[i] = ctoi16(cs[i]);
for (i = 0; i < 4; i++) printf("digits[%d] = %x\n", i, digits[i]);
return 0;
}
みたいな。けど、>>937みたいにするのがスマートだと思う。
0940デフォルトの名無しさん
2010/01/08(金) 16:53:420941もっとスマートなやり方はきっと存在するはず
2010/01/08(金) 16:55:46#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define SA ('a' - 10)
int main(int argc, char *argv[])
{
char *str = "5b7c"; /*大文字アルファベットが混じると落ちる*/
int *digits;
int i, len;
char work[2];
len = strlen(str);
digits = (int *)malloc(sizeof(int) * len);
memset(digits, 0, sizeof(int) * len);
memset(work, 0, sizeof(work));
for(i=(len - 1); 0<=i; i--)
{
work[0] = *(str + i);
if(isdigit( *(str + i) ))
{
*(digits + i) = atoi(work);
}
else {
*(digits + i) = work[0] - SA;
}
}
free(digits);
return 0;
}
0942デフォルトの名無しさん
2010/01/08(金) 17:18:12ありがとうございます。
みなさんのを参考に何とかできました。
0943デフォルトの名無しさん
2010/01/08(金) 19:50:44いや別に知りたくねぇよ。
低能の戯れ言を信じるやつはいねぇ
0944デフォルトの名無しさん
2010/01/08(金) 20:03:34100分の1秒も表示したいお
AAがで表示したいw
0945デフォルトの名無しさん
2010/01/08(金) 20:28:42#include <time.h>
int main(void)
{
time_t t = time(0); srand(t);
getchar();
printf("stop: %d.%02d\n", time(0) - t, rand() % 100);
}
0946デフォルトの名無しさん
2010/01/08(金) 20:37:17小数点以下ひでぇwww
0947デフォルトの名無しさん
2010/01/08(金) 20:41:430948デフォルトの名無しさん
2010/01/08(金) 21:40:32#include <stdio.h>
main() {
int a1, a2, a3, a4;
int a[]={ 35, 40, 45, 50};
int i, c;
double ave;
for (i=0; i<4; i++) {
c += a[i];
ave = c/4.0;
if ( a[i] >= ave ); }
printf("平均以上=\n", a[i]);
return 0;
}
平均値を超えている数値の数なら出せるのですが、数値そのものを出せ、という問題が出来ません。
どこが間違ってるか教えてください。
0949デフォルトの名無しさん
2010/01/08(金) 21:42:38こういうのってCの問題でも何でもないよな
0950デフォルトの名無しさん
2010/01/08(金) 21:49:20とかって警告でるんじゃねえの
0951デフォルトの名無しさん
2010/01/08(金) 21:52:210952デフォルトの名無しさん
2010/01/08(金) 21:53:24VC#ならでる
0953デフォルトの名無しさん
2010/01/08(金) 21:55:03・cが初期化されてないのに+=で代入している
・if ( a[i] >= ave );という意味のなさない文がある
・バグの原因ではないがaveに4回も代入する必要はない
・偶然にも2になったとしても表示してるのは平均以上の数ではない
・曲がりなりにもコンパイルと実行できるのが奇跡に思える
・っていうか釣りじゃないよね?
0954デフォルトの名無しさん
2010/01/08(金) 22:03:24main() {
int a1, a2, a3, a4;
int a[] = {35, 40, 45, 50};
int i, c;
double ave;
for(i=c=0; i<4; i++) c += a[i];
ave = c / 4.0;
for(i=0; i<4; i++) {
if(a[i] >= ave) printf("平均以上=%d\n", a[i]);
}
return 0;
}
こういうことがやりたいのかなあ?
0955デフォルトの名無しさん
2010/01/08(金) 22:12:35入門者なんてとんでもない勘違いをしてることが多いのにいちいちワライにきてるのかね。
0956デフォルトの名無しさん
2010/01/08(金) 22:14:450957デフォルトの名無しさん
2010/01/08(金) 22:16:250958デフォルトの名無しさん
2010/01/08(金) 22:28:570959デフォルトの名無しさん
2010/01/08(金) 22:32:110960デフォルトの名無しさん
2010/01/08(金) 22:36:28ちょww なんかrandって気になるんですけどwww
気にしたら負けなんですか?
0961デフォルトの名無しさん
2010/01/08(金) 22:43:36些細なことよりも全体を見るべき
意味がわかればそれでいい
0962デフォルトの名無しさん
2010/01/08(金) 23:25:07木を見て森はどうでもイイw
0963デフォルトの名無しさん
2010/01/08(金) 23:35:51頭の問題だよな
0964デフォルトの名無しさん
2010/01/09(土) 00:22:49main() {
int a[] = {35, 40, 45, 50};
int i, c;
c=0;
for(i=0; i<4; i++) {
c += a[i];
}
for(i=0; i<4; i++) {
if(a[i] >= c/4.0);
}
printf("平均以上=\n", a[i]);
return 0;
}
直しました。皆さんすみません。釣りじゃないです。
>>953
今回は2を出したいわけじゃありません。45、50という数値を出したいです。
コンパイルすると確かに,if文に警告が出ます。printの文がググっても分かりません。
正しい書き方を教えてください。
0965デフォルトの名無しさん
2010/01/09(土) 00:28:43おまえは人の親切心をブチ壊すのが趣味か
最低だな
0966デフォルトの名無しさん
2010/01/09(土) 00:29:010967デフォルトの名無しさん
2010/01/09(土) 01:01:02入門用に最適。シンプルでわかりやすいから初心者に勧める
という2人がいますが、どっちが正しいんでしょうか
0968デフォルトの名無しさん
2010/01/09(土) 01:01:21懐が浅いよ、おまえ
0969デフォルトの名無しさん
2010/01/09(土) 01:01:350970デフォルトの名無しさん
2010/01/09(土) 01:05:34「入門」がどういうレベルかによるが、
ローティーンにはインタープリタ方式の方が頭の柔らかさを活かせると思う
それで育った幅広い発想力を土台に、専門分野へチャレンジするときがCの出番だと思う
0971デフォルトの名無しさん
2010/01/09(土) 01:06:510972デフォルトの名無しさん
2010/01/09(土) 01:46:47前者が正しい。
Cがシンプルでわかりやすい?初心者に勧める?とんでもない大ウソだ。
シンプルでわかりやすく、初心者でも扱えるような言語で、UNIXが記述できるはずがない。
こだわる人のために補足すれば、Cは「難解」ではなく、「危険」だ。ちょっとしたミスが大怪我を引き起こす。
それだけ細かいことが出来るからこそ、OS記述言語として使われている。
0973デフォルトの名無しさん
2010/01/09(土) 01:49:22最初かと言われると微妙だけど、フォンノイマン型コンピュータを扱う上でいつかはCに触れて欲しい。
0974デフォルトの名無しさん
2010/01/09(土) 01:51:220975デフォルトの名無しさん
2010/01/09(土) 01:52:48アセンブラと比べると難解すぎるし、
C++と比べればシンプルでわかりやすい。
0976デフォルトの名無しさん
2010/01/09(土) 01:55:070977デフォルトの名無しさん
2010/01/09(土) 02:20:56できますか?
0978デフォルトの名無しさん
2010/01/09(土) 02:22:550979デフォルトの名無しさん
2010/01/09(土) 09:48:52> 入門にはライトな言語が良い
これは、勉強する人がくじけそうな性格ならそうだろう。
しかしC言語が書けないプログラマはもはやプログラマではない
と言って差し支えないほどC言語は普及しているので、
どうせやるなら最初はC言語がいいんではないかと。
0980デフォルトの名無しさん
2010/01/09(土) 09:59:210981デフォルトの名無しさん
2010/01/09(土) 10:02:29同感
0982デフォルトの名無しさん
2010/01/09(土) 10:37:17・ネットで読めるサンプルの数
・質問のできる場、対する回答者の数
・入門者向けのために「正確さ」を端折った解説の量
C言語はこれらが圧倒的に多いため入門用に最適。
ただ、コードの読み書きだけで見れば、他のLL言語が良い。
どちらにしても初心者ってのは、何がわからないのかがわからない。
調べる方法と聞ける相手と場を与えることが大切で、それさえ教えてしまえば
もう初心者ではなく、どんな言語でもあとは
読んで触って試して改造してテストしまくってもらえば身につく。
本当にどんな言語のコードでも読んだことも見たことも無い人向けならば
俺なら構造と階層の意味と、プログラムにおける当たり前の
開いたら閉じる書式を知ってもらうために、まずはXHTML薦めるわ。
IEバグに関連付けてソフトウェアのバージョン違いを意識してもらうことと
更新の大切さも教えられるから。
C言語でもLL言語でも入るのはそれからだな。
0983デフォルトの名無しさん
2010/01/09(土) 10:40:20書き方しかできないおっさんとかゴロゴ
ロいるからCができれば他もできるって
のは賛成できない。
0984デフォルトの名無しさん
2010/01/09(土) 10:43:30あるあるw
Cやった上で、JavaなどのOOPL行くのが最良と思う。
Cで溜まったある種のフラストレーションを、
OOPでの抽象化によって開放させてみてほしいと思う。
0985デフォルトの名無しさん
2010/01/09(土) 10:49:07きたオッサンとしては、今の時代、
LLから入門してもいいじゃないかって
気もする。
0986デフォルトの名無しさん
2010/01/09(土) 10:51:51Javaが教えてくれたものがやっぱり大きいと思う。
0987デフォルトの名無しさん
2010/01/09(土) 10:59:46LL言語ってなに?HTML言語みたいにLと言語って重ねるもんなの?
0988sage
2010/01/09(土) 11:31:29うわ、釣れた釣れた w
0989デフォルトの名無しさん
2010/01/09(土) 11:46:520990デフォルトの名無しさん
2010/01/09(土) 12:10:11書いてて今気付いたわすまん、LLにすべきで
LL言語だと頭痛が痛いと同じだな……
0991デフォルトの名無しさん
2010/01/09(土) 12:14:420992デフォルトの名無しさん
2010/01/09(土) 13:09:100993デフォルトの名無しさん
2010/01/09(土) 13:23:29TCPプロトコルなんかと同じで、LLだけだと短くて居心地が悪い人が多いんだろう
0994デフォルトの名無しさん
2010/01/09(土) 13:32:260995sage
2010/01/09(土) 13:35:47C言語なんかと同じで、Cだけだと短くて居心地が悪い。
0996デフォルトの名無しさん
2010/01/09(土) 14:21:59sageは間違えてるの?わざとなの?
次
C言語なら俺に聞け(入門編)Part 59
http://pc12.2ch.net/test/read.cgi/tech/1263014439/
0997デフォルトの名無しさん
2010/01/09(土) 14:40:04乙
0998デフォルトの名無しさん
2010/01/09(土) 14:42:410999デフォルトの名無しさん
2010/01/09(土) 14:43:501000デフォルトの名無しさん
2010/01/09(土) 14:44:37http://pc12.2ch.net/test/read.cgi/tech/1263014439/
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。