- 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++対応明記スレへどうぞ ★分からない事をなるべく詳しく書いて下さい。 ★ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること # サイズが大きい場合は宿題スレのアップローダ等を利用してください ★開発環境や動作環境も晒すと答えが早いかもしれません。 ★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
- 403 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 21:02:37 ]
- 質問です。コマンドラインで-Dと指定したときに条件付けしようとしています。
次のように書くと動作するのですが 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の条件中だけで全て条件付けることはできないのでしょうか。
- 404 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 21:05:18 ]
- >>403
目的を達するために getopt を使うとか strcmp で比較するのはどう?
- 405 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 21:06:48 ]
- 3つ並べた時の短絡評価って保障されてんの?
- 406 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 21:10:58 ]
- >377
ネタにマジレスするのは、どうかと思うが、つっこんでみる。 怪しい知識をたとえ話にするから、よくわからんぞ。 知らない人は理解できないだろうから、誤解しようも無いが・・・・・・。 >明白に誰が何に使っているか分かってないものは渡せません!っていうお約束がある。 そんな約束はない。Cのポリシーは、明示的にせよ、暗黙にせよソースにかかれたものは その通り実行する、である。だからポインタにどんな値がセットされていようが、その通り動作しようとする。 >「こんにち波」っていうのは、あくまでも「まだどこにも属しておらず、アドレスともデータとも認められていない」 状態である。 リテラルはコードの中に埋め込まれている。メモリ上に置かれているからポインタも取れる。 >配列は長さが明白に分かってるポインタのようなものだから 配列とポインタは別物。
- 407 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 21:12:54 ]
- クラックするのにC言語使ってる人っているの?
- 408 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 21:13:57 ]
- >>403
debug=1 はどこにあるの?
- 409 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 21:15:57 ]
- >>403
最初の引数が -D じゃなかったらwhileループから抜けてしまって2個め以降の引数を見ないのでは?
- 410 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 21:28:53 ]
- >403
とりあえず while(--argc > 0 && (*++argv)[0] == '-' && (*argv)[1] == 'D') でも問題なさそうだけど。どういう動作を期待しているの? ちなみに次のように、[]演算子を使って書く方がわかりやすいと思う。 while(--argc > 0 && argv[argc][0] == '-' && argv[argc][1] == 'D')
- 411 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 21:33:09 ]
- 値が0のint型変数2つどうしで引算をすると
すごくでかい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は任意
- 412 名前:403 mailto:sage [2009/12/20(日) 21:35:01 ]
- >>404
getopt調べてみました。かなり便利そうですね。ありがとうございます。 >>409 それでした。この行以前に違うコマンドで認識させている部分があって、-Dは2番目の引数になっていたためでした。 こんな1種類の引数を検出する方法はそもそも汎用性がなさそうですね。 実際に使う時はcaseで場合分けなどしようと思います。 ただ条件文の評価の仕方は疑問が取れてすっきりしました。ありがとうございました。
- 413 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 21:35:21 ]
- 自分で0を代入してないなら、その変数は0じゃないぞ
- 414 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 21:35:44 ]
- >>411
意味が分からないので動作するソースを貼ってちょ
- 415 名前:403 mailto:sage [2009/12/20(日) 21:39:06 ]
- >>410
その方がシンプルですね。参考にします。
- 416 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 21:39:14 ]
- bool型を返す関数foo(), bar()があるとき、
foo()&&bar() と foo()&&bar() の違いを教えてください。
- 417 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 21:42:24 ]
- >>416
同じじゃね? bool の表現が 0 1 だけじゃないかもしれないし
- 418 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 21:44:15 ]
- foo() && bar()
と bar() && foo() は違うけどな。
- 419 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 21:46:56 ]
- >>416
てか、上と下が同じに見えるんだけど。
- 420 名前:416 mailto:sage [2009/12/20(日) 21:52:18 ]
- 申し訳ございません。
foo()&&bar() と foo()&bar() の違いでございました。。。
- 421 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 21:56:37 ]
- >>415
ごめん解決したわ unsigned int とint で演算やってたんだがintのみでやったら変な値でなくなった
- 422 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 21:57:21 ]
- >>414 ○
>>415 × ごめんなさい間違えました
- 423 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 22:09:51 ]
- >>421
え。それじゃ、 (unsigned int)0 - 0 が、0 にならなかったってこと?
- 424 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 23:12:09 ]
- 配列はポインタじゃねえ!というのに
なんで **argv と *argv[]は 同じに見てくれるのですか。コンパイラは。(倒置法)
- 425 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 23:16:08 ]
- 因襲というもんです
立ち入らないで下さい。
- 426 名前:421,411 mailto:sage [2009/12/20(日) 23:19:54 ]
- 例
UINT 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同士だとだめだった
- 427 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 23:22:08 ]
- >>424
配列もポインタも、アドレスを表現しているという意味で同じだから。
- 428 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 23:29:32 ]
- 配列ってポインタよりも高級な構造という扱いなんでしょ?
- 429 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 23:29:54 ]
- 否、シンタックスシュガーという名の因襲と
理解するのが一番。深入りしない。苦労して 覚えない。その為にコンパイラにシンタックスチェッカーが 付いているんだからさw エラーを指摘せず勝手に内部でコード作って実行しちゃう JavaScriptとかと違ってCは良心的。但し生産性が高い 言語では無くなってるけどね。
- 430 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 23:43:19 ]
- もともと場当たり的に作られた言語だし
- 431 名前:デフォルトの名無しさん [2009/12/20(日) 23:45:31 ]
- >>427
という説明が char argv[][] という有名な落とし穴へ子羊を蹴落とす
- 432 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 00:02:58 ]
- *(hoge + i) と hoge[i] は等価。つまり配列とはアドレス演算である。
なお、後者は前者のシンタックスシュガー、C言語規格によるただの"親切"である。 i はインデックスではなく、hoge が示すアドレスからのオフセットである。 これでいいですか?
- 433 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 00:06:59 ]
- >424
「関数のプロトタイプ宣言の中では」配列とポインタは同じ。 Cでは関数に配列を渡すことはできない。 しかし使う場合は実引数として配列名を書くことが多く、それは配列の 先頭を指すポインタとして評価され、ポインタを渡していることになる。 以下の3つは全て同じ意味。 void func(int *a); void func(int a[]); void func(int a[N]);
- 434 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 00:07:55 ]
- >>397
上位互換チップはありだと思いますが、一般にICE ではどうやって実行を一命令ごとに停止させるのでしょうか? やっぱりCPU のステップ実行割り込みを利用してそうなんですが。
- 435 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 00:12:37 ]
- 色々あるけど、ROMやRAMを乗っ取って1命令後に停止させる命令を埋め込むのは、力技だなと感心したことがある
- 436 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 00:14:28 ]
- >>419
ショートカットの有無かな?&& で前の式が偽だったら、後の式は評価すらされない、という。
- 437 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 00:15:35 ]
- >427
君大間違い。配列とポインタは全く別物。 >432 「つまり配列とはアドレス演算である。」 この一文が致命的な誤り。その他の部分はあっている。 1番目のポイント 宣言と式では文法が別物になっている 2番目のポイント &, *のオペランドになったとき以外は配列名のみを書くと、 配列の先頭要素を指すポインタとして評価される。 二項演算子[]はポインタと整数型をオペランドとし以下のように定義する。 *(p + i) ≡ p[i]
- 438 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 00:25:17 ]
- >>437
オメー 何書いてあるかわかんねネーンダy
- 439 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 00:57:14 ]
- ポインタはアドレスを指している場合が多いが、アドレスはポインタではない
- 440 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 00:59:34 ]
- >>438
*(hoge + i) と hoge[i]以外で、配列とポインタで異なる事例はいくらでもあるから、 配列 == ポインタという図式は成り立たないということ。 >>437 &, *ではなくて&, sizeofだよね。
- 441 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 01:01:54 ]
- Cには実はアドレスという概念すらないぞ
&変数はあくまでも整数定数値。&を省略出来るケースも 多い。それを適切なポインタにキャストするだけ そのポインタが&を指定した変数を指してくれてるかどうかは コンパイラの気分次第。あんまし曖昧だととんでもないところ を指すかも知れない。
- 442 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 01:03:40 ]
- >Cには実はアドレスという概念すらないぞ
( ゚Д゚)ハァ?
- 443 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 01:06:31 ]
- 1行目を読んで、メモリアドレスを抽象化した存在だからという説明に向かうのかと思ったが、
2行目以降が残念な文章だった。
- 444 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 01:09:11 ]
- >>434
Z80のデバッガだと、止めたいアドレスをRST命令に書き換えて、デバッガを実現していた。
- 445 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 01:12:05 ]
- int a[10];
&a[2]は「アドレス」としてコンパイル時に定められる 翻って int a[10],i; &a[i]は文法上はアドレスとしては定義不能。 あくまでもコンパイラに恣意的な解釈裁量権がある。 従って「アドレス」という概念は定まっているとは言い切れないんだ な。これがw。
- 446 名前:437 mailto:sage [2009/12/21(月) 01:13:37 ]
- >440
そう、*じゃなくてsizeofでした。 実はもう一つ文字列リテラルを配列の初期化子として与えたとき というものがあるのだが、これは宣言の中だからね。
- 447 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 01:13:43 ]
- 慣習的解釈がされている部分もあるということですね
- 448 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 01:13:46 ]
- >>445
お前>>441?何の本の受け売りか知らんが、ちゃんと理解してから書き込めよ
- 449 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 01:18:42 ]
- >>440
もとの質問 >>424 は、ポインタと配列とではどこが同じなのか(意訳)ということを聞いてるんだよ。
- 450 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 01:22:24 ]
- >445
根比べになっているけどさ、「アドレス」が無いってのは正しい。 ポインタの内部表現がどうなるべきかは定められていない。 その割には単項&がアドレス演算子だったりするのだけれど。 型T,識別子xにたいして T x; という宣言があったとき、&xがxを指すポインタを生成し、 *(&x)の評価結果がxでアリさえすればよい。 >&a[i]は文法上はアドレスとしては定義不能。 この文章の意味不明。 &a[i]は文法上何の問題もなくコンパイラも実行もできる。 ただし実行結果が保証されるのは0〜9だけ。
- 451 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 01:26:33 ]
- >445
>&a[i]は文法上はアドレスとしては定義不能。 iがゴミの値だからどこにアクセスするかわからないのだけれど、そういう意味なの? &a[i]→&(*(a + i))でiの値は不定。
- 452 名前:451 mailto:sage [2009/12/21(月) 01:28:43 ]
- ごめん、舌足らずだった。
&a[i]→&(*(a + i))→a + i でiの値は不定なので、ポインタの値も不定。
- 453 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 01:58:56 ]
- *(&x)って表現は許されていいでしょうか?
- 454 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 02:33:07 ]
- はい、もちろん
- 455 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 02:35:01 ]
- >>450
&a[2]がコンパイル時定数になると書かれているように見える点については突っ込まなくていいのか?
- 456 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 08:10:58 ]
- >>427をみて
>>437が出てくる意味がわからん。 intとdoubleはどちらも数値と言う意味で一緒 ↓ intは整数でdoubleは実数だからまったく別物!int==doubleはまったく違う! つってるやつと同じ感じだな。
- 457 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 09:27:28 ]
- >>386
失礼、68000じゃった…。68000シリーズのどれかの石じゃった。
- 458 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 10:19:39 ]
- >>457
おじいちゃーん、免許更新の際にはに認知症のテストを受けてね
- 459 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 12:07:05 ]
- うちは8085だったなぁ
- 460 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 16:57:28 ]
- >>426
んなバカな。
- 461 名前:デフォルトの名無しさん [2009/12/21(月) 18:42:26 ]
- >>426
んなアホな。
- 462 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 19:16:39 ]
- >>459
Z80 の人気はどうしてなのか?と今でも首を傾げています。
- 463 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 19:18:39 ]
- >>462
命令がシンプルだからじゃね?
- 464 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 19:19:41 ]
- nop
- 465 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 19:59:56 ]
- >>462
8080との互換性
- 466 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 20:23:59 ]
- >>465
そんな答えじゃったら、なんで8080互換は人気なの?
- 467 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 20:27:11 ]
- >>466
自分で考えてくれ
- 468 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 21:37:34 ]
- >>462
たまたま、パソコンがたくさん売れ始めた時代にZ80を採用した機種が多数派で みんながそれで育ったから。 パソコンに限った話じゃないれけど、世の中性能とか関係なく「売れたもん勝ち」なんだよ。
- 469 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 21:40:22 ]
- >>466
8086 vs. Z80 vs. 6809 vs. 6502 その4 gimpo.2ch.net/test/read.cgi/i4004/1252639237/ ここのレスのジジイどもに一言ガツンと言ってやってください
- 470 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 21:40:49 ]
- >>467
TK-80?
- 471 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 21:41:04 ]
- ×>>466
○>>468 とにかく勘違い頑固ジジイどもばかりで困ります
- 472 名前:デフォルトの名無しさん [2009/12/21(月) 22:06:12 ]
- 構造体のメンバにポインタ配列を持つ場合どのようにメモリ確保すればいいのですか?
typedef 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の領域を確保するところで落ちます. よろしくお願いします.
- 473 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 22:27:02 ]
- >>472
if((hoge = malloc(sizeof(HOGE))= NULL){ を if ((hoge = (HOGE *)malloc(sizeof(HOGE))) == NULL){ にしてみてくれ。
- 474 名前:466 mailto:sage [2009/12/21(月) 22:29:43 ]
- >>468 スレ違いですが、
一番大きい理由は、ザイログ社がセカンドソースのライセンスを ヒモなしでどこの企業にも売ったからでしょう。
- 475 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 23:21:27 ]
- 8080は6800や6502といい勝負で、ぶっちぎりだったわけではない
だが68系の後継の6809は6800と互換がなかったため、 68系はソフト資産が分散・死亡してしまった
- 476 名前:デフォルトの名無しさん [2009/12/22(火) 00:13:42 ]
- >>475
leave ret
- 477 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 00:30:12 ]
- いいじゃんx86の機械語体系が滅茶苦茶でも
速くて正確に動けばそれでいい
- 478 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 00:33:33 ]
- 出て行けw
- 479 名前:デフォルトの名無しさん [2009/12/22(火) 01:00:31 ]
- 68系の衰退は80系との勝負じゃなくRISCの台頭によることだろ
- 480 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 01:04:20 ]
- 68を知るようなジジイが珍答披露してるのか・・・
どんな人生送ってきたんだ
- 481 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 01:11:48 ]
- 4桁の68系はOSに恵まれなかった・・・
- 482 名前:デフォルトの名無しさん [2009/12/22(火) 01:15:25 ]
- あんなもんにOSなんか求めてなかったし、あるのを知っててスルーが当時の答えだった
# ジジィ発言は気持ちわかる # 当時の俺も同じ心境だったから
- 483 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 01:20:16 ]
- 灰列便利だな
配列があれば複雑な数値計算もできそう
- 484 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 01:21:13 ]
- スレタイ読め
ふざけんな!
- 485 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 01:39:24 ]
- 多次元配列って結局人間がわかりやすいってだけで
一次元配列とかわらん? a[100]ってやるのもa[10][10]ってやるのも確保されるメモリは一緒でしょ?
- 486 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 01:43:36 ]
- 多次元配列の学習をする時、例題とかやらなかったのか
- 487 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 01:45:46 ]
- 型が違う
- 488 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 01:48:48 ]
- というか、ベクトルとスカラーほど違う
- 489 名前:デフォルトの名無しさん [2009/12/22(火) 01:49:13 ]
- 4桁68に対してはOSどころかBIOSにさえ抵抗があったが
BIOSの考え方自体は後のマシンとの付き合い方にSVCとはまた違った方向性を示してくれたことには違いない 当時はアセンブラ主体だったが、そこでのノウハウが後にCを始めてから**や(*)への一挙跳躍をもたらしてくれた
- 490 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 02:24:24 ]
- しつこいなあ
- 491 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 03:54:39 ]
- >>489
お前いい加減にしろよ みんなうんざりしてんだよ
- 492 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 04:33:05 ]
- 当事者ならこんなとこで想い出語らないよ
最近調べたんでしょ
- 493 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 09:52:24 ]
- 入門スレでの知ったかはよくあること。上級者スレに行くほどのまともな知識は無い
ただのガス抜き
- 494 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 11:48:06 ]
- せめてアセンブラスレに行けよなあ
スレ違いもいい所だ
- 495 名前:466 mailto:sage [2009/12/22(火) 11:58:54 ]
- C使いと8ビットCPU経験者は、かなり重なるから食い付きがいいんだろ。
- 496 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 12:11:05 ]
- クズが開き直ってんじゃねえよw
- 497 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 03:35:38 ]
- 今までPerl、Javaとやってきたんだけどもうランタイムが必要な実行ファイルにはうんざり。
ネイティブの何も必要としない純粋ピュアな.exeを作りたいと思って 手頃な入門サイトでCを押さえて今Win32APIをやってるんだけど、これが中々おもしろい。 なんの仲介もなく直にWindowsとふれあってる感じがする。 今までダブルクリックで起動するjar(関連付けによっては動かなかったりする)を使ったり それをexewrapでexe化したりなんだかなぁという事ばっかりやってたのでCで普通のexeが作れて感動。 Cはポインタが難しいとよく言うけど実際やってみるとこれPerlのリファレンスじゃんって感じで飲み込めた。 他にもPerlやJavaの仕様の前身となったようなものが見受けられてあぁ、これが元ネタなんだなと思うこと多数。 なんの質問でもないけど、C言語っておもしろいですね。
- 498 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 03:49:10 ]
- そのうちmsvcrt.dllに憤ったりするのだろうか
それにしてもサクサク動くから楽しいかな Perlと比べると文字列の処理が貧弱すぎてびっくりするかも知れんけどがんばってー
- 499 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 07:13:10 ]
- 単なる時代錯誤だな
- 500 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 09:54:16 ]
- >>497
Win32API やってるなら windows.h を少しずつでも見たほうが良いよ。
- 501 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 10:53:19 ]
- >>497
アセンブラおすすめ。 APIの呼び方さえ覚えておけば実行ファイルがあまりにも小さくなって感動する。 今までのWindowsアプリはなんだったんだって思う。
- 502 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 10:54:59 ]
- APIの呼び方を覚えるのが手軽なら誰もC言語なんてやらないわ。
- 503 名前:466 mailto:sage [2009/12/23(水) 11:03:44 ]
- >>502
APIの呼び方は、アセンブラでも手軽だぞ。 それ以外が大変だけど。
|

|