C言語なら、俺に聞け! <18>
■ このスレッドは過去ログ倉庫に格納されています
0001きょうはいいテンキーです。日下部陽一
NGNGいろいろな言語を極めたが、一番手になじむのはCだった。
Cのことならぜんてわかるから、疑問な点があったら漏れに聞け。
だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。
・comp.lang.c Frequently Asked Questions
http://www.eskimo.com/~scs/C-faq/top.html
・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
Cプログラマならこれを買っとけ。
・プログラミング言語C(K&Rと呼べば通だ)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/yfcbookshelf-22/250-3950205-1475419
K&Rで挫折するような救いがたいやつはこれでも読め
・作ってわかるCプログラミング(アヒル本と呼べば通だ)
http://dennou.gihyo.co.jp/books/void_c/
http://www.amazon.co.jp/exec/obidos/ASIN/477411328X/249-4698746-2014711
推薦図書/必読書のためのスレッド PART3
http://pc.2ch.net/test/read.cgi/tech/1016722820/
・前スレ C言語なら、俺に聞け! <17>
http://pc.2ch.net/test/read.cgi/tech/1019372139/l50
0002デフォルトの名無しさん
NGNGよくやった。お疲れさま。
0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNG770番ほど早い
0009デフォルトの名無しさん
NGNG0010デフォルトの名無しさん
NGNG引きちぎるぞ
00119
NGNG0012デフォルトの名無しさん
NGNGパパ怒っちゃうぞ
0013999
NGNG∧||∧
( ⌒ ヽ
∪ ノ
∪∪
0014前スレの1&1000
NGNGいってよし!
0015デフォルトの名無しさん
NGNGもう逝ってる!
0016899
NGNG0017デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNG0019899
NGNGなぜなんですか。
0020899
NGNG0021デフォルトの名無しさん
NGNGもう知らない(笑)
(ダウンロード状態になるのはヘッダーが適切でないから)
0022デフォルトの名無しさん
NGNGって感じか?
0023デフォルトの名無しさん
NGNG2. 127.0.0.1 or localhost からアクセスしてない
のどちらか(両方?)と見た
0024デフォルトの名無しさん
NGNG0025デフォルトの名無しさん
NGNGというのがあって、
DELETE_TEXT(TEXT, 1)
とやるとTEXTがABCに置き換わるようなマクロは作れるでしょうか。
0026899
NGNGごめんなさい。AN httpdの.exeを編集の”一般パスでも実行する”をチェックしたら、出来ました。
0027デフォルトの名無しさん
NGNGできてるじゃん。それで不満か?
0028デフォルトの名無しさん
NGNG言ってる意味が分からん
もう少し分かりやすく説明しなはれ
0029デフォルトの名無しさん
NGNG出来てない
003025
NGNG0031デフォルトの名無しさん
NGNG出来てるだろ?
DELETE_TEXT(TEXT, 1) -> DELETE_TEXT(ABCD, 1)
になるじゃん。
まさか、
DELETE_TEXT(TEXT, 1) -> DELETE_ABCD(ABCD, 1)
とでもしたいのか?
003225
NGNG部分的な削除です。
0033デフォルトの名無しさん
NGNG0034デフォルトの名無しさん
NGNGううん?
具体例を示して
0036デフォルトの名無しさん
NGNGDELETE_TEXT( ABCD, 1 )
とすると
ACD
と指定したのと同じくなるようなマクロ
DELETE_TEXTを作りたいって事でしょ。
0038デフォルトの名無しさん
NGNG#define TEXT ABCD
#define ABCD ABC
003938
NGNG0040デフォルトの名無しさん
NGNGうーん、あやしいなぁ。
トークンを削除して、最終的に何がしたいのか教えてくれ。
004138
NGNG0042デフォルトの名無しさん
NGNGやっと分かった!!
DELETE_TEXT(TEXT, 1)
はTEXTをマクロ展開してから後ろから一文字削除ってことか
無茶言うぜ。
0043デフォルトの名無しさん
NGNG#define DELETE_TEXT(str, n) (str[strlen(str)-(n)] = '\0')
とか?
0044デフォルトの名無しさん
NGNGカコイイなぁそれ。オレにも使わせて。
・・・無茶言うぜ。
004525
NGNG昼間に、これできたら便利だなーって思ったんですが。
ちょっと昼間書いたソース見ながら思い出してみます。
0046デフォルトの名無しさん
NGNGそれなら、
DELETE_TEXT( ABCD, 1 )
で1文字削るって分かってるんだから、ABC でええやん
てなわけで、本当は何をしたいんだ?
0047デフォルトの名無しさん
NGNG0048デフォルトの名無しさん
NGNG>>43の言うように文字列リテラルじゃなくて文字配列なんだろうな。
実行してみるまで何が入るかわからないってことで。
もっとも、文字リテラルに対してやったりしたら・・・・
0049デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1019372139/914
ようは、これって
sscanf(buf, "%" TOSTR(LEN) "s", buf2);
が
sscanf(buf, "%#32s", buf2);
に、マクロによって置き換わるんだと思うんですが、
書式指定の#32の意味がわかりません。
VC++付属のMSDNを見てみたんだけど、、、、
#「scanf 系関数の書式指定フィールド」ていうやつ
いま手元に本とかないんですが、
どっかホームページで解説してるようなところ無いでしょうか?
005025
NGNG#define REFLECTION EBX+0x100
#define REFRACTION EBX+0x104
:
のような定義がたくさんあります。全てEBX+オフセットという形です。
EBXをオフセットといっしょに定義しているのは、
FMUL DWord ptr [EBX+REFLECTION] より、
FMUL DWord ptr [RELFECTION] と、書きたかったからです。
C++でも時々定義された値を使用します。
*(float *)(Buffer + REFLECTION) = 1.0;
しかし↑は定義内の「EBX+」が邪魔で当然コンパイルはできません。
そのために、
#define DELETE_TEXT(x, n) ・・・ //←これの作り方が分からない
#define DEL_REG(x) DELETE_TEXT(x, 4) //EBX+を削除するマクロ
を作って、
*(float *)(Buffer + DEL_REG(REFLECTION)) = 1.0;
と、したいのです。
005125
NGNGEBXが邪魔なときは#defineと#undefでEBXを消したり、
元々定義にEBXを入れないとか(今はそうしてます)、
方法はありますが、マクロでトークンの削除ができたら、
インラインアセンブラでは
FMUL DWord ptr [RELFECTION]
と書けて、C++では、
*(float *)(Buffer + DEL_REG(REFLECTION)) = 1.0;
と書くだけですむようになるので、
便利だなーと昼間思ったわけです。
激しく眠いので
ワケワカな文章になってるかも・・・
0052デフォルトの名無しさん
NGNG>FMUL DWord ptr [RELFECTION] と、書きたかったからです。
そう書きたくなくても、そう書くべきなので
あまり(かなり)勧められないが
#define DEL_REG(s) DEL_REG_(s) // ※1
#define REFLECTION EBX + 0x100 // EBXの後に必ずスペース
#define REFRACTION EBX + 0x104
:
#define DEL_REG_(s) (DEL_##s) // ※2
#define DEL_EBX 0
マクロの本来の優先順位は知ら(興味)ないが、
※1・2のように、2重にしてやらないと、
某コンパイラでは通らなかったので、まだ他のでは
「DEL_***が未定義」と言われる可能性あり
と言うか、本来こんな使い方をするべきではない
0053デフォルトの名無しさん
NGNG> ようは、これって
> sscanf(buf, "%" TOSTR(LEN) "s", buf2);
> が
> sscanf(buf, "%#32s", buf2);
> に、マクロによって置き換わる
ちゃうよ。sscanf(buf, "%32s", buf2) に置き換えたかったんだが、# 演算子
は、それ以上マクロ展開しないから "%LENs" になってしまう。(前スレ >>937)
プリプロセサの # 演算子を勉強するべし。
なお、このケースではコンパイル時に "%32s" を生成することはできないみた
い。素直に実行時に作成するか、fgets() 等を使うべし。
>>50
そもそも...
> #define REFLECTION EBX+0x100
から、おかしいのではないのか ? アセンブラから構造体へのアクセス方法を
勉強した方がいいと思う。
0054デフォルトの名無しさん
NGNG#define LEN 32
#define TOKEN_TO_STR(x) #x
#define TOSTR(x) TOKEN_TO_STR(x)
sscanf(buf, "%" TOSTR(LEN) "s", buf2);
とすれば
sscanf(buf, "%" "32" "s", buf2);
すなわち
sscanf(buf, "%32s", buf2);
になる。基本。
0055デフォルトの名無しさん
NGNG>そもそも...
>> #define REFLECTION EBX+0x100
>から、おかしいのではないのか ?
まったくだ。
どうしてもそうやるなら、
#define DEL_REG_REFLECTION 0x100
#define DEL_REG_REFRACTION 0x104
#define REFLECTION EBX+DEL_REG_REFLECTION
#define REFRACTION EBX+DEL_REG_REFRACTION
としたら? 馬鹿さが際立ってよい。
005725
NGNG自分でも忘れていたくらいお粗末なものですから
目的はともかくとして、
マクロでトークンの部分的な削除はできるのか?
という単純な疑問として捕らえてください。
といっても、これまでのレスを見る限り、
やっぱり無理そうですね・・・。
>>53 インラインアセンブラで構造体を使う方法は分かるのですが、
なぜか私の前には、オフセットだけの定義が2000もあるヘッダと、
それらの型名を記した「紙」があります。
私にはその「紙」を見ながら構造体を作り、それを使うためにソースを直す気力はありません・・・。
0058デフォルトの名無しさん
NGNGhttp://www.catnet.ne.jp/kouno/c_faq/c_faq.html
もうちょっとましな日本語にならないの(w
0059超初心者
NGNGmain(){
double nc;
for(nc = 0; getchar() != EOF; ++nc)
;
printf("%.0f\n", nc);
}
K&R、23ページにあるやつなんだけど、実行すると終了できません。
何にも入力しないでEnter押せば終わるんじゃないんですか?
教えてください。
Windows98でVC++6.0をつかってます。
0060デフォルトの名無しさん
NGNG0061デフォルトの名無しさん
NGNGうにくす系なら Ctrl + ・・・・・
・・・・・
・・・・・
D?
だと思う
普通にenter押せば改行が残るでしょうなぁ
0062超初心者
NGNGいちおう終了はできました。
でも結果がでないんですけど。
何ででしょう?
0063デフォルトの名無しさん
NGNGそれはたぶん、結果が表示されると同時に実行窓が閉じてるんでしょう
MS-DOS プロンプト開いてコマンドラインから実行してみそ
0064超初心者
NGNGCtrl+Zを押すと、
Press any key to continue
と出てくるんですよ。これで何かキーを押すと窓が閉じます。
>>59のncの中身が表示されないんです。
MS-DOSプロンプトからの実行のやり方は知りません。
当該ディレクトリを開くくらいしかできないです。
006563
NGNG0067超初心者
NGNGとりあえずこれで良しとしときます。
ありがとうございました。
006863
NGNG試してみたら、>>64の言うとおりだった。
VC++(Win98?)固有の問題だと思う。
#include<stdio.h>
main(){
double nc;
printf("start\n");
for(nc = 0; getchar() != EOF; ++nc)
;
printf("Test\n"); /*この行追加、しかし表示されない*/
printf("%.0f\n",nc);
}
このようにすると、期待どおり動作するが、"Test"が表示されない。
これ以上は、わからんのでVC++に詳しい人の解説もとむ
0069
NGNG0070
NGNGbccでやったらちゃんと表示されたYO
0071デフォルトの名無しさん
NGNG0072デフォルトの名無しさん
NGNGしかしオフセットだけ2000個て(w
0073デフォルトの名無しさん
NGNG0074デフォルトの名無しさん
NGNGそれって何か関係あるの?
printf("Test\n");はstdinとは関係ないのに・・・
0075デフォルトの名無しさん
NGNGfflush(stdin)の動作は標準では未定義だよ。
0076デフォルトの名無しさん
NGNGVC++ は、「ストリームが入力用に開いている場合は、バッファの内容を
クリアします。」だよ。
0077デフォルトの名無しさん
NGNGなんじゃそりゃ〜?気持ち悪いよぅ。
007876
NGNGだよね〜〜〜。俺もそう思う。MS も、FlushXXX とか XXXFlush とかの
API や ライブラリいっぱい作ってるけど、出力系でないとサポートしない
ものと入力に適用すると入力バッファをクリアするものとあってまちま
ち。(でも、流石に入力に適用する奴は、クリアの動作以外はしないみた
い。そう言う意味では、それなりに統一は取れている。)
0079デフォルトの名無しさん
NGNG実はShade、に3マクロ
0080デフォルトの名無しさん
NGNG実はMAYAタン、に-3マグロ
0081デフォルトの名無しさん
NGNG0082デフォルトの名無しさん
NGNG使いたいときはどうしたらいいのでしょうか。。。
自作しかないですか?
0083デフォルトの名無しさん
NGNG>>82 場所間違ってない?
0084デフォルトの名無しさん
NGNG::なんて演算子はCにはないはずですよ?と言ってみるテスト。
0085初心者にもなってない
NGNG他のスレ見て「コンパイラっていうのが必要なのかな〜」って
判断しちゃったんですけどそれでいいんですかね。
よくわからないけど私が持っているプログラミングツールっぽいのは
VBってのとC++なんですけど友達が勝手にくれたものだから
これでC言語でプログラミングできるのかわかりません。
0086デフォルトの名無しさん
NGNGVBはわかるがC++って何よ?
0087デフォルトの名無しさん
NGNGVBはその友達に返すか捨てなされ。
で、C++をもらったってどういうこと?
008885
NGNGVisualC++6.0でした
これでC言語でプログラミングできますか?
0089デフォルトの名無しさん
NGNGできる。
(へぇ・・・あんな高いものをくれたんだ・・・・・・いい人だねぇ)
0090デフォルトの名無しさん
NGNG多分VS.NETを買ったから(以下略
009182
NGNGC言語スレでしたね。ここ。。。
申し訳ないです。
もう少し悩んで分からなかったらC++スレへ移動します。。。
■ このスレッドは過去ログ倉庫に格納されています