C言語のことは<46>
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001激しく未定義とする
NGNGむしろ質問する前にWEBで検索するのが常識だ。
GUIなどの標準Cではできない事の質問は使用している開発環境のスレへ行け。
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへ行け。
コンパイラを探しているなら >>2 を見よ。
上記を逸した場合の結果は激しく未定義とする。
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/
前スレ
http://pc3.2ch.net/test/read.cgi/tech/1038405432/
0002デフォルトの名無しさん
NGNGgcc
http://gcc.gnu.org/
【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/
【ライセンスや機能などに問題あり】
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
0003デフォルトの名無しさん
NGNG本物は↓こちら
C言語のことは俺に聞け<46>
http://pc3.2ch.net/test/read.cgi/tech/1038324550/l50
0004デフォルトの名無しさん
NGNG_ー|ー-ー | _ ヽ \ | |
__|_」  ̄~| ̄ / レ |
/ |ノ ^ヽ _.、| < ノ
(_ノ| ノ ∠_ノ\ \ /
. _」__  ̄──
_| \ | ヽ /
(ノ^|. | | |
(_._」 レ / \
●
ヽ(;´Д`)ノ
0005デフォルトの名無しさん
NGNGつまらないのでこれで最後にしようね。
0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNG前スレのときを見れば分るとおり、削除人さんがいずれあぼーんしてくれます。
(質問所の方は放置されているので、偽スレだとはっきり分ってよいですね。)
0008デフォルトの名無しさん
NGNG乙
0009デフォルトの名無しさん
NGNGまた変なタイトルにしちゃったなあ。
0010デフォルトの名無しさん
NGNG0011デフォルトの名無しさん
NGNG0012デフォルトの名無しさん
NGNG欧米ではFかも。
0013デフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNG0015デフォルトの名無しさん
NGNGっていうか、スレタイが糞。いい加減にしてくれ・・・
0016デフォルトの名無しさん
NGNGなんでこんな糞タイトルにしたんだよ! >>1
0017デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNGココ
0019デフォルトの名無しさん
NGNGmst.hというインクルードファイルがあって
それをtest.cで使っているとき。
test.cなら
>bcc32 test.c
>test
でできるんですが
0020デフォルトの名無しさん
NGNG0021デフォルトの名無しさん
NGNG0022デフォルトの名無しさん
NGNGインクルードファイルを自分でつくった場合それをつくって実行するやり方が
わからないということです
0023デフォルトの名無しさん
NGNG>>19
インクルードファイルはコンパイルしないよ。
インクルードされるだけだ。
0024デフォルトの名無しさん
NGNG×インクルードファイルはコンパイルしないよ。
○インクルードファイル自体はコンパイルしないよ。
0025デフォルトの名無しさん
NGNG* * * あ ら ゆ る 手 段 を 使 っ て * * *
排除します。
0026デフォルトの名無しさん
NGNGじゃあここ削除されるの?
それともマジでここが本スレ?
0027デフォルトの名無しさん
NGNGどれが本スレなんだよ。
このスレも>>1は変なスレタイ付けるしよ。
0028デフォルトの名無しさん
NGNG後から同じ主旨のを立てたら重複スレになってしまう。
0029デフォルトの名無しさん
NGNG何とか言えゴルァ
0030デフォルトの名無しさん
NGNGC言語のことは俺に聞け<45>
http://pc3.2ch.net/test/read.cgi/tech/1038405432/
って誘導書き込みがあるんだけど、もうすぐ1000だよ。
次スレは?
あるんだったら次スレに誘導キボンヌ
0031デフォルトの名無しさん
NGNG0032デフォルトの名無しさん
NGNG0033デフォルトの名無しさん
NGNG0034デフォルトの名無しさん
NGNG重複スレ立てたら潰す。
0035デフォルトの名無しさん
NGNGいいよ、ここで。
まったく、>>1も余計な真似をするよ。
0036デフォルトの名無しさん
NGNGどうせまともな話出てこないじゃないか。
全部潰してしまえ糞ヤロウ
0037デフォルトの名無しさん
NGNGint a;
a = 10;
printf("%s", a);
とやってもダメです。色々調べましたが分かりません。
お願いします。
0038デフォルトの名無しさん
NGNG0039デフォルトの名無しさん
NGNG37に釣られないようご注意下さい。
0040デフォルトの名無しさん
NGNGもう俺は荒らしに負けたよ。
ここが本スレでいいよ。
もしまともな新スレ立てても荒らされて終わりさ。
荒らし本人は正義のつもりなんだろうな。
0041デフォルトの名無しさん
NGNGそれがお前の作戦か?
このスレは糞すれ。放置決定。
0042デフォルトの名無しさん
NGNGお前が調べたのはここか?
http://aglaia.c.u-tokyo.ac.jp/~yamamoto/diary/?200212a&to=200212021#200212021
0043デフォルトの名無しさん
NGNGじゃお前はどうしようってんだ。
新しく立てるんなら1の案でも出してみろ。
0044デフォルトの名無しさん
NGNG図星だからって熱くなってんじゃねーよ。
0045デフォルトの名無しさん
NGNGはあ?お前リアルで氏ねよ。むかつくな。
0047デフォルトの名無しさん
NGNG“放置決定”なんて書く莫迦の相手をしちゃ思うツボですよ。
0048デフォルトの名無しさん
NGNG>>35=>>43なんだが、一人で暑くなってんのはお前じゃないの?
クソスレだと思うならお前は放置しろ。
さもなければ納得させられるような代案を示せ。
0049デフォルトの名無しさん
NGNG0051デフォルトの名無しさん
NGNGアラインメントを確実に回避して詰まった構造体を生成するには
どうすればいいのでしょうか?詳しく書かれててるHPとかありましたら
教えて下さい。コンパイラはVC++6.0 Windows98SEです。
0052デフォルトの名無しさん
NGNGそうなるな。
今のところ、意見を表明してるのはこんだけか?
ここでいい……2 35,40
放置……………1 41
0053デフォルトの名無しさん
NGNG全部charの配列にしる。
0054デフォルトの名無しさん
NGNG「放置 1」って?
1が放置表明してるの?(だったら削除以来出せよな)
0055デフォルトの名無しさん
NGNG書き方がまずかった。
ここでいい……2名 (35,40)
放置…………1名 (41)
0056デフォルトの名無しさん
NGNGその構造体と同サイズの全部charaの配列を作って
構造体のポインタで参照しながら使うということでしょうか?
0057デフォルトの名無しさん
NGNG構造体の要素をすべてcharの配列にする
0058デフォルトの名無しさん
NGNG#pragma pack
で検索しる!
0059デフォルトの名無しさん
NGNGそれしか無理なんでしょうか・・?
構造体の中にはいろんな型の要素を入れておきたいのですが・・・
0060デフォルトの名無しさん
NGNGあぁ,すまん。読み間違えてた。
本スレ争いなんてくだらなすぎ。
もうちょっと大人な解決ができないのだろうか。
#それだけプログラマの年齢が下がってきているということか…。
0061デフォルトの名無しさん
NGNG0062デフォルトの名無しさん
NGNGありがとうございます!!
0063デフォルトの名無しさん
NGNG処理系依存でいいなら>>58。
ポータブルにしたいなら、
struct my_int {
char data[sizeof(int)];
};
struct my_struct {
char c;
struct my_int i;
};
struct foo {
struct my_struct m;
my_int n;
};
struct foo foo;
int i;
memcpy(&i, foo.i.data, sizeof(int));
とかする。
C++でtemplate使うとちょっと楽できる。
0064デフォルトの名無しさん
NGNG> あぁ,すまん。読み間違えてた。
いや、プロポーショナルフォントだってのを忘れてた。
とりあえず、他に代案が出ない限りは有効な質問スレとみなそうと思う。
0065デフォルトの名無しさん
NGNG0066デフォルトの名無しさん
NGNGあっちは番号が重複
0067デフォルトの名無しさん
NGNGありがとうございます。
#pragma pack って処理系依存なんですか・・・
0068デフォルトの名無しさん
NGNGあとからきたやつが重複したんだが。
0069デフォルトの名無しさん
NGNGそもそも、#pragmaは処理系依存の命令を与えるためのものだろ?
0070デフォルトの名無しさん
NGNGいだろうってこと。
一本化されれば荒らしも収まるんじゃないかと期待するのは甘い?
0071デフォルトの名無しさん
NGNG0072デフォルトの名無しさん
NGNG0073デフォルトの名無しさん
NGNG0074デフォルトの名無しさん
NGNG俺に聞け<44>がまだ300かそこらの時に冗談で立てられたネタスレ。
間違えて書き込んでしまった素人に、間違えてかわざとか答えた奴ら
のせいで混乱した。内容は「俺に聞け」と全く重複。
時期的には、「俺に聞け<44>」に300遅れで重複。
いちおう、その時にはC言語質問所<43>というのが
まだ生きていた(実は「質問所」の最初のスレなので、<43>はおかしい)が、
なぜか<44>を飛ばして<45>という番号を付けやがった。
0075デフォルトの名無しさん
NGNG別にタイトルなぞどっちでも良いのだが、
「重複スレ排除」というルールに従うべきだろう。
0076デフォルトの名無しさん
NGNG0077デフォルトの名無しさん
NGNGIntelのCPUでINT3の命令ってなににつかうのでしょうか?
マニュアル読んでも意味がよくわかりません。
解説お願いします。
0078デフォルトの名無しさん
NGNG0079デフォルトの名無しさん
NGNG粘着キモッ
008077
NGNGではあなたはマニュアルを読むと全て理解できるというのですか?
0081デフォルトの名無しさん
NGNG君より分かってるけどね。
008277
NGNG口ではなんとでもいえますよね。
0083デフォルトの名無しさん
NGNGbreakpoint
0084ヽ(´ー`)ノ
NGNG0085デフォルトの名無しさん
NGNGアセンブラスレで訊け。
0086デフォルトの名無しさん
NGNGここはののしりあうためのスレだと思ったのですが
0087デフォルトの名無しさん
NGNG最低限、日本語の読解力は必要。
0088デフォルトの名無しさん
NGNGすぐ日本語云々だな。そういうのつまらん。
0089デフォルトの名無しさん
NGNGまあ、このスレを壊したいと未だにがんばる粘着な人もいるんでしょうが。
0090名無しさん@XEmacs
NGNG0091デフォルトの名無しさん
NGNGうぜーよ、クズが。
0092名無しさん@XEmacs
NGNG0093デフォルトの名無しさん
NGNGC言語で作ったウィンドウスプログラムをCGIで出来ますか?
0094デフォルトの名無しさん
NGNGネタはもういい。
0095デフォルトの名無しさん
NGNG(゚Д゚)ハァ?
CGIでWindowsプログラムを作るのか?
0096デフォルトの名無しさん
NGNG0097名無しさん@XEmacs
NGNG0098デフォルトの名無しさん
NGNGテメーは黙れ。
0099名無しさん@XEmacs
NGNG0100デフォルトの名無しさん
NGNG0101デフォルトの名無しさん
NGNG0102デフォルトの名無しさん
NGNG0103デフォルトの名無しさん
NGNGマジレスするとWindowsでサーバ立ててそこで動くCGIをCで作ることは可能。
0104名無しさん@XEmacs
NGNGここは日本語の出来ないやつが来るところじゃないぞ
0105デフォルトの名無しさん
NGNG放置の方向で。
0106デフォルトの名無しさん
NGNG0107名無しさん@XEmacs
NGNG脳みそ落ちてますよ?( ´,_ゝ`)
>>106
>>93 の質問に対する答えとしては正しくない。
0108デフォルトの名無しさん
NGNG0109デフォルトの名無しさん
NGNG> >>93 の質問に対する答えとしては正しくない。
というかその答えって存在するのか。
0110デフォルトの名無しさん
NGNG「Windows上で、Cで書いたプログラムをCGIに使えるか」と聞いている
のだから、>>103の答で適切だ。
0111デフォルトの名無しさん
NGNG0112103
NGNG0113名無しさん@XEmacs
NGNGふざけるんじゃねえよ! いつかはぶっとばしてやる!!
0114デフォルトの名無しさん
NGNGどこに善人がいる?
まあ、お前がクズであるのは一目でわかる。
0115デフォルトの名無しさん
NGNG0116デフォルトの名無しさん
NGNG0117デフォルトの名無しさん
NGNGC言語のことは って何だよ
0118デフォルトの名無しさん
NGNG0119デフォルトの名無しさん
NGNG性病感染。
0120デフォルトの名無しさん
NGNG0121デフォルトの名無しさん
NGNG0122デフォルトの名無しさん
NGNG0123デフォルトの名無しさん
NGNG93はWindowsとは一言も言っていない。
これからの100スレを使用してウィンドウスプログラムとは何かを考察しようじゃないか。
どうやらCで書けるらしいことと、CGIに利用できそうなことはわかるが・・・
そもそもウィンドウスとは何なのかからしてわれわれは何も知らないのだ。
0124デフォルトの名無しさん
NGNG0125デフォルトの名無しさん
NGNG0126デフォルトの名無しさん
NGNG0127デフォルトの名無しさん
NGNGttp://www.google.com/search?q=%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6%E3%82%B9%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0
グーグルも知らない香具師が偉そうな口を叩くな
0128125
NGNGすいません。きちんと書きます。
assert()はあまりよくないという話しを聞いたんですが、ここの人たち
はassert()を実際に使いますか?
それとも使わないようにしていますか?
0129bloom
NGNGhttp://www.agemasukudasai.com/bloom/
0130デフォルトの名無しさん
NGNGどうよくないのかわかってないからそういうアホな質問が飛び出すんだよ。
漠然と「あれはいい」「あれはよくない」って覚えるんじゃなくて、
「なぜ」よくないかを知れ。
0131デフォルトの名無しさん
NGNG(VCだからASSERT()だけど)
0132デフォルトの名無しさん
NGNGassertって絶対におきない条件書くのに、起きてるのってヘタレPGなんですかね
0133デフォルトの名無しさん
NGNGデバッグが充分じゃない。つーかNDEBUGつけんでリリースするのはかなりヘタレと思われ。
0134デフォルトの名無しさん
NGNG絶対に起きない条件て assert (1); とかでつか?
0135デフォルトの名無しさん
NGNG「うまくいかなくても平気なデバッグ時にチェックを行い、
うまくいかないと悲惨なことになる製品の段階でチェックを取り除くのは、
陸の上の練習でライフジャケットをつけ、
海に出るときにそれを外すようなものである。」
と偉い人が言っている。
0136デフォルトの名無しさん
NGNG0137デフォルトの名無しさん
NGNGアサーションにかかる実行時間が大きな影響を与える場合だけだろ。
単純な引数のチェックとか大抵のものはリリース時にも残しておいた方が
いいんじゃないのか?
0138デフォルトの名無しさん
NGNG0139デフォルトの名無しさん
NGNG0140デフォルトの名無しさん
NGNG本の買い方・選び方
0141デフォルトの名無しさん
NGNG>>139の無限ループについて考察せよ。
0142デフォルトの名無しさん
NGNGcout いっとけ。
0143デフォルトの名無しさん
NGNG0144デフォルトの名無しさん
NGNG果たして本当にそうかな?
0145デフォルトの名無しさん
NGNG0146デフォルトの名無しさん
NGNGアサーションをエラーチェックに使う時点で間違ってる。
0147デフォルトの名無しさん
NGNG0148デフォルトの名無しさん
NGNG0149デフォルトの名無しさん
NGNGそれ以外に何に使うんだ ?
0150名無しさん@XEmacs
NGNG?
0151デフォルトの名無しさん
NGNG>>149-150
エラーハンドリングとアサーションは別物だという事を理解してくれ。
0152デフォルトの名無しさん
NGNGassert マクロが何故リリースビルドで何もしないか理解しているか?
0153デフォルトの名無しさん
NGNG禿げ
0154デフォルトの名無しさん
NGNGエラーチェックとエラーハンドリングは別物ということを理解してるか ?
0155デフォルトの名無しさん
NGNGネタですか?
0156デフォルトの名無しさん
NGNG理解できてない奴、一匹目。
0157デフォルトの名無しさん
NGNG0158デフォルトの名無しさん
NGNGあさしゃんは夜にできないだろ…
0159デフォルトの名無しさん
NGNGいいえ、シャリです。
0160デフォルトの名無しさん
NGNG夜にする あさしゃん って...。
0161デフォルトの名無しさん
NGNG知ったかぶらないでちゃんと説明しろ。
0162デフォルトの名無しさん
NGNG教えを乞う者の態度とは思えんが・・・。
エラーハンドリングは、プログラムの仕様だ。
プログラムの実行時に発生する可能性がある異常値をあらかじめ想定して、捕捉し、
それに応じた復帰/終了処理をする。
アサーションは、プログラムが仕様/意図通りに動いているかどうかを確かめるものだ。
エラーハンドリング漏れや論理エラー等の、プログラムの実行時に許容できない異常値を
捕捉する。
仕様/意図通りに動いている事が確認できればそれはもう必要無いので、リリースビルド
には含めない。
エラーハンドリングは仕様書に現われる、アサーションは現われない。
0163154
NGNGエラーチェック: エラー状態かテストすること。
エラーハンドリング: エラー状態時にしかるべき処理を行うこと。
ASSERT() が行うのは、エラーハンドリングの方。
だから、>>151 がなに言ってるか俺にはさっぱりわからん。
0164デフォルトの名無しさん
NGNGassert()は「しかるべき処理」は行わないだろ。
少なくともユーザから見た場合。
0165デフォルトの名無しさん
NGNGそれで具体的にどういうものがエラーハンドリングになってどういうものがアサーションになるのだ?
0166名無しさん@XEmacs
NGNGなんでこの人はエラーチェックをエラーハンドリングに脳内変換してるの?
0167デフォルトの名無しさん
NGNGどのへんがそうなのか教えてくれないか?
0168デフォルトの名無しさん
NGNGASSERT() マクロにも仕様と言うものがあることを知らんのか ?
ちなみに、リリースビルドでも同じような動作をする VERIFY() マクロもあるぞ。
>>164
プログラマから見たときの話に決まってるだろ。
元々発生しないと思っているんだからさ。
0169デフォルトの名無しさん
NGNGアサーションは、仕様通りに動いていれば本来必要の無いチェックをする。
例えば、リンクリストの意図しないリンク切れとか。
もともとアサーションはまともなデバッガが無い時代のものだから、今使う事は
あまり無いはず。
エラーハンドリングは、例えばファイルが開けなかったとか、実行時に起こり得る
ものをトラップする。
0170デフォルトの名無しさん
NGNGは?
0171デフォルトの名無しさん
NGNGVERIFY() なんての C にあった?
0172165
NGNGコンポーネントやライブラリなどの関数・メソッド内での
引数のチェックにはアサーションを使ってはならない。
コンポーネントやライブラリなどの関数・メソッドを呼び出す前の
引数のチェックにはアサーションを使う。
0173デフォルトの名無しさん
NGNG配列境界のチェックなんてのもあるな。
0174デフォルトの名無しさん
NGNG> 引数のチェックにはアサーションを使う。
引数をチェックするという仕様がプログラムに求められているなら、その場合は
アサーションを使ってはならない。
0175名無しさん@XEmacs
NGNGエラーハンドリングは>>151が勝手に持ち出した話だろ?
0176名無しさん@XEmacs
NGNGもう少しよく読んだら?
0177デフォルトの名無しさん
NGNG規格書ぐらい読めよ。どう言う処置をするかが書いてあるよ。
>>171
> VERIFY() なんての C にあった?
ごめんよ、ANSI-C にはなさそう。VC++ の方言のようだ。
0178デフォルトの名無しさん
NGNG理由は ?
0179デフォルトの名無しさん
NGNG「えっとこの時点ではこの変数はこうなっているはずだよなぁ」って
確認するような感じに使うってことでいい?
引数のチェックに使うのはもってのほかなんだね。
0181デフォルトの名無しさん
NGNGもう少しくわしく書こうか?
関数・メソッドを呼び出す引数をチェックするという仕様がプログラムに
求められているなら、その場合はアサーションを使ってはならない。
>>179
正解。
0182デフォルトの名無しさん
NGNGそりゃブレークポイント。
(そう言えば、>>169 も、「もともとアサーションはまともなデバッガが無い時代のものだから」とかほざいてたな...。こんな香具師ばかりかよ...。)
一応意図は >>162 の...
> アサーションは、プログラムが仕様/意図通りに動いているかどうかを確かめるものだ。
> エラーハンドリング漏れや論理エラー等の、プログラムの実行時に許容できない異常値を捕捉する。
で合ってると思う。(ただしここだけね。)
0183デフォルトの名無しさん
NGNGそういう論理エラーはデバッグの段階で完全に取り除いとけ。
アサーションはそのためにある。
0184デフォルトの名無しさん
NGNG0185名無しさん@XEmacs
NGNG>コンポーネントやライブラリなどの関数・メソッド内での
>引数のチェックにはアサーションを使ってはならない。
当然これが守られてる場合の話だろ?
2重にチェックする気?
0186デフォルトの名無しさん
NGNG禿同。何のために、デバッグしてんだよ。
でも、実際にそう言う状況があるから、>>135 みたいな話が出てくるんだろ。
0187デフォルトの名無しさん
NGNGすまん、あなたがどんな主張を持っていて、どのレスをどう解釈してそう逝っているのか
わかんなくなってきたよ。
0188186
NGNGすまん、>>179 じゃねーや。
>>183
> 禿同。何のために、デバッグしてんだよ。
> でも、実際にそう言う状況があるから、>>135 みたいな話が出てくるんだろ。
だったよ。
0189デフォルトの名無しさん
NGNG理由は ?
(あー、ウザイ。ちゃんと理由も一緒に書けよ。)
0190デフォルトの名無しさん
NGNG0191名無しさん@XEmacs
NGNGライブラリ作る側の話でしょ?
ライブラリのユーザがライブラリ関数をおかしな引数で呼び出しても
暴走しないようにしとくのが普通じゃない?
>>187
>>172 とだいたい同じだと思う。
ライブラリ関数の中で、渡された引数をチェックするのにはassertは使わない。
ライブラリ関数に渡した引数がおかしな値になってないかを確認するのにはassertを使う。
0192デフォルトの名無しさん
NGNG論拠はこれ。
> 「もともとアサーションはまともなデバッガが無い時代のものだから」とか
> ほざいてたな...。こんな香具師ばかりかよ...。)
0193名無しさん@XEmacs
NGNGs/渡した/渡す/
てか実際はassertなんか使わないので>>192にも同意。
0194デフォルトの名無しさん
NGNGだから、呼ばれる側じゃなくて、呼ぶ側でちゃんとデバッグしておけって話だろう。
0195デフォルトの名無しさん
NGNGこれがどうかしたか ? デバッガとアサーションって用途が違うぞ。
0196デフォルトの名無しさん
NGNG0197デフォルトの名無しさん
NGNGだから呼ばれる側はアサーションを使わないでエラーにしろって。
動作が正しく行われるのをモニタリングするため使うのがアサーションで
呼ぶ側で追加でやる処理だろ。
0198デフォルトの名無しさん
NGNG0199デフォルトの名無しさん
NGNG最終製品で残ってたとき、-DNDEBUGしてあると
何がうれしいんだ?
0200名無しさん@XEmacs
NGNGアサーションに引かかったらデバグするでしょ普通。。。
0201デフォルトの名無しさん
NGNG0202デフォルトの名無しさん
NGNG「全部バグが取りきれた」という保証は永遠に得られないだろ?
0203デフォルトの名無しさん
NGNG「遅くなる」の間違いだろ。
0204デフォルトの名無しさん
NGNG> 195 は、アサーションはデバッグのためにするものだという事を知らないのか?
お前アフォだろ ?
アサーションはデバッグのためにする。
デバッガもデバッグのために使う。
だから、デバッガがあればアサーションは要らないって言うのか ?
お前のデバッガは、引数の範囲とかをちゃんと理解して要所要所で、エラーチェックしてくれんのか ?
そんなデバッガがあるなら、俺も使いたいもんだよ。
>>197
状況による。呼ばれた側がいくらエラーを返していても呼び出し側が見てなきゃ何にもならない。
また、呼び出しが非常にたくさんあるなら、呼ばれた側でチェックする方が簡単。
0205名無しさん@XEmacs
NGNGそらそうだ。実際に製品として出回ってるソフトにもバグ残ってるのは
いくらでもあるよ。Windows2000も出荷時に6000ものバグ抱えてたって言うしね。
0206デフォルトの名無しさん
NGNGアサーション入れてもデバッグの助けにならないというなら
入れないほうがいいじゃん。
0207デフォルトの名無しさん
NGNGそこはそれ、豊富な経験・勘と.... 「日程」が背中を押してくれるんですよ。(w
0208デフォルトの名無しさん
NGNG(Pascalだと、コンパイラオプションでon/offできるものが多かった)
の事だが、アサーションでもまあ同じ。
エラーハンドリングの話じゃないよ。
0209デフォルトの名無しさん
NGNG0210デフォルトの名無しさん
NGNGデバッグ用シンボルつけてあるし、
コアダンプを保存するようにしてある。
Netscapeだと、「クォリティフィードバック」と呼んでいるし、
他の製品でもまあよくあるよね。
昔のMS-Cだと、よく「Compiler Internal Error」ってのを見たな。
0211デフォルトの名無しさん
NGNG> 状況による。呼ばれた側がいくらエラーを返していても呼び出し側が見てなきゃ何にもならない。
当たり前だ。呼び出し側にバグがあるんだから呼び出し側のチェック体制を強化しろよ。アサーションでも入れて。
> また、呼び出しが非常にたくさんあるなら、呼ばれた側でチェックする方が簡単。
簡単だからそっちでやるとかそういう問題じゃないだろ。
簡単だからという理由だけなら手抜きと一緒だぞ。
0212デフォルトの名無しさん
NGNGもちろん、すべてのバグがアサーションで検知できるわけではないが、
もともと誰もそんなことを主張してはいない。
0213デフォルトの名無しさん
NGNG呼び出される側にアサーション入れるのでは駄目なの?
0214デフォルトの名無しさん
NGNGアサーションは普通、どこで捕捉したかが重要だから呼び出し側でやるべきだと思うが・・・
0215デフォルトの名無しさん
NGNG(゚Д゚)ハァ?
じゃ、205 はどういう意味なの?
0216名無しさん@XEmacs
NGNGあのね。ライブラリとかだと呼び出す側が
厨房プログラマーだったりするかもしれないでしょ?
ほんとに分かんないのかな?それともネタ?
0217デフォルトの名無しさん
NGNG> 簡単だからという理由だけなら手抜きと一緒だぞ。
同じことが出来るんだったら簡単な方を選ぶよ。どこが手抜だ ?
1000個所から呼ばれてたら、1000個所にいちいち ASSERT() かますわけね。
はっきり言ってバカみたいだよ。
0218デフォルトの名無しさん
NGNGコアダンプの結果見れば、どこから呼び出されたかは分かるだろ。
Winじゃpost-motem debugってできないの?
0219デフォルトの名無しさん
NGNGもし呼び出され側がプログラム全体の呼び出される条件をすべてテストしており
これからの将来それが変更されないのならいいかもしれんね。
0220デフォルトの名無しさん
NGNGfoo()の呼び出しをassert込みでマクロ定義すればよい。
0221デフォルトの名無しさん
NGNG同じことが出来るならね。だが同じことは出来ない。
0222デフォルトの名無しさん
NGNG「製品版でもアサーションは生かしておくべし」
に反対してるやつってまだいるの?
0223名無しさん@XEmacs
NGNG>>205は>>202に対するレス。
バグが残ってる可能性があるからといってassertを残しておいたってあまり意味ないってこと。
本当に最後まで見付からないようなバグはassertでは捉えられないんだから。
0224デフォルトの名無しさん
NGNG-DNDEBUGすると「アサーションは何も検査しなくなる」んだけど?
0225デフォルトの名無しさん
NGNG捉えられないとも限らないだろう。
「あまり」意味は無いかもしれないが、
取り除く意味はデバッグに関して言えば「全く」無いだろう。
0226デフォルトの名無しさん
NGNGああ、理解した。
0227デフォルトの名無しさん
NGNGそれがなぜassertをわざわざ取り除く理由になるんだ?
0228デフォルトの名無しさん
NGNGネタ ? 悪いけど、呼ばれた側でテストしてんのとどこが違う ? (ソース/オブジェクトとか言わないでね。)
それともマジで、ライブラリ中で引っかかっ時に、どこから呼ばれたか見方がわからんの ?
>>221
何ができないのか言ってみ。
0229名無しさん@XEmacs
NGNGいちいちチェックしてたら速度が落ちるでしょうが。
VC++とかでもdebug用とrelease用でコンパイルオプション変えれるでしょ?(。。。よね?)
デバッグのことだけ考えればいいんならこんな区別必要ないでしょうが。
0230デフォルトの名無しさん
NGNGassertに引っかかったとき表示される行番号が違う。
0231デフォルトの名無しさん
NGNGだから、そもそも「リリース用でコンパイルオプションを変えるのが間違い」
というのが>>138の主張なのだが。
0232デフォルトの名無しさん
NGNG速度が落ちるなんて、せいぜい数十%だろ。
ハードの進歩で言って3か月分くらいか?
0234デフォルトの名無しさん
NGNGどんな環境でもコアダンプが利用できると主張したいわけね。
0235デフォルトの名無しさん
NGNGぷぷっ、で、デバッグできないと...。
わかったわかった。お前は、一生そうしてな。
0236デフォルトの名無しさん
NGNG0237デフォルトの名無しさん
NGNG230じゃないけど、君の言うことがよく分からない。説明してくれる?
0238デフォルトの名無しさん
NGNG> どんな環境でもコアダンプが利用できると主張したいわけね。
まあ、できない環境もあるだろうね。
でもデバッガの環境下なら、呼び出し元ぐらいわからない ?
それもダメなら、しょうがないけどね。
0239デフォルトの名無しさん
NGNG出荷後でもアサーションに引っかかることはいくらでも
あると思うけど。
0240名無しさん@XEmacs
NGNGうーん私はそう思わない、としか言いようがないな。
>>232
同じ能力なら速度が早い方の製品を買うでしょ?
で、ライブラリ作る人間と使う人間は別(の可能性がある)ってのは
みんな分かってんのかなぁ?
0241デフォルトの名無しさん
NGNGDr. Watsonみたいのに頼るしかない?
0242デフォルトの名無しさん
NGNG>>238 にも書いたけど、普通のデバッグ環境なら、アサーションに引っかかった時に呼び出し元ぐらいはわかる仕組みはある。
デバッガの下にない時でも、Unix なら core, Windows ならデバッガのオンデマンド起動で呼び出し元がわかるはず。
組込みなんかのやや特殊な場合は、abort() とかでスタックダンプするとかが必要かもしれない。
と言うか、これぐらい理解してないとデバッグできないでしょ ?
0243デフォルトの名無しさん
NGNG135の主張をくつがえす充分な論拠をあなたは提供していないと
思います。アサーションを入れる場所にもよると思うけど、
私は数十%も速度が変わるとは思えない。せいぜい10%以下でしょう。
たとえ数十%速くなったとしても、アサーションが無い場合に
エラーであることさえ気づかず黙って誤動作するソフトにしてしまう
(そしてそのバグが永久に発見されない)ような品質の低下が、
その数十%に見合うとは思えない。
0244デフォルトの名無しさん
NGNGWin は、アサーションした時に「デバッグするか ?」と聞かれるから、「はい」と答えると VC++ が起動して、それでデバッグする。
(>>242 のオンデマンド起動)
0245デフォルトの名無しさん
NGNGアサーションの速度差なんて、体感できないと思う。
0246デフォルトの名無しさん
NGNGうーん。じゃあ客先環境にもVC++をインストールしといて、
「はい」と答えてもらうの?
0247デフォルトの名無しさん
NGNG概ね同意するが、
> (そしてそのバグが永久に発見されない)ような品質の低下
これには同意できない。あと、
> その数十%に見合うとは思えない。
ゲームアプリの場合は、0.1 % でも重要な事が多い。
0248デフォルトの名無しさん
NGNGそれは、難しい問題。
逆にアサーションがぼこぼこ出るようなソフトウェアが今後売れるとも思えない。
永久に発見されないバグは、問題無しと考えこともできるよ。
0249デフォルトの名無しさん
NGNGその時は、DrWatson を使えばよろし。
0250名無しさん@XEmacs
NGNG上にも書いたとおり、製品版のソフトにassertで捉えられるバグなんて
ほとんど残ってない(ようにしとかないといけない)わけで、それ以外の
バグの方が圧倒的に多いから、必ずしもassertを残しといたからって
安全性が上がるってものでもない。
当然速度との兼ね合いはトレードオフの話になるから、速度なんて
どーでもいい製品なら残しといてもいいと思うけどね。
0251デフォルトの名無しさん
NGNGネスケはぼこぼこ出るよね。(QFA)
他のアプリは、アサーションは出ないけど「一般保護例外」が出る(w
0252デフォルトの名無しさん
NGNGつーか、客先環境でアサーションが出ること自体が問題かと...。
0253デフォルトの名無しさん
NGNGあほらしい。
0254デフォルトの名無しさん
NGNGあることは少ないが、ゲームで0.1%が重要なのはごく
一部の描画まわりだけだと思う。
0255デフォルトの名無しさん
NGNG>>252
ネスケはぼこぼこ出るよね。
他でも、「不正な処理」が出るソフトってそんなに珍しいか?
また、「assertが入ってればすぐ見つかったのに、
ないために原因が突き止められない不具合」ってのも
あると思うが。
0256デフォルトの名無しさん
NGNGそのスペックで動くモノであれば、文句言われないわけだし
0257デフォルトの名無しさん
NGNG> 他でも、「不正な処理」が出るソフトってそんなに珍しいか?
珍しくはないけど、だから良いってわけないだろ。
とりあえず、DrWatson 入ってりゃスタックダンプは取れるから、ライブラリ中でアサーションしても呼び出し元はわかる。
0258デフォルトの名無しさん
NGNGいや、だから「アサーション入れとけ」といいたいんだけど。
0259デフォルトの名無しさん
NGNG0260名無しさん@XEmacs
NGNGってのもあるかもねw
>>254
最近の3Dものとかは計算部分のほうが大きいと思う。
あと、数%くらいで、って言ってる人いるけど、例えば1%でも違えば
100時間稼働したら1時間の違いが出る訳で、重要になってくる
ようなソフトもある。
0261デフォルトの名無しさん
NGNG0262デフォルトの名無しさん
NGNGまさか、時間のかかるループにアサーションしこんで遅くしようと考える人はいないでしょう?
どこに入れるとか、どこに入れてはいけないというくらい、プログラマならわかりますよね。
0263名無しさん@XEmacs
NGNGそんなこといちいち考えるんならassertじゃなくて
普通にエラーハンドリングしなさいな。
assert ってリリース時に取り除けるからいいんでしょうが。
0264デフォルトの名無しさん
NGNGでも、マクロで実装してるよ。エラーを解決して続行できるわけでもない。
assertと意図は同じ。
0265デフォルトの名無しさん
NGNGエラーハンドリングは必ずしも処理を続行させるためのものではない。
0266デフォルトの名無しさん
NGNG ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ (´´
∧∧ ) (´⌒(´
⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
 ̄ ̄ (´⌒(´⌒;;
ズザーーーーーッ
0267デフォルトの名無しさん
NGNG0268デフォルトの名無しさん
NGNG0269デフォルトの名無しさん
NGNGassert(>>267 == アフォ);
0270デフォルトの名無しさん
NGNG{
char *str;
int flag;
}String;
っていうString構造体があったとき、これを配列にして
String String_data[20];ってして
構造体メンバのstrにメモリを割り当てるときどうしたらいいんですか?
自分は
String_data[i].(*str) = malloc(-----)ってやったらgccタンに怒られました。
おねがいします。
0271デフォルトの名無しさん
NGNGString_data[i].str = (char*)malloc(バッファサイズ);
0272デフォルトの名無しさん
NGNGint *p;
*p = malloc(1);
とかやってそうなコードだな。
0273教えてください><
NGNG小数第3位以下を切り捨てる
小数部のみに変換
小数第2位を四捨五入して小数第1位までに変換
10の位を四捨五入して100の位までに変換
※出力はすべて、printf("%f\n", x)とすること
0274デフォルトの名無しさん
NGNG宿題丸ちなげかよ
0275デフォルトの名無しさん
NGNGスレ違い
0276デフォルトの名無しさん
NGNG「小数部のみに変換」ってどうやるのか分からない。
これは「C言語のこと」として識者諸兄に聞いてみたい。
0277デフォルトの名無しさん
NGNGdouble a = 1.3;
a = a - (long)a;
0279デフォルトの名無しさん
NGNG0または3を判定する良い方法ないでしょうか?
今こうやってます。
if (n == 0 || n == 3)
ビット演算とか使ったりもっとうまいやりかたがあったら教えてください。
0280デフォルトの名無しさん
NGNGそんなもので劇的に処理速度が上がることはないから気にするな。
トリッキーなコード書いてもしかたない。
0281名無しさん@XEmacs
NGNGif ( (n&1) ^ (n&2) )
0282名無しさん@XEmacs
NGNG0283デフォルトの名無しさん
NGNGだめじゃん、それ
0284デフォルトの名無しさん
NGNGif(n*n==3*n)
0285デフォルトの名無しさん
NGNG0286デフォルトの名無しさん
NGNGif(n * (n - 3) == 0)
0287デフォルトの名無しさん
NGNG0288デフォルトの名無しさん
NGNGそれは駄目だろ。
if ((!!(n&1)) == (!!(n&2)))
か。
0290デフォルトの名無しさん
NGNGなんか上手い方法はある気はする。
0291デフォルトの名無しさん
NGNG0292デフォルトの名無しさん
NGNG0293デフォルトの名無しさん
NGNGそんなのがいきなりソースに出てきたらなにしてんのか絶対分からんと思う。
0294デフォルトの名無しさん
NGNG例には ==0.0など小数で書かれていないし。
0295デフォルトの名無しさん
NGNGでもそれうまいね。0と3に限らず、
0〜(intのビット数)の数の任意の組み合わせを
一発でテストできる。
0296デフォルトの名無しさん
NGNG性能的にはむしろ退化しているし、なにしているのか直感的に分かりずらい。
結局279がいまんとこ最強だ。
0297デフォルトの名無しさん
NGNGなら、さらに察しやすいかな?
0298279
NGNGnは整数で、intでもcharでもなんでもいいです。
0299デフォルトの名無しさん
NGNGビットでかけるようになってたらもう少しわかりやすいけどね。
if((0b1001 >> n) & 0b0001)
0300名無しさん@XEmacs
NGNG割り算ってめちゃ遅いって聞いたことあるけど。。。
昔の話かな?
0301デフォルトの名無しさん
NGNGって、うまく動く?
0302デフォルトの名無しさん
NGNG乗算は物量をぶち込めば1サイクルでなんとかできるけどナー。
0303デフォルトの名無しさん
NGNGいっている意味がよく分かりません。表現を変えてもう一度お願いします。
0304279
NGNGそっちの方が速いんですよね。
>>292のと比較してみます。
0305デフォルトの名無しさん
NGNG0306デフォルトの名無しさん
NGNG>>302は>>300へのレスですた。
0307デフォルトの名無しさん
NGNG漢字を間違ってる時点で信用に値しないですが何か?
0308デフォルトの名無しさん
NGNG>>305
大抵の処理系では除算は重いからよろしくナ。
0309デフォルトの名無しさん
NGNGなにを根拠に?
0310デフォルトの名無しさん
NGNGできれば除算の方が重くない処理系ってのをあげてくれ。
0311デフォルトの名無しさん
NGNGどっちが速いもクソも…
0312デフォルトの名無しさん
NGNGいまさら言い訳ですか?w
0313279
NGNGcl -O2 /FAs iftest.c
です。
nは volatile int n = 1;としました。
●if (n == 0 || n == 3)の場合
-----------------------------------
mov edx, DWORD PTR _n$[esp+12]
test edx, edx
je SHORT $L53243
mov edx, DWORD PTR _n$[esp+12]
cmp edx, ecx
jne SHORT $L53240
-----------------------------------
●if ((9 >> n) & 1)の場合
-----------------------------------
mov edx, 9
mov cl, BYTE PTR _n$[esp+12]
sar edx, cl
test dl, 1
je SHORT $L53240
-----------------------------------
0314デフォルトの名無しさん
NGNGそういう最適化をするコンパイラを上げてくれ
0315デフォルトの名無しさん
NGNG>>308は「すべての」と断言はしなかっただけで
意味的には「すべての」と言いたかったものと思われ。
0316デフォルトの名無しさん
NGNG0317279
NGNGよくわからなかったので、テストソース載せておきます。
/*cl -O2 iftest.c winmm.lib */
#include <windows.h>
#include <mmsystem.h>
#include <stdio.h>
#pragma comment(lib, "winmm")
int main() {
int i;
int c = timeGetTime();
volatile int n = 1;
for (i = 0; i < 40000000; i++) {
#if 0 // 1
if ((9 >> n) & 1)
n = n;
#else
if (n == 0 || n == 3)
n = n;
#endif
}
printf("%d msec\n", timeGetTime() - c);
return 0;
}
0318279
NGNG最適化で消えてしまうので・・
なにか良い方法があったらおねがいします。
0319デフォルトの名無しさん
NGNGその2つはあきらかに後者の方がはやい。
でも直感的になにをしているかが分かるのは前者。
後者を使うのならコメントは必須。
0320311
NGNG昔っからたいていのコンパイラはこの最適化をやってる。
strength reductionというやつだ。実際、今試したら
gcc 2.95.3でも if (n % 2) は
testb $1,8(%ebp)
je .L4
というコードになった。
ちなみに俺は305ではない。
0321デフォルトの名無しさん
NGNGifの後の処理をn = n + 1とかもうちょっと意味のあることをすればきえないだろ。
n=nならあきらかに無駄な処理と判断して省かれるのはしかたがない。
0322デフォルトの名無しさん
NGNG別の関数にすれば良いんだよ。
0323デフォルトの名無しさん
NGNGPentiumIII-800MHz、VC6 で、
単純比較: 平均 350
ビット演算: 平均 400
0324311
NGNG理解してるからな。よろしく。
0325デフォルトの名無しさん
NGNG0326305
NGNG昔それで驚いたことがあったのですが、勘違いだったみたいです。
0327デフォルトの名無しさん
NGNG>>318
それでも最適化で消える。
0328327
NGNGすまん、これは 322 宛て。
0329デフォルトの名無しさん
NGNGちなみになにが350でなにが400なんだ?
クロック数か?
最適化されているのか?
VCは最適化しないと&の命令をちゃんと使ってくれないぞ。
0330デフォルトの名無しさん
NGNG0331デフォルトの名無しさん
NGNG0332デフォルトの名無しさん
NGNGもっと多いなら >>292 が良さげ。
要するにPascalのset型を自分でやるテクだね。
0333デフォルトの名無しさん
NGNG何がって、
> 単純比較: 平均 350
> ビット演算: 平均 400
ちゃんと書いておろうが。
何の数字かという意味なら、317 のソースの通り。(ミリ秒)
0334デフォルトの名無しさん
NGNG0335デフォルトの名無しさん
NGNG0336デフォルトの名無しさん
NGNGおいおい。
void foo(int n)
{
if ((9 >> n) & 1)
...}
これでどうやって最適化で消えるんだ?
nに値を与えてないのに。
0337279
NGNG結局差は良くわかりませんでした・・。
if (n==0 || n==3)
は、n==0が多い場合に速いのかな。
0338デフォルトの名無しさん
NGNGどゆこと?
0339デフォルトの名無しさん
NGNGインライン展開したのち、無駄な処理と判断して消えて無くなる。
0340デフォルトの名無しさん
NGNG別ファイルにして分割コンパイルすりゃいいだろ。
そこまで説明しないとわからんか。
0341デフォルトの名無しさん
NGNG> if (n==0 || n==3)
> は、n==0が多い場合に速いのかな。
これは、正しい。詳細は短絡評価でググルべし。
0342デフォルトの名無しさん
NGNGそれはおかしい。
呼び出している箇所ではインライン展開されるかもしれんが、
staticでないfooという関数自体のコードは残るだろう。
そうでないと、あとで他のファイルからfooが呼び出されたらどうする?
0343デフォルトの名無しさん
NGNGそんな面倒な事するくらいなら、比較前の n に rand() を代入する方を選ぶ。
0344デフォルトの名無しさん
NGNGn自体をvolatileにせずに、別のvolatile変数に代入すりゃいいだろ。
0345デフォルトの名無しさん
NGNG0346デフォルトの名無しさん
NGNG0347デフォルトの名無しさん
NGNGオブジェクトファイルには foo の実体が書き出される。
ただし、それは main から呼ばれれていない。
0348デフォルトの名無しさん
NGNGfooのコードが消えてなくなるコンパイラが存在するのか?
証拠きぼん
0349デフォルトの名無しさん
NGNGそれがどうした。
あたりまえだろ。
0350デフォルトの名無しさん
NGNG問題ないだろ。
見たいのはfooのコードなんだから。
で、どうだったよ?
0351デフォルトの名無しさん
NGNGあんたは証拠があればすべて信じるのか?
0352デフォルトの名無しさん
NGNG0353デフォルトの名無しさん
NGNGわからん奴やな。
foo が呼ばれないからテストにならないんだってば。
0354デフォルトの名無しさん
NGNGそうは言ってない。
* * お 前 の 言 う こ と は 証 拠 無 し で は
信 じ ら れ ん * *
といっている。
0355デフォルトの名無しさん
NGNG> fooのコードが消えてなくなる
343 のどこにそんな事が書いてある?
0356デフォルトの名無しさん
NGNGわからんやっちゃな。
分割コンパイルすれば簡単にテストできるだろうが。
まあ、やり方知らないらしいから、しょうがないか。
0357デフォルトの名無しさん
NGNGそんなこと言っていないだろ。
どこで言ったんだ?
0358デフォルトの名無しさん
NGNG>>343が参照している>>340が参照している>>339に書いてある。
0359デフォルトの名無しさん
NGNG/\⌒ヽペタン
/ /⌒)ノ ペタン
∧_∧ \ (( ∧_∧
(; ´Д`))' ))(・∀・ ;)
/ ⌒ノ ( ⌒ヽ⊂⌒ヽ
.(O ノ ) ̄ ̄ ̄()__ )
)_)_) (;;;;;;;;;;;;;;;;;;;)(_(
0360デフォルトの名無しさん
NGNGあんた、ひまそうでいいですね。
0361デフォルトの名無しさん
NGNG∧_∧
( ´∀`) バッチ来いや
/, つ
(_(_, )
しし'
0362デフォルトの名無しさん
NGNG逃げた(w
0363デフォルトの名無しさん
NGNGその事か。
それは 347 の意味だ。
0364デフォルトの名無しさん
NGNG逃げた(w
それのどこが「消えてなくなる」だYo!
0365デフォルトの名無しさん
NGNGrand() 呼ぶのもコストかかるし。
0366279
NGNGcl -O2 iftest.c /Feiftestnd.exe winmm.lib */
#include <windows.h>
#include <mmsystem.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib, "winmm")
int main() {
int i, c = timeGetTime(), n = 0;
srand(0);
for (i = 0; i < 400000000; i++) {
#ifdef SHIFT
if ((9 >> n) & 1)
n = rand();
#else
if (n == 0 || n == 3)
n = rand();
#endif
n = rand();
}
printf("%d msec\n", timeGetTime() - c);
return 0;
}
0367279
NGNG●シフトを使った版
>iftestsh
5917 msec
●||を使った版
>iftestnd
5425 msec
でした。
誤差は+-80msecのぐらいです。
下手に小細工しない方が速いのかな・・
0368デフォルトの名無しさん
NGNG謝ればいいのか?
ご め ん ( ̄ー ̄)
0369デフォルトの名無しさん
NGNG知ったかさんが集まるスレはここでつか?
0370デフォルトの名無しさん
NGNGrand()のベンチマークか?
0371デフォルトの名無しさん
NGNGプ
0372デフォルトの名無しさん
NGNGvolatileにしない場合と同じ結果だとなぜわかる?
0373デフォルトの名無しさん
NGNG(゚Д゚)ハァ?
0374デフォルトの名無しさん
NGNGシフトしてANDして比較する、
と
比較して ジャンプ または 比較して ジャンプだからね。
0375デフォルトの名無しさん
NGNG書いてるんだろうな。
0376デフォルトの名無しさん
NGNGn は非 volatile で、比較に使われるのは n だろ。
違くなる可能性があるとしたらどういう場合だ?
0377デフォルトの名無しさん
NGNG0378デフォルトの名無しさん
NGNG理解できません。
0379デフォルトの名無しさん
NGNG0380デフォルトの名無しさん
NGNG0381デフォルトの名無しさん
NGNG氏ね。
0382デフォルトの名無しさん
NGNGかわいそうに。自分で考えたのを誰も評価してくれなかったから自分で宣伝ですか?
あなたの努力は評価しますよ。次を期待しています。
0383279
NGNGn = rand();
のところを0〜3になる様に
n = rand()%4;
としたら、結果が変わりました。
>iftestnd
12055 msec
>iftestsh
11238 msec
です。数回測った誤差は+-80msecです。
やっぱりシフトの方が速い?
0384デフォルトの名無しさん
NGNGその言葉は今知ったが、要は rand() で OK という話だろ?
0385デフォルトの名無しさん
NGNG9 >> 132983891
とかやってたのか。
0386デフォルトの名無しさん
NGNG漏れは、
>iftestnd
660 msec
>iftestsh
680 msec
やっぱり単純比較の方が速いよ。
0387デフォルトの名無しさん
NGNG>iftestnd
6507 msec
>iftestsh
6861 msec
やっぱ変わらないよ。
0388デフォルトの名無しさん
NGNG同じことを100万回繰り返して平均をとりなさい。
0389デフォルトの名無しさん
NGNGおまいがやれ。
0390279
NGNGそれも測りましたが、遅いみたいです。
●if(!(n%3))の場合
>iftestmo
24078 msec
0391デフォルトの名無しさん
NGNG比較数が多くなってきたら、switch にすればテーブル化してくれる事が期待できる。
0392279
NGNGもういちど試しましたが、
うちでは結果は変わりませんでした。
>iftestmo
24078 msec
>iftestsh
11232 msec
>iftestnd
12004 msec
0393デフォルトの名無しさん
NGNGif n in [0, 3] then ....
でいいよね。
Modula2のBITSET型もそんなんじゃなかったっけ。
CでBITSETを実現するマクロって書けるかな。
0394279
NGNG0395デフォルトの名無しさん
NGNGこうなった。gcc 2.95.3, Celeron 500MHz
$ ./iftestnd
9335664 usec
$ ./iftestsh
6483787 usec
#include <stdio.h>
#include <sys/time.h>
#ifdef SHIFT
#define COND(n) ((9 >> n) & 1)
#else
#define COND(n) (n == 0 || n == 3)
#endif
int main()
{
int i, n;
volatile v;
struct timeval s, e;
gettimeofday(&s, NULL);
for (i = 0; i < 400000000; i++) {
n = i % 4;
if (COND(n)) v = i;
}
gettimeofday(&e, NULL);
printf("%ld usec\n", (e.tv_sec - s.tv_sec) * 1000000 + e.tv_usec - s.tv_usec);
return 0;
}
0396デフォルトの名無しさん
NGNG1: 1188[ms]: 50000000, 50000000: n == 0 || n == 3
2: 1250[ms]: 75000000, 25000000: (n & 1) ^ (n & 2)
3: 1750[ms]: 50000000, 50000000: n * n == 3 * n
4: 1546[ms]: 50000000, 50000000: n * (n - 3) == 0
5: 1500[ms]: 25000000, 75000000: (n & 1) == (n & 2)
6: 1672[ms]: 50000000, 50000000: (!!(n & 1)) == (!!(n & 2))
7: 1719[ms]: 50000000, 50000000: (n & 1) == (n & 2) >> 1
8: 10344[ms]: 50000000, 50000000: !(n % 3)
9: 1500[ms]: 50000000, 50000000: (9 >> n) & 1
10: 1250[ms]: 50000000, 50000000: t[n]
11: 22734[ms]: 50000000, 50000000: (int)(n - (3 / 2.0))
10 の t[n] の t は、static const t[] = {1, 0, 0, 1}; となっている。
n は、ループカウンタの下位2ビット。
ループ回数は 100,000,000 回。
Pentium-II 400MHz + Windows2000 (SP3) + VC6: 最適化 = 実行速度。
やはり、素直な 1 が早い。割り算使う 8 と、浮動小数点演算を行う 11 を除いて、まあ似たり寄ったりだな。
0397395
NGNG速いようだ。
0398デフォルトの名無しさん
NGNGbitset_t make_empty_bitset(size_t set_size);
bitset_t bitset_union(bitset_t, bitset_t);
bitset_t bitset_add(bitset_t, unsigned);
bool bitset_member(bitset_t, unsigned);
とか?
fd_setとかsigset_tとか、あちこちで似たようなのが出てくるから、
あっても良いかもね。
0399デフォルトの名無しさん
NGNGソースはこちら。
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <mmsystem.h>
#pragma comment(lib, "winmm")
#define Test(Expression) \
nTrue = 0; \
nFalse = 0; \
Start = timeGetTime(); \
for(Loop = 0; Loop < Max; Loop++){ \
int n = Loop & 3; \
if(Expression){ \
nTrue++; \
} else { \
nFalse++; \
} \
} \
printf("%d[ms]: %d, %d: %s\n", timeGetTime() - Start, nTrue, nFalse, #Expression);
}
0400デフォルトの名無しさん
NGNG続き...
int main(void)
{
static const int Max = 100000000;
int Start;
int nTrue;
int nFalse;
int Loop;
Test(n == 0 || n == 3);
Test((n & 1) ^ (n & 2));
Test(n * n == 3 * n);
Test(n * (n - 3) == 0);
Test((n & 1) == (n & 2));
Test((!!(n & 1)) == (!!(n & 2)));
Test((n & 1) == (n & 2) >> 1);
Test(!(n % 3));
Test((9 >> n) & 1);
static const int t[] = {1, 0, 0, 1};
Test(t[n]);
Test((int)(n - (3 / 2.0)));
_getch();
return 0;
}
0401デフォルトの名無しさん
NGNGbitsetが速そうだな。
0402279
NGNG環境やコンパイラによってもだいぶ違うみたいですね。
色々と勉強になりました。
0403デフォルトの名無しさん
NGNG> VCは最適化しないと&の命令をちゃんと使ってくれないぞ。
が意味わからないし、気になるんだが、誰か解説してくれないか?
0404デフォルトの名無しさん
NGNG↓
0405デフォルトの名無しさん
NGNG複数の番号のばらばらな順列を線形リストを使って並べ替えする
処理を考えています。
例えば8ビットカウンタなら
253、254、255、0、1、2
と来たものはこの順番で格納したいのですが、
250、251、253、252、254、
と来たものは昇順に、
250、251、252、253、254
としたいのです。
前者と後者を区別するスマートな方法って無いでしょうかね?
0406デフォルトの名無しさん
NGNG日本語が良く分からない。
どういうデータが渡されて、出力は何?
0407デフォルトの名無しさん
NGNG0, 1, 3, ... , 254, 255, 2
とか
254, 0, 1, ... 255
とか来たら、どう並んで欲しいの ?
0408デフォルトの名無しさん
NGNG250、251、253、252、254、0、1、2
と来たらどうしたいんだ?
0409デフォルトの名無しさん
NGNG0410デフォルトの名無しさん
NGNG自前の評価関数で255<0を真とするようなの作ればいいんでは?
ループさせるなら区別する必要ないし
させないならソートの基準が曖昧
0411デフォルトの名無しさん
NGNGif ( left>right+128 ) return leftよりrightの方が大きい(事にする)
else return leftとrightの比較結果そのまま
0412デフォルトの名無しさん
NGNG0413デフォルトの名無しさん
NGNGA : max-min=サンプル数+1
なの
必ずAなら255と0があればそれなりの処理をする。
そうでなければ、ちと情報がたりないな。
0414413
NGNG0415デフォルトの名無しさん
NGNGリングバッファを使うのは?
0416405
NGNG具体例の方が手っ取りはヤイでしょうから、、、
やりたいのは
>>407さんの例でいうと
0, 1, 3, ... , 254, 255, 2
ときたら、この通り
254, 0, 1, ... 255
ときてもこの通り、
>>408
250、251、253、252、254、0、1、2
ときたら、
250, 251, 252, 253, 254, 0, 1, 2
となって欲しい
0417デフォルトの名無しさん
NGNGすまん…、分からない。
0418デフォルトの名無しさん
NGNGよくわからん
漏れもリングバッファで済む問題だと思った
0419デフォルトの名無しさん
NGNGもっと解らなくなってきたぞ。
4、16、0、32、255、2、128、64、128、1
ときたらどうなるの
0420デフォルトの名無しさん
NGNG0421デフォルトの名無しさん
NGNGつまり、411 の方法でいいんじゃないのか?
0422419
NGNGね。
あと0の無いバージョンも追加。
4、16、32、255、2、64、128、1
0423デフォルトの名無しさん
NGNG254, 0, 255, 1
だとどうなるんだ?
0425デフォルトの名無しさん
NGNG127 0 255 128 1 254
とか来たらどうするのかさっぱりわからんぞ
0426デフォルトの名無しさん
NGNG0427デフォルトの名無しさん
NGNG0428デフォルトの名無しさん
NGNGカウンタが一周した後の0は同じ0でも違う0だと評価できるような関数を作る。
0429これでいいんじゃ?
NGNG{
int tmp=left;
left=right;
right=tmp;
}
0430429
NGNG書き換えちゃった。
left=>n[i]
right=>n[i+1]
としておいて。
0431デフォルトの名無しさん
NGNG亀レス & 処理系依存だけど x86系なら
( ( n - 1 ) & ( n - 4 ) )
0432デフォルトの名無しさん
NGNGそれ、遅そうに見えるけど。
0433デフォルトの名無しさん
NGNGドピュッ
スマン逝ってしまった・・・
0434デフォルトの名無しさん
NGNGそれなら
!((n-1)&(n-2))
のほうが分かりやすくないか?
0435デフォルトの名無しさん
NGNG(゚Д゚)ハァ?
0436デフォルトの名無しさん
NGNG0437デフォルトの名無しさん
NGNG東へ進む >>556へ
0440デフォルトの名無しさん
NGNG#include <stdio.h>
typedef void (*Func)(void);
void a(void){puts("a");}
void b(void){puts("b");}
void c(void){puts("c");}
void d(void){puts("d");}
Func func[] = {a, b, c, d};
int main(void)
{
int n;
scanf("%d", &n);
func[n&3]();
return 0;
}
ifじゃなくて関数ポインタで処理を分けるっていうのはどう?
0441デフォルトの名無しさん
NGNGそれ、駄目ジャン。
0443デフォルトの名無しさん
NGNGそんな事するくらいなら switch 使え。
第一、それで異常値に対応できるのか?
0444デフォルトの名無しさん
NGNG0445デフォルトの名無しさん
NGNG他のコードでも異常値に対応してないと思うが?
0446440
NGNGまあ少なくとも0から3の値以外の配列要素にはアクセスはしない。
それに、俺はただアイディアを出しただけだ。
0447デフォルトの名無しさん
NGNGそれらのORをとる。
0448デフォルトの名無しさん
NGNG0449デフォルトの名無しさん
NGNG一番シンプルな n == 0 || n == 3 は対応してますが何か?
0450デフォルトの名無しさん
NGNG式に汁
0451デフォルトの名無しさん
NGNGnが0か3のとき?
0〜3じゃないの?
0452デフォルトの名無しさん
NGNGそれを判定してないのに
何で、それで対応した事になるんだ?
正常に動く事と、異常だけど動く事は別だろ?
0453デフォルトの名無しさん
NGNG(゚Д゚)ハァ?
n == 0 || n == 3 以外の場合に動いてしまっていいとでも言うのか?
0454デフォルトの名無しさん
NGNG一理あるけど279さんはそこまで求めていないような・・・
0455デフォルトの名無しさん
NGNG0456デフォルトの名無しさん
NGNG何を根拠に。
0457デフォルトの名無しさん
NGNG違うだろ。
0458455
NGNG0459デフォルトの名無しさん
NGNGnが0以上3以下って前提があるのに
それ以外の数を与えた場合は結果は当然不定に決まってるだろ?
0460デフォルトの名無しさん
NGNG安全側に倒すという事を覚えような。
0461デフォルトの名無しさん
NGNG0462デフォルトの名無しさん
NGNG異常な数が与えられた時に
正常に動いて見える事が安全なのか?
0463デフォルトの名無しさん
NGNGまあ、飽きてネタを振ってるつもりなんだろうが。
0464デフォルトの名無しさん
NGNG>>292 が秀逸だね
まぁすこしインチキっぽい気がしないでもないけど。
int table[]={1,0,0,1};
if( table[n] )
というのもありなのかな。ガイシュツならスマヌ
0465デフォルトの名無しさん
NGNG確かにそんな事はわからないが、異常値を 「if が成り立たない側」 つまり処理を
しない側に持っていく方が安全である事が多い。
0466デフォルトの名無しさん
NGNG0467デフォルトの名無しさん
NGNGがいしゅつ。
>>396
0468デフォルトの名無しさん
NGNGテキトウなコードを書いていただけません?
0469デフォルトの名無しさん
NGNGelseもあったら?
0470デフォルトの名無しさん
NGNGテキセツなコードを書いてもらえません?
0471デフォルトの名無しさん
NGNG>>271
>>469
その場合はどちらとも言えない。
0473デフォルトの名無しさん
NGNGやはりそうだったか・・・
>>396 で10が1より遅いというのはどうかと思うが、まぁいいや
0474デフォルトの名無しさん
NGNG間接アドレッシングがどうして速いと思うんだ?
0475デフォルトの名無しさん
NGNG0476デフォルトの名無しさん
NGNG0477デフォルトの名無しさん
NGNG分岐予測が良かったんでないの?
0478デフォルトの名無しさん
NGNGアセンブラで書くと速くなる事ってない?
0479デフォルトの名無しさん
NGNGキャッシュにヒットすれば速いでしょう
まあ、ヒットしなければ、とても遅いが…
0480デフォルトの名無しさん
NGNG0481デフォルトの名無しさん
NGNGこのスレを何だと思ってるんですか?
0482デフォルトの名無しさん
NGNG何とも思ってませんが何か?
0483デフォルトの名無しさん
NGNGどうして速くなると思うんだ?
0484デフォルトの名無しさん
NGNGキャッシュとは言え、値をレジスタに拾う n==0 || n==3 より速い訳がなかろう。
0485デフォルトの名無しさん
NGNG0486デフォルトの名無しさん
NGNGはどうだ?
0487478
NGNGC言語で直接使えない命令が、
アセンブラにあったりするかもしれないと思ったんで。
(MMXの飽和加算とか。)
0488デフォルトの名無しさん
NGNG特殊なCPUでnが3か0の時に真であると判定する
命令があれば速くなる
0489デフォルトの名無しさん
NGNGその質問には答えられません。
0490デフォルトの名無しさん
NGNGひょっとして神出現?
0491デフォルトの名無しさん
NGNGなるほど。もっともだ。
で、あるの?
0492デフォルトの名無しさん
NGNG(゚Д゚)ハァ?
0493デフォルトの名無しさん
NGNGよさそうだな。
0494デフォルトの名無しさん
NGNGおお、明らかに速そうですな。
んで、うちの環境でテストしてみたら、
>>279
iftestnd 1904 msec
>>292
iftestsh 1828 msec
>>486
iftestun 1747 msec
でした。
結構差が出た。
0495デフォルトの名無しさん
NGNGtest esi, esi
je SHORT $L53243
cmp esi, 3
jne SHORT $L53242
((9 >> n) & 1)
mov eax, 9
mov ecx, esi
sar eax, cl
test al, 1
je SHORT $L53242
(((unsigned)n-1)>1)
dec esi
cmp esi, 1
jbe SHORT $L53243
0496デフォルトの名無しさん
NGNG普通に考えたらないがフラグに直接代入すれば
動くCPUもあるかもしれない (←適当)
0497デフォルトの名無しさん
NGNG0498デフォルトの名無しさん
NGNGif( table[n] )
mov eax, DWORD PTR _table$[esp+esi*4+32]
test eax, eax
je SHORT $L53243
命令数は少ないが、この mov は実はやたら遅い。
0499デフォルトの名無しさん
NGNGn==0の場合動作しない。
0500デフォルトの名無しさん
NGNGn == 0 は?
0501デフォルトの名無しさん
NGNG0502デフォルトの名無しさん
NGNG「かも知れない」 じゃなくて、あるかどうか訊いているんだが。
0503デフォルトの名無しさん
NGNG駄目じゃん
0504デフォルトの名無しさん
NGNG0505デフォルトの名無しさん
NGNGここはCのスレ
0506デフォルトの名無しさん
NGNG(゚Д゚)ハァ?
n==3 以外の時全部誤動作するぞ。
0507506
NGNGでも、やっぱり n==3 の時誤動作するぞ。
0508デフォルトの名無しさん
NGNGナ ゼ ?
0509デフォルトの名無しさん
NGNGは神ということで宜しいですか?
0510デフォルトの名無しさん
NGNG難しいだろう。
0511デフォルトの名無しさん
NGNG0512デフォルトの名無しさん
NGNG0513デフォルトの名無しさん
NGNG0514デフォルトの名無しさん
NGNGアフォですか?
0515デフォルトの名無しさん
NGNGヴァカです。
0516デフォルトの名無しさん
NGNG0517デフォルトの名無しさん
NGNG0518デフォルトの名無しさん
NGNG0519デフォルトの名無しさん
NGNG0520デフォルトの名無しさん
NGNG0521デフォルトの名無しさん
NGNGCで書いたユーザーのプログラムはなぜmain()から実行が始まるのですか?
0522デフォルトの名無しさん
NGNG0523デフォルトの名無しさん
NGNG0524デフォルトの名無しさん
NGNGいるな。
突っ込むべきか突っ込むべきでないか・・・。
0525デフォルトの名無しさん
NGNGホスト環境の場合,リンクするときに実行開始点を指定せねばならない
オマエは大事な仕事を忘れてるのに翻訳環境に助けられていて気がついていないのだ
実行開始点をmainと指定すればmainから始まる,それだけのことだ
実際にはstartupが実行開始点になっていてstartupがmainを呼び出すようになっている
組み込みでもリセットハンドラで似たようなことをするが
そこではmainからというルール自体が存在しない
0526デフォルトの名無しさん
NGNG単に規格外の挙動をしているだけで、main() からというルールは規格で明確に
定められている。
0527デフォルトの名無しさん
NGNGISO/IEC9899:1999(E) 5.1.2.1 Freestanding environment
0528デフォルトの名無しさん
NGNG0529デフォルトの名無しさん
NGNGそんなんあったんか。初めて知った。ありがとう。
0530デフォルトの名無しさん
NGNGあの条文はあまり現実に即していない
OSの下で動くOSがあったり
mainから始まらないOS環境があったり
終了ステータスがどこの世界でも絶対にintだと断言していたり
etc...
0531デフォルトの名無しさん
NGNGそれだとprintfですら、標準でなくなるんだったかな・・・
0532デフォルトの名無しさん
NGNG誰か教えてください。
0533デフォルトの名無しさん
NGNGどのOS/コンパイラで?
0534デフォルトの名無しさん
NGNG何でもいいのでお願いします。
0535デフォルトの名無しさん
NGNG0536デフォルトの名無しさん
NGNG.globl foo
.type foo,@function
foo:
.size foo,.Lfe1-foo
そのまんま。(Linux gcc 2.95.3)
0537デフォルトの名無しさん
NGNG0538デフォルトの名無しさん
NGNG0539デフォルトの名無しさん
NGNG0540デフォルトの名無しさん
NGNG0541デフォルトの名無しさん
NGNG0542デフォルトの名無しさん
NGNG0543デフォルトの名無しさん
NGNG0544デフォルトの名無しさん
NGNG0545デフォルトの名無しさん
NGNG0546デフォルトの名無しさん
NGNG0547デフォルトの名無しさん
NGNG0548デフォルトの名無しさん
NGNG0549デフォルトの名無しさん
NGNG0550デフォルトの名無しさん
NGNG0551デフォルトの名無しさん
NGNG0552デフォルトの名無しさん
NGNG0553デフォルトの名無しさん
NGNG0554デフォルトの名無しさん
NGNG0555デフォルトの名無しさん
NGNGC#???
0556デフォルトの名無しさん
NGNG0557デフォルトの名無しさん
NGNG0558デフォルトの名無しさん
NGNGえっ えと・・・ いくらほど?
0559デフォルトの名無しさん
NGNG0560デフォルトの名無しさん
NGNG車両で支払うのかよ!!!
0561デフォルトの名無しさん
NGNG0562デフォルトの名無しさん
NGNG0563デフォルトの名無しさん
NGNG落ち着いてないでケンカしろ!!
0564デフォルトの名無しさん
NGNGそういうお前こそケンカしろ!!!
0565デフォルトの名無しさん
NGNGごめんなさい、ゆるしてください。
0566デフォルトの名無しさん
NGNG0567デフォルトの名無しさん
NGNGごめんなさい、そういう俺こそゆるしてください。
0568デフォルトの名無しさん
NGNGどうぞ、はちゃめちゃに騒いでください。
0569デフォルトの名無しさん
NGNGハチャ メチャ ハチャ メチャ ハチャ メチャ ハチャ メチャ ハチャ メチャ ハチャ メチャ ハチャ メチャ ハチャ メチャ ハチャ メチャ
ハチャ メチャ ハチャ メチャ ハチャ メチャ ハチャ メチャ ハチャ メチャ ハチャ メチャ ハチャ メチャ ハチャ メチャ ハチャ メチャ
ハチャ メチャ ハチャ メチャ ハチャ メチャ ハチャ メチャ ハチャ メチャ ハチャ メチャ ハチャ メチャ ハチャ メチャ ハチャ メチャ
ハチャ メチャ ハチャ メチャ ハチャ メチャ ハチャ メチャ ハチャ メチャ ハチャ メチャ ハチャ メチャ ハチャ メチャ ハチャ メチャ
0570デフォルトの名無しさん
NGNG0571デフォルトの名無しさん
NGNG嫌いなヤシも居るだろうけど。
0572デフォルトの名無しさん
NGNG0573デフォルトの名無しさん
NGNG0574デフォルトの名無しさん
NGNG好きなのはどっちのノリだ?
たべるほうかつけるほうか?
0575デフォルトの名無しさん
NGNGする方法ないでしょうか?いちいちhoge[0]みたいにしていくの面倒
でたまりません。
0576デフォルトの名無しさん
NGNG食べる方。
韓国ノリとか大好き。
0577デフォルトの名無しさん
NGNG0578デフォルトの名無しさん
NGNGボーランドのデバッガにあるかどうかは知らんが、
大抵のデバッガにはメモリをダンプする機能があり、
そこに配列の先頭アドレスを入れてあげればいい。
0579デフォルトの名無しさん
NGNG0580デフォルトの名無しさん
NGNGなるほど!
ありがとうございました。
0581デフォルトの名無しさん
NGNG0582デフォルトの名無しさん
NGNGすいませんでした。
0583デフォルトの名無しさん
NGNG0584デフォルトの名無しさん
NGNG0585デフォルトの名無しさん
NGNG0586デフォルトの名無しさん
NGNG0587デフォルトの名無しさん
NGNG0588デフォルトの名無しさん
NGNG新手の荒らしですか?
0589デフォルトの名無しさん
NGNG0590デフォルトの名無しさん
NGNG0591デフォルトの名無しさん
NGNG0592デフォルトの名無しさん
NGNG0593デフォルトの名無しさん
NGNGこれって明示的にvoid型のポインタにキャストしなきゃいけないの?
警告が出るのは constだから?Warningは消せたのだけど、
理由が解らずに昨日から悩んでいます。
環境は、gcc/cygwin 3.1.1 です。
#include <stdlib.h>
char* foo(void){
char char *str = (char *)malloc(1);
return str;
}
int main(void){
const char *str = foo();
free(str); /* free((void *)str); だと ok */
str = NULL;
return EXIT_SUCCESS;
}
0594デフォルトの名無しさん
NGNGんなもん、char * でやってみればすぐ解ると思うが。
というか、なんでconst付けんの?
0595脱字訂正
NGNG↓
なんでconst付けてんの?
0596デフォルトの名無しさん
NGNG0597デフォルトの名無しさん
NGNG0598デフォルトの名無しさん
NGNG0599デフォルトの名無しさん
NGNGC++はダメだよ。Cしか使えないんで。
ファイルを開いて hoge() の処理する。そしてファイルから nバイト読み取
り uge() の処理する。
正常なら読み取ったバッファへのポインタを返し、エラーならNULLを返す。
そんな関数を作りたいとする。
言っとくけど宿題じゃないよ。(実際のプログラムはソケットを対象)
hoge()、uge() は正常なら 0以上の整数値を返し、エラーなら負値を返す。
プロトタイプはそれぞれ
int hoge(void);
int uge(void);
んで、実際に作った関数
0600599
NGNG{
FILE *fp;
char *buff;
if (TRUE) {
fp = fopen(filename, "r");
if (fp == NULL) {
goto error_end;
}
if (hoge() < 0) {
goto error_end;
}
buff = malloc(nbytes);
if (buff == NULL) {
goto error_end;
}
fread(buff, 1, nbytes, fp);
if (uge() < 0) {
goto error_end;
}
return buff;
}
0601599
NGNGerror_end:
if (buff != NULL) {
free(buff);
}
if (fp != NULL) {
fclose(fp);
}
return NULL;
}
}
0602599
NGNGめたいな と思ったらこんなんなったけどどう?読みずらい?
0603599
NGNG×openseek
○openread
0604599
NGNG○fclose(fp); return buff;
鬱だ
0605デフォルトの名無しさん
NGNGどうするのが適切?
0606599
NGNG○char *buff = NULL;
あぁ〜もうーーー。スマン心中するよ。
0607599
NGNGCなんで例外は無いんでつ。・°・(ノД`)・°・。
エラー発生時は、単にエラーか否かがわかればいいでつ。
(本物は、引数にエラーコードの格納先もあるんでつ)
0608599
NGNGこれ最初、ファイル開いてシークしてそんで...って処理を考えたのさ。
でもシークするのは別にいらないやってんでその部分は消したの。
でも引数の部分は残ったままだった。
ようはね、エラー時の処理として free()とかfclose()とかのなんらかのリソース
の開放が必要な場合、それらを一箇所にまとめようとしたら goto がけっこう
でてきて、それで他の人が読んだらどう思うかなって思ったの。
皆さんのお目を汚してゴメンナタイ。・°・(ノД`)・°・。
今日はもう帰りまつ。
0609デフォルトの名無しさん
NGNG別にgoto使って問題ないパターンだと思われ。
あんまり if (TRUE) {...} else なんてしないが。
0610デフォルトの名無しさん
NGNG0611デフォルトの名無しさん
NGNG0612デフォルトの名無しさん
NGNGFILE *fp;
float d;
int i;
for(i=0;i<3;i++){
fread(&d,sizeof d, 1, fp);
printf("%f\n", d);
}
簡潔に書いてしまいましたがこのような状態のときに、
ファイルに10 20 30と書いてあったとしたら
画面に10 20 30と表示されると書いてあったのですが(実際にも試しました)
いまいち理解できません。
freadをforで繰り返していますが、一回目10を読み込み、
二回目読み込むときには20を読み込むようになるのはなぜでしょう?
fgetcのように順番に次へ次へと読み込む関数なのでしょうか?
言ってることがよくわからなかったりアホなコトだったらすいません。
もしわかる方がいらっしゃいましたらご解答お願いします
0613599
NGNG今夜はウドンを湯でまつ。
>>609 あんまり if (TRUE) {...} else なんてしないが。
最初は無かったんだけど、正常シーケンスの時の return を忘れてて、お!こりゃ
まずいじゃんってんで、正常シーケンス時はエラーシーケンスに入らないようにって
if else でくくったのです。でも確かに冗長な気がするので、はずしました。
>>610 こんなヒドいコードよく書けたなぁ
自分もなんかスッキリしてないので、是非スッキリ綺麗なコードをご教授ください。
お願いしまつ。
0614599
NGNGすんまてん。
自分は基本的に、エラーになったらそこですぐ処理を終了する って書き方
なんですが、こいつの場合、
hoge()では free()したらダメ。uge()では free()しないとダメ
で、なんか綺麗な書き方思い浮かばないんです。
是非、ご教授ください。
0615デフォルトの名無しさん
NGNG0616デフォルトの名無しさん
NGNG単純に簡単化しただけだけど、どうかな?
char *openseek( const char *filename, int nbytes )
{
FILE *fp;
char *buff;
fp = fopen( filename, "r" );
if ( !fp || hoge() < 0 )
goto error_end;
buff = malloc( nbytes );
if ( !buff )
goto error_end;
fread( buff, 1, nbytes, fp );
if ( uge() < 0 )
goto error_end;
return buff;
error_end:
free( buff );
if ( !fp )
fclose( fp );
return NULL;
}
0617デフォルトの名無しさん
NGNG<a href="www.2ch.net">2ちゃんねる</a>
0618デフォルトの名無しさん
NGNGいや、そうじゃなくて(ネタだと思うけど)
インクルードは #include<******>
じゃ、リンクはどうやるんですか?
リンカにお願いする。
0620デフォルトの名無しさん
NGNG#define NUM 5
int main(void)
int test[NUM];
int num;
int i,j;
num=0;
printf("テストの点数を入力してください。\n")
for(i=0; i<NUM; i++){
scanf("%d",&test[i]);
if(test[i]>=70){
num++;
}
}
for(j=0;j<NUM;j++){
printf("%d番目の人の点数は%dです。\n",j+1,test[j]);
}
printf("70点以上の学生は%d人です。\n", num);
return 0;
}
問題集ですが答えを見ながら答えを出したのですが原因不明のエラーが15行目と18行目に出ます。どこがおかしいのでしょうか?
0621デフォルトの名無しさん
NGNGこういう事では?
#include <stdio.h>
void read_t(char* str)
{
static unsigned int i = 0;
printf("%c\n", *(str+i));
i++;
}
int main(void)
{
char* str = "ABCDE";
read_t(str);
read_t(str);
read_t(str);
read_t(str);
read_t(str);
return 0;
}
0622デフォルトの名無しさん
NGNGまずは、質問の方法がおかしいです。
エラーがでるなら、そのエラーくらい書きましょうや。
宿題なら、専用のスレがあるわけだし。
#include <stdio.h>
#define NUM 5
int main(void)
{
int test[NUM];
int num;
int i,j;
num=0;
printf("テストの点数を入力してください。\n");
for(i=0; i<NUM; i++){
scanf("%d",&test[i]);
if(test[i]>=70){
num++;
}
}
for(j=0;j<NUM;j++){
printf("%d番目の人の点数は%dです。\n",j+1,test[j]);
}
printf("70点以上の学生は%d人です。\n", num);
return 0;
}
0623デフォルトの名無しさん
NGNG何故読み取り位置が自動で動くか、という意味でしょうか?
freadをする前に、毎回fseekしなくてはいけない実装がお望みなのでしょうか。
0625C初心者
NGNG「自分の場合だったらー」って理解していいっすね?
>>614 >で、なんか綺麗な書き方思い浮かばないんです。
自分も自身ないっすけど、、、取り合えず作ってみたっす。自分だったらこんな感じです。
char *openseek(const char *filename, int offset, int nbytes)
{
FILE *fp;
char *buff = NULL;
char *exitselect( FILE **, char *, int ); /* 例外用の補助関数 */
if( (fp = fopen( filename, "r" )) == NULL )
return ( NULL );
if( hoge() < 0 )
return ( exitselect( &fp, buff, 1 ) );
if( (buff = (char *)malloc( sizeof(char)*nbytes +1 )) == NULL )
return ( exitselect( &fp, buff, 2 ) );
fread( buff, 1, nbytes, fp );
if( uge() < 0 )
return ( exitselect( &fp, buff, 3 ) );
return ( buff );
}
char *exitselect( FILE **fp, char *buff, int select )
{
if( select == 3 )
free ( buff );
fclose( *fp );
return ( NULL );
}
0626621
NGNG中身じゃなくて考え方ね。
0627デフォルトの名無しさん
NGNG0628デフォルトの名無しさん
NGNG良いコンパイラを使う。
0629デフォルトの名無しさん
NGNGフラグを使えは、こんな感じ...
char *openread(const char *filename, int offset, int nbytes)
{
FILE *fp = NULL;
char *buff = NULL;
int Success = 0;
fp = fopen(filename, "r");
if (fp == NULL) goto Done;
if (hoge() < 0) goto Done;
buff = malloc(nbytes);
if (buff == NULL) goto Done;
fread(buff, 1, nbytes, fp);
if (uge() < 0) goto Done;
Success = 1;
Done:
if (fp != NULL) fclose(fp);
if (Sucess){
return buff;
} else {
free(buff);
return NULL;
}
}
ところで、fread() のエラーチェックはいらないのか ?
0630デフォルトの名無しさん
NGNGネタか ? 突込みどころ満載なんだが...。
0631593
NGNG返事ありがとう。
勿論、char * で警告無しに通るのは試して確認してました。
const をつけた理由は、
関数内で、mallocで確保した領域に値を代入して return
受け取り先では、そのポインタの指す領域を、 それ以降書き換えて欲しくない 場合
・・・といったケースを想定していました。
変更したくないのだからfreeでその領域を開放するときに警告されるのは
当然かな。とも思うのだけど、この const char * の指す領域を
警告出さずに、開放する方法ないかなと模索していました。
で、自分で見つけた解決策の一つが、
freeの引数に渡す時、void * にキャストするという方法。
でも、const char * の場合だけキャストする
というのも、なんかスッキリしません。
こういったケースをうまく収める定石ってないのでしょうか?
>>596
自分では解って使っているつもりだったんだけど、
// 勿論、テストでポインタの指す領域への代入で警告出るのも確認しました。
上記の様な場面での利用で、何か
勘違いしている点があれば、指摘お願いします。
0632デフォルトの名無しさん
NGNGインラインアセンブラについて、勉強スレ。
0633デフォルトの名無しさん
NGNG考え方もなにも、、、
たとえば、標準入力(たとえばキーボード)をfopenして、freadで読み取って、
次にfreadしても、前回の値が延々ときてもしょーもないし。
0634konnnaka?
NGNGmain(){
printf("<html><body><a href=\"http://www.2ch.net\">2ch</a></body></html>");
return 0;
}
0635デフォルトの名無しさん
NGNGそれでは突っ込んでください。
0636デフォルトの名無しさん
NGNG> if( (buff = (char *)malloc( sizeof(char)*nbytes +1 )) == NULL )
の +1 ってなんだ ?
0637デフォルトの名無しさん
NGNG\0専用!!
0638デフォルトの名無しさん
NGNGわけ分からん
0639デフォルトの名無しさん
NGNG∧_∧ ∧_∧ ∧_∧
( ・∀・) ( ・∀・) ( ・∀・)
⊂ ⊂ ) ( U つ ⊂__へ つ
< < < ) ) ) (_)|
(_(_) (__)_) 彡(__)
0640デフォルトの名無しさん
NGNG∧_∧ ∧_∧ ∧_∧
( ・∀・) ( ・∀・) ( ・∀・)
⊂ ⊂ ) ( U つ ⊂__へ つ
< < < ) ) ) (_)|
(_(_) (__)_) 彡(__)
0641デフォルトの名無しさん
NGNG∧_∧ ∧_∧ ∧_∧
( ・∀・) ( ・∀・) ( ・∀・)
⊂ ⊂ ) ( U つ ⊂__へ つ
< < < ) ) ) (_)|
(_(_) (__)_) 彡(__)
0642599
NGNGそれだと、fopen() と hoge() の間に処理入れられないのがイヤン。
>>625
補助関数いいですね。
自分も終了処理用の関数を分けようかどうしようか悩みました。
>>629
フラグもいいかも。
fread()エラーチェック必要ですね。ご指摘ありがとう。
実際の処理では fread() ではないんですがちゃんとエラーチェックしないと
ね。
自分としては、goto による前方ジャンプがなんか構造化の点からイヤンな感
じなんですよ。
でもまぁ goto絶対イヤ ってわけじゃないんで、まぁいいかと思ったり。
とりあえずは、それほど規模の大きい関数ではないんで元の(if else を取っ
たやつ)で行こうかなと思いまつ。
さて、そろそろおやすみです。
0643デフォルトの名無しさん
NGNG●ストレスを溜め込んでは、キレて関係ない人間を巻き添えにして暴れまくる(小心者のくせに短気)
●自尊心が異常に強く、自分が馬鹿にされると怒るくせに平気で他人を馬鹿にしようとする(ただし、相手を表面的・形式的にしか判断できず、実際にはたいてい、内面的・実質的に負けている)
●他人の忠告を受け入れない、反省できない、学習能力がない(自分の筋を無理にでも通そうとするため)
●「常識、常識」と口うるさいが、実はピントがズレまくっている(日本の常識は世界の非常識)
●権力、強者(警察、暴走族…etc)に弱く、弱者には威張り散らす(強い者に対してはへりくだり、弱いものに対してはいじめる)
●あら探しだけは名人級(例え10の長所があってもほめることをせず、たった1つの短所を見つけてはけなす)
●基本的に悲観主義でマイナス思考に支配されているため、性格がうっとうしい(根暗)
●一人では何もできない、女は連れションが大好き(群れでしか行動できないヘタレ)
●少数派を馬鹿にする、排斥する
●異質、異文化を排斥する(差別主義者)
●集団いじめのパイオニア&天才
●悪口、陰口が大好き(性格極悪)
●他人からどう見られているか、体裁をいつも気にしている(「世間体命」)
●DV夫が多い(世間体を気にするあまり)
●自分の感情をうまく表現できず、コミュニケーション能力に乏しい(同じことを何度も言う、知障)
●頑固で融通(応用)が利かず、表面上意気投合しているようで、腹の中は各自バラバラ(しかも考えていることは驚くほど幼稚)
●人を信じられず、疑い深い(自分自身裏表が激しいため、他人に対してもそう思う)
●自分は常に自己抑制しているもんだから、自由に見える人間に嫉妬し、徒党を組んで猛烈に足を引っ張ろうとする(ねたみが人一倍強い)
●おまけに執念深くしつこい(「一生恨みます」タイプ)
●自分に甘く他人に厳しい(自分のことは棚に上げて、まず他人を意識する・冷酷)
●要するに女々しい、あるいは女の腐ったみたいなやつが多い
0644デフォルトの名無しさん
NGNGこれは何ですか?
0645デフォルトの名無しさん
NGNG誉め言葉と思って有難く受け取っておくよ。
0646デフォルトの名無しさん
NGNGコピペならコピペらしく全文載せろよ(w
0647C初心者
NGNG一応ネタではないです。。。
>>637 ホローありがとうっす。
>>638 すみません。変てこなロジックで。。。
>>642 >補助関数いいですね。
ありがとうっす。
>でもまぁ goto絶対イヤ ってわけじゃないんで、まぁいいかと思ったり。
自分もgoto はそんなに嫌いじゃないです。
うーーん。しっかし、さむいっす。
自分もそろそろ寝ます。
0648デフォルトの名無しさん
NGNG>>637はフォローじゃないぞ。
バッファに読み込んだ後、終端に'\0'付けてないんだから、
そのコードでは何の意味も無い。理解してない証拠だね。
この手のエラーチェックは、例外使えない言語ではgotoが一番綺麗だと思う。
擬似コードで書くとこんな感じ。
if (リソースA取得 == 失敗)
goto 失敗A;
if (リソースB取得 == 失敗)
goto 失敗B;
if (リソースC取得 == 失敗)
goto 失敗C;
リソースC開放;
失敗C:
リソースB開放;
失敗B:
リソースA開放;
失敗A:
return;
0649デフォルトの名無しさん
NGNG暇つぶし・・・長くてごめん・・・
enum Err{FCLOSE, FREE};
char *err_end(void** p, unsigned flag)
{
if(*p != NULL){
switch(flag){
case FCLOSE:
fclose((FILE*)*p);
break;
case FREE:
free(*p);
break;
}
}
*p = NULL;
return NULL;
}
0650デフォルトの名無しさん
NGNGchar *openseek(const char *filename, int offset, unsigned nbytes)
{
FILE* fp = fopen(filename, "r");
if(fp == NULL)
return err_end((void**)&fp, FCLOSE);
if(hoge() < 0)
return err_end((void**)&fp, FCLOSE);
char* buff = (char*)malloc(nbytes);
if(buff == NULL)
return err_end((void**)&fp, FCLOSE);
if(fread(buff, 1, nbytes, fp) != nbytes){
err_end((void**)&fp, FCLOSE);
return err_end((void**)&buff, FREE);
}
if(uge() < 0){
err_end((void**)&fp, FCLOSE);
return err_end((void**)&buff, FREE);
}
return buff;
}
0651デフォルトの名無しさん
NGNGchar *openseek(const char *filename, int nbytes)
{
FILE *fp = fopen(filename, "r");
char *buff = malloc(nbytes);
if(fp && buff && fread(buff, 1, nbytes, fp) == nbytes)
{
fclose(fp);
return buff;
}
buff && free(buff);
fp && fclose(fp);
return NULL;
}
0652651
NGNGhoge() とか入っとらん。
0653デフォルトの名無しさん
NGNG{
FILE *fp = fopen(filename, "r");
if(fp && hoge() >= 0)
{
char *buff = malloc(nbytes);
if(buff && fread(buff, 1, nbytes, fp) == nbytes && uge() >= 0)
{
fclose(fp);
return buff;
}
buff && free(buff);
}
fp && fclose(fp);
return NULL;
}
0654デフォルトの名無しさん
NGNG0655デフォルトの名無しさん
NGNG無用。free(NULL)は合法。
0656デフォルトの名無しさん
NGNGそーでない不確かな処理系がある。
0657デフォルトの名無しさん
NGNGなんかの処理
free(p);
なんかメモリリーク引き起こしそうな使い方だな。
0658デフォルトの名無しさん
NGNGこれってありなの?
0659デフォルトの名無しさん
NGNGどこにあるの?
0660658
NGNG> buff && free(buff);
free()の戻り値の型ってvoidなんだけど、
こういう書き方ってできるの?
0661デフォルトの名無しさん
NGNG0662658
NGNG本当にできるみたい。
ムムム…
0663デフォルトの名無しさん
NGNG0664デフォルトの名無しさん
NGNG0665デフォルトの名無しさん
NGNG2.95.1 は通らない。
0667デフォルトの名無しさん
NGNG0668デフォルトの名無しさん
NGNG> こういったケースをうまく収める定石ってないのでしょうか?
ないと思う。
> で、自分で見つけた解決策の一つが、
> freeの引数に渡す時、void * にキャストするという方法。
それでいい。
または、場合によっては、書き換えて欲しくない処理の
ところだけを別の関数にして、その引数を const char *
で宣言して渡すのも有効な方法だね。
0669デフォルトの名無しさん
NGNG0670デフォルトの名無しさん
NGNG警告じゃなくてエラーになるハズなんだが・・・。
0671デフォルトの名無しさん
NGNGconst char hoge[] = ”abcdefg”;
とすると、ROMにデータが置かれて、ROMだから書き換えとかも不可なわけで。
キャストしようが何しようが、constを書き換えるのはアレかなと。
0672デフォルトの名無しさん
NGNGそれはconstでなければ書き換え可。
hogeは配列だろ。
0673デフォルトの名無しさん
NGNG0674デフォルトの名無しさん
NGNGつーか、全角使うなよ・・・。
0675デフォルトの名無しさん
NGNGすんまそん、区別がつかない一人です。
違いを教えていただけないでしょうか?
0676デフォルトの名無しさん
NGNG671が書いてる前提と違ってきていますが
0677デフォルトの名無しさん
NGNGchar hoge[] = ...
だとhogeは配列。hoge[i]に代入しても良い。
hogeには代入できない。
char *hoge = ...
だとhogeはポインタ変数。hoge[i]に代入するのは未定義動作。
hogeには代入してよい。
0678デフォルトの名無しさん
NGNGC FAQ。
「以下の二つの初期化の違いは。」
http://www.catnet.ne.jp/kouno/c_faq/c1.html#32
「でもchar a[]はchar *aと同じと聞いたことがあるが。」
http://www.catnet.ne.jp/kouno/c_faq/c6.html#2
役に立つから 1 度は通読する事をお奨めする。
>>676
671 の前提がそもそもおかしいという話なのだが。
0681デフォルトの名無しさん
NGNG無視と異議の区別は大丈夫か?
0682デフォルトの名無しさん
NGNGconstをキャストしてまで書き換えるなと言いたいだけでは?
0683デフォルトの名無しさん
NGNGconst をキャストして書き換える話などではない。
0684デフォルトの名無しさん
NGNGconst か否かと全然関係無いじゃん。
671 は const について勘違いしている?
0685デフォルトの名無しさん
NGNG埼玉県民の特徴
●とにかくさいたまが小さい(二言目には「さいたま」)
●さいたまを溜め込んでは、キレて関係ないさいたまを巻き添えにして暴れまくる(さいたまのくせに短気)
●さいたまがさいたまに強く、さいたまがさいたまにされると怒るくせにさいたまでさいたまをさいたまにしようとする(ただし、さいたまをさいたま的にしかさいたまできず、さいたまにはたいてい、さいたま的に負けている)
●さいたまの忠告を受け入れない、さいたまできない、さいたまがない(さいたまの筋をさいたまにでも通そうとするため)
●「さいたま、さいたま」と口うるさいが、実はさいたまがズレまくっている(さいたまの常識は世界の非常識)
●さいたま、さいたま(さいたま、さいたま…etc)に弱く、さいたまには威張り散らす(強い者に対してはへりくだり、弱いものに対してはいじめる)
●さいたま探しだけは名人級(例え10のさいたまがあってもほめることをせず、たった1つのさいたまを見つけてはけなす)
●基本的にさいたま主義でさいたま思考に支配されているため、さいたまがうっとうしい(さいたま)
●さいたまでは何もできない、さいたまは連れションが大好き(さいたまでしか行動できないヘタレ)
●他人からどう見られているか、さいたまをいつも気にしている(さいたま命)
●さいたま夫が多い(さいたまを気にするあまり)
●さいたまの感情をうまくさいたまできず、コミュニケーションさいたまに乏しい(同じことを何度も言う、さいたま)
●さいたまで融通(さいたま)が利かず、表面上意気投合しているようで、さいたまの中は各自バラバラ(しかも考えていることは驚くほどさいたま)
●さいたまを信じられず、疑い深い(さいたま自身裏表が激しいため、さいたまに対してもそう思う)
●さいたまは常に自己抑制しているもんだから、さいたまに見えるさいたまに嫉妬し、さいたまを組んで猛烈にさいたまを引っ張ろうとする(ねたみが人一倍強い)
●おまけにさいたま深くしつこい(「一生さいたま」タイプ)
●さいたまに甘くさいたまに厳しい(さいたまのことは棚に上げて、まずさいたまを意識する・さいたま)
●要するに女々しい、あるいはさいたまの腐ったみたいなやつが多い
0686デフォルトの名無しさん
NGNG0687デフォルトの名無しさん
NGNG0688デフォルトの名無しさん
NGNGどのようにしたら実現できるでしょうか?
mallocだと、だめなのかなぁ
0689デフォルトの名無しさん
NGNGmallocで確保したサイズが解放できるわけを教えてください。
0690デフォルトの名無しさん
NGNG#include <stdlib.h>
int main(void)
{
int x, y;
int (*a)[16];
a = (int (*)[16])malloc(sizeof(int) * 16 * 16);
free(a);
for(x = 0; x < 16; x++)
for(y = 0; y < 16; y++)
a[x][y] = x * 16 + y;
for(x = 0; x < 16; x++)
for(y = 0; y < 16; y++)
printf("a[%d][%d] = %d\n", x, y, a[x][y]);
getchar();
return 0;
}
0691デフォルトの名無しさん
NGNG実装は処理系定義であり、いろいろな方法が考えられる。
ポピュラーな実装方法としては、malloc() が返すポインタよりも少し前の領域に
サイズを記録しておくとか、メモリ割り当ての管理テーブルを作成しておく等が
ある。
0692688
NGNGうぉっ、回答(゚д゚)ハヤー
激しく感謝
あとは、理解する頭を・・・
0693690
NGNGちなみに、int (*)[16] 型だからね。int *[16] 型じゃないからね。
あと、16 は y の 16 であって x の 16 じゃない。
例えば三次元配列 int [12][34][56] へのポインタは int (*)[34][56]。
0694688
NGNG8行目の free(a); とは別に要るんですか?
0695デフォルトの名無しさん
NGNG一次元を二次元風にするとかは、ださいんでしょうか
foo = malloc((max_x + 1) * (max_y + 1) * sizeof(bar));
foo[(x * max_y) + y] = 1024;
#なんか間違えてるかな
0696デフォルトの名無しさん
NGNGこんな感じ
-------------------
|サイズ等の管理情報|
------------------- <-このアドレスがmallocで返される
| |
| ユーザメモリ |
| |
| |
------------------- <-次のメモリブロック
|サイズ等の管理情報|
------------------- <-このアドレスがmallocで返される
| : |
:
:
0697デフォルトの名無しさん
NGNG0698デフォルトの名無しさん
NGNGとは限らない。
0699デフォルトの名無しさん
NGNG何がやりたいの?
>>697-698
つーか、全部を OS に管理させている処理系は少ないぞ。
0700デフォルトの名無しさん
NGNG0701593, 631
NGNG>>668
なるほど、設計を変えることで対応できるんですね。
見直して見る価値がありそうです。ありがとう。
>>670
> // 勿論、テストでポインタの指す領域への代入で警告出るのも確認しました。
> 警告じゃなくてエラーになるハズなんだが・・・。
Warning: assignment of read-only location
で、一応コンパイルは通り、実行も出来ました。
>>631 で話したテストとは下記の様な場面を想定したテストでした。
この場合の const char* の指す場所は、mallocで確保した領域です。
// 普通に初期化せず、関数内で値を設定しているのは、
// 環境等によって異なる値を所得する必要があるため。テストでは省いています。
--------------------------------------------
#include <stdlib.h>
char *foo(void){
char *str = (char *)malloc(2);
if (str){ str[0]='a'; str[1]='\0'; }
return str;
}
int main(void){
const char *str = foo(); /* foo で設定した値を、これ以降書き換えたくない */
if (str) str[0]='b'; /* Warning */
free((void *)str);
return EXIT_SUCCESS;
}
// 誤解、解けたかな?
0702デフォルトの名無しさん
NGNG#include <stdio.h>
int main(void)
{
char str[100];
int i,c;
c=0;
printf("文字列を入力してください。\n");
scanf("%s",str);
for(i=0;str[i]!='\0';i++){
c++;
}
printf("文字列の長さは%dです。\n",i);
return 0;
}
このコードのstr[i]!='\0'の!=hは非等価ですが'\0'の意味を教えて下さい。
0703デフォルトの名無しさん
NGNG0704デフォルトの名無しさん
NGNG> if (str) str[0]='b'; /* Warning */
Σ(゚д゚lll)
それおかしい。
C 規格外の動作をしている。
コンパイラは何?
0705デフォルトの名無しさん
NGNG「このDVDは36時間以内に」消滅 007新作で実現
(CNN) 映画「007」シリーズではこれまで、ニセの指紋や毒入りペンといったスパイ用
の突飛な「新技術」が次々に発表されてきたが、22日に全米公開された最新作「ダイ・アナザー・デイ」
でもまた新たな技術が披露された。「36時間以内に消滅するDVD」だ。
このDVDは、映画の公開前に批評用として報道関係者に配られるもの。報道関係者が見たあと、
一般に出回ってコピーされたりするのを防ぐためニューヨークを本拠とする「フレックス・タイム」会社が
開発した新技術が採用された。
同社のC・E・シャノンさんは「化学のおかげ」としか言わないが、仕組みはこうだ。DVDの表面には
透明な樹脂が張ってあり、プレーヤーはそこを透過するレーザー光で信号を読み出す。ところが、新しい
DVDでは、樹脂に特殊な工夫があり、36時間程度で発熱・発火・発光―つまり爆発―するように
なっている。その結果、DVDは消滅するわけだ。
007のDVDには「包装を開いたあと、36時間以内に作品を鑑賞してください」と書いてある。シャノ
ンさんは「新技術はジェームズ・ボンドにぴったりでしょう」と話している。この技術は音楽CDや、ソフト
ウエアの収録したCD―ROMにも応用でき、フレックス・タイム社には商談の話が来ているという。
0706デフォルトの名無しさん
NGNGそんなこと言わないで教えて下さいよー。麻奈本ですけど。おかねないですよ。
0707デフォルトの名無しさん
NGNGヌル文字
0709デフォルトの名無しさん
NGNG0710593, 631, 701
NGNGcygwin gcc3.1.1 です。
gcc -ansi -Wall foo.c でコンパイルしました。
何処辺りが規格外なの?
>>702
typo かなっ? // 数値は同じだけど。
> printf("文字列の長さは%dです。\n",i);
< printf("文字列の長さは%dです。\n",c);
お金たまったらマトモな本買ってね。
0712デフォルトの名無しさん
NGNG今更だが、
buff && free(buff), 0;
でOK
0713712
NGNG0714デフォルトの名無しさん
NGNG(゚Д゚)ハァ?
0715デフォルトの名無しさん
NGNG0716デフォルトの名無しさん
NGNGまたスレ立てたいだけ厨が出たぞ・・・。
http://pc3.2ch.net/test/read.cgi/tech/1039790146/l50
しかもあっちのスレ、まだ 900 も逝ってないのに。
0717デフォルトの名無しさん
NGNGqsort()
SetWindowsHookEx()
0718デフォルトの名無しさん
NGNGstrcpy 等で、文字列をコピーするのに
何処が、文字列の終端なのか分からないと
何処までをコピーすれば良いか分かりませんよね?
つーわけで、その'\0'は、文字列の終端である事を表す文字です
0719デフォルトの名無しさん
NGNGbuff && ( free(buff), 0 ) ;
カッコが抜けてた
首吊ってきます
0720デフォルトの名無しさん
NGNG0721デフォルトの名無しさん
NGNG使うと便利なとき
0722デフォルトの名無しさん
NGNGC厨ならC厨らしく特殊な例外に対応するときはマクロでも使え。
0723デフォルトの名無しさん
NGNG0724デフォルトの名無しさん
NGNGありがとうございます。ところで、
SetWindowsHookEx()ってなんですか?
>>721
便利なときって例えばどういうときでしょうか。
0725デフォルトの名無しさん
NGNG> 便利なときって例えばどういうときでしょうか。
C言語でオブジェクト指向プログラミングをする時などに使用します。
0726デフォルトの名無しさん
NGNGそのマクロで意味も無く使って見るのがベター
0727デフォルトの名無しさん
NGNG0728デフォルトの名無しさん
NGNGクイックソートのような補助関数を使いたい時や
配列化(特に多次元)したい時とか
0729デフォルトの名無しさん
NGNGありがとうございます。ところで、
オブジェクト指向プログラミングが全く判らないので出直してきます。
質問があるときにはまたよろしくお願いします
0730デフォルトの名無しさん
NGNG#ifdef XXX
#define Free(s) ((s)&&(free(s),0))
#else
#define Free(s) free(s)
#endif
こうすれば、移植しやすいでしょう?
まぁ、普通にステートメントとifを使う方が見やすいけどね…
0731デフォルトの名無しさん
NGNG#define free(s) ((s)&&(free(s),0))
#endif
0732デフォルトの名無しさん
NGNG0733デフォルトの名無しさん
NGNGfree() は vois 型だから、そのままだと && のオペランドにできないの。
どうせやるなら #define free(s) ((s)&&(free(s),s=0)) でもいい気がする。
0734訂正
NGNGvoid 型
0735デフォルトの名無しさん
NGNG0736デフォルトの名無しさん
NGNG0737デフォルトの名無しさん
NGNGライブラリはマクロで定義されてる事もあるので…
まぁfreeがマクロになってる事はあまりないか
0738デフォルトの名無しさん
NGNG0739デフォルトの名無しさん
NGNGあれば文書で警告されるはず。
free() にはそのような警告はないよ。
0740デフォルトの名無しさん
NGNGどっちって、特殊な環境で動くようにしてるだけだから
普通は間違えようにも間違えようがありません
0741デフォルトの名無しさん
NGNG0742デフォルトの名無しさん
NGNG0743デフォルトの名無しさん
NGNGfoo-bar
0744デフォルトの名無しさん
NGNGそれは、あなたの環境でfreeがマクロでは無いからです
で、>>730で移植しやすいと言ってるのだから
汎用性を考えるのなら、マクロの定義で
関数名で使われている名前は避けるべきではないかと…
0745デフォルトの名無しさん
NGNG(゚Д゚)ハ?
0746デフォルトの名無しさん
NGNGほげ〜。。。(ボーっとしている様)
っていう意味でいいの?
0747デフォルトの名無しさん
NGNG漏れの処理系にじゃなくて、規格に無いと逝ってるんだが。
ちなみに gets() はもろに警告されている。
0748デフォルトの名無しさん
NGNG730 が移植しやすいなんで誰も言っていない。
第一、free() を完全に置き換えたいのだから、別の名前の方が混乱する。
0749デフォルトの名無しさん
NGNGだから、その規格が、全ての標準ライブラリは
マクロか適当に実装して提供すればOKってなってない?
それとも、俺の勘違い?
0750デフォルトの名無しさん
NGNGhoge hero moe
0751デフォルトの名無しさん
NGNGたくさんあると思う
0752デフォルトの名無しさん
NGNG予約した識別子を #define したり #undef した場合の動作は未定義って
書いてあるナー・・・。
0753デフォルトの名無しさん
NGNG予約した識別子って、ライブラリ関数名と関係あるの?
0754デフォルトの名無しさん
NGNG予約語以外の、予約した識別子。
つまり、ライブラリ関数/変数、マクロの名前。
それぞれの解説文の中に埋まってて、一覧は無かった。
0755デフォルトの名無しさん
NGNG0756デフォルトの名無しさん
NGNGそれはすごいな
大手メーカーのコンパイラがほぼ全てギルティだな
0757デフォルトの名無しさん
NGNG3つの配列のうち最小のやつを選びたいのですが、
minimum( Gx[i][j-1] , Gx[i-1][j] , Gx[i-1][j-1] );
としてminimumに渡したいのですが、
minimum' : 1 番目の引数を 'unsigned char' から
'int [][512]' に変換できません。
とエラーが出て上手く渡せません。どうしたらよいでしょうか。
ちなみに
#define X_SIZE 512
unsigned char Gx[X_SIZE][X_SIZE];
unsigned char minimum(unsigned char Gx1[X_SIZE][X_SIZE],
unsigned char Gx2[X_SIZE][X_SIZE],
unsigned char Gx3[X_SIZE][X_SIZE]){
}
と、しているのですが・・・。
0758デフォルトの名無しさん
NGNGminimum の宣言がどうなってるんだろうねぇ。
0759デフォルトの名無しさん
NGNGマルチポストすんな
回線切って首吊って氏ね
0760デフォルトの名無しさん
NGNGリンカにお願いするとかは無しよ。
0761デフォルトの名無しさん
NGNGリンカ無しでリンクすんの?
0762デフォルトの名無しさん
NGNG//LKED EXEC PGM=IEWL,REGION=96K,PARM=(XREF,LET,LIST)
0763デフォルトの名無しさん
NGNG0764デフォルトの名無しさん
NGNG0765デフォルトの名無しさん
NGNG0766デフォルトの名無しさん
NGNG0767デフォルトの名無しさん
NGNGdouble u[MAX][MAX], f[MAX][MAX];
void poisson_equation(u,f)
double u[MAX][MAX],f[MAX][MAX];
{
この部分で関数の定義間違っていますとメッセージが出るのですが、
どうしてなのか分かりません。どこがおかしいのでしょう?
{
0768デフォルトの名無しさん
NGNGvoid poisson_equation(double u[MAX][MAX],double f[MAX][MAX])
0769デフォルトの名無しさん
NGNG>> {
↓
}
0770デフォルトの名無しさん
NGNG関数の引数定義ではマクロは使えませんよ。
MAXを直接21と書き換えてしまってください。
0771767
NGNGわかりました。ありがとうございます。
0772デフォルトの名無しさん
NGNGvoid poisson_equation(double u[][MAX],double f[][MAX])
0773デフォルトの名無しさん
NGNGどこのコンパイラでそうなってるんだ?
0774デフォルトの名無しさん
NGNGお前適当なこと吹き込むなよ。
コンパイラとプリプロセッサの違い分かってる?
0775デフォルトの名無しさん
NGNGま、まじっすか?
0776デフォルトの名無しさん
NGNGお前にはわかっているというのか?
0777デフォルトの名無しさん
NGNGわからないんだったら、ここで素直に聞いておいたほうがいいよ。
0778776
NGNG教えてくれ。
0779デフォルトの名無しさん
NGNGおもろいやつだなw
#で始まる命令はプリプロセッサが処理する。
コンパイラに渡されたソースではMAXという文字列ではなく21という数字になっている。
だからMAXを21に変えたところでコンパイルには何も影響が無い。
0780776
NGNG大体解った。
#define MAX yahoo
printf("MAX"); → printf("yahoo");
ってなってくれんだな。結構慎重に使わないとやばいな。
0781デフォルトの名無しさん
NGNGネタなのか?
0782デフォルトの名無しさん
NGNGCプリプロセッサはそういう挙動はしない。
0783デフォルトの名無しさん
NGNG0784776
NGNGじゃあ、どう動くんだ?
0785デフォルトの名無しさん
NGNG$ cat hoge.txt
#define MAX yahoo
1. printf("MAX");
2. MAX
3. [MAX]
4. // MAX
5. /* MAX */
$ cpp --version
cpp (GCC) 3.2 20020927 (prerelease)
Copyright (C) 2002 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
0786結果
NGNG$ cpp hoge.txt
# 1 "hoge.txt"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "hoge.txt"
1. printf("MAX");
2. yahoo
3. [yahoo]
4.
5.
0787776
NGNGすまんが日本語で説明してくれ
0788デフォルトの名無しさん
NGNG>>785のhoge.txt にCプリプロセッサをかけると
>>786になる。
説明も何もそのままだ。
0789デフォルトの名無しさん
NGNGは禿しく未定義なんでしょうか。
0790776
NGNG未定義だ
0791デフォルトの名無しさん
NGNG0792776
NGNGおまえも理解していないってことだな
0793デフォルトの名無しさん
NGNG0794デフォルトの名無しさん
NGNGハァ。見りゃ分かるだろ。
Cプリプロセッサは文字列リテラルの中には関与しないんだよ。
0795776
NGNG根拠は?
0797デフォルトの名無しさん
NGNGよっぽど悔しかったんだね。プ
0798デフォルトの名無しさん
NGNG>>786を見ろ。
>>796
確信犯か、わざとやってるかのどっちかだな。
そうします。
0799デフォルトの名無しさん
NGNGC90およびC99。
0800デフォルトの名無しさん
NGNG800げっと。
0801デフォルトの名無しさん
NGNG文字列の連結は、関与と言えば関与のような…
0802デフォルトの名無しさん
NGNGそれはK&Rのfirst editionではないか?
0803デフォルトの名無しさん
NGNG>>794「文字列リテラルの中」と書いてあるが?
#中という表現もどうかと思うが。
0804真面目に質問
NGNGソース
sprintf(qs,"Cookie: NAME=%s; MAIL=%s",UrlEncode("aaa"),UrlEncode("aaa"));
デバッグでqsに入っている文字列を見ると、
"フフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフミケ"
となり、文字列が変換・代入されません。
どうして、こうなるのでしょうか?
すいません、初歩的な質問で・・・
0805デフォルトの名無しさん
NGNGそれだけじゃわからん。前後でなにしているのか、どの段階でそうなっているのかかけ。
その関数実行後にそうなっているのか?
環境とコンパイラとデバッグ環境は・
0806デフォルトの名無しさん
NGNG0807真面目に質問
NGNGVisualC++6
ソース
char qs[100];
sprintf(qs,"Cookie: NAME=%s; MAIL=%s","aaa","aaa");
文字列の変換をしたいだけです。
結果として、qsには、「"Cookie: NAME=aaa; MAIL=aaa"」と入ってくれればOKです。
ただ、これだけです。関連しているのは。
MFCだと、CStringを使えば、簡単に文字列操作ができますが・・・。
どこに問題があるのでしょうか?
0808真面目に質問
NGNGqsには"フフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフミケ"
と代入されます。なぜでしょうか。
0809デフォルトの名無しさん
NGNGデバッガで矢印がsprintfの次までいった時点で見てるのか?
→sprintf(...)
ってときにみてもおかしなものが入っているのは当然だぞ。
0810デフォルトの名無しさん
NGNG0811真面目に質問
NGNGいえ、その関数を実行した後です。
0812デフォルトの名無しさん
NGNGんなアフォな。何か隠してるだろ?
0813デフォルトの名無しさん
NGNGコンパイル時になんか警告でなかった?
0814真面目に質問
NGNGいえ、全くエラーはでません。
多分、何か、基本的な間違いをしているのだと思いますが・・。
それが、解らなくて・・。困ってます。(涙)
0815デフォルトの名無しさん
NGNG#define sprintf(a,b,c,d) strcpy(a, "フフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフミケ")
こういうマクロが定義されていたんだ!
0816デフォルトの名無しさん
NGNGmain() {
char qs[100];
sprintf(qs,"Cookie: NAME=%s; MAIL=%s","aaa","aaa");
printf("%s",qs);
}
でもフフフフ…なのかい?
0817デフォルトの名無しさん
NGNG全コードを載せてくれ
0818デフォルトの名無しさん
NGNG807のソースをそのまま貼り付けてコンパイルして実行してもそうなるの?
そうならデバッガが壊れている。
そうでなければ変な結果になるソースのその部分の処理のまとまりをあげてくれなきゃ解決できない。
0819デフォルトの名無しさん
NGNG0820デフォルトの名無しさん
NGNGデフォルトの初期化がフだと?
0821真面目に質問
NGNGやってみます。
0822デフォルトの名無しさん
NGNGhttp://pc3.2ch.net/test/read.cgi/tech/1039772622/137
マルチに降格しました。
真面目に質問は放置でお願いします。
0823デフォルトの名無しさん
NGNG結果が気になるじゃねーか。
0824真面目に質問
NGNGmain() {
char qs[100];
sprintf(qs,"Cookie: NAME=%s; MAIL=%s","aaa","aaa");
printf("%s",qs);
}
だと、きちんと表示されました!!!!
何が違うのだろうか・・・???
0825デフォルトの名無しさん
NGNGだからソース上げろ。その処理が書いてある関数全体を。
0826真面目に質問
NGNGあれ?マルチはだめなんですか。すいません。
この掲示板は初心者なモンで。
皆様にはご迷惑をおかけしました。
で、VisualC++を再起動しなおして、ビルドしたら、きちんと表示されました。
何が原因でこうなったかは、わかりませんが、一応解決しました。
誠にすいませんでした。
今度から気をつけます。
0827真面目に質問
NGNGうまくいくかどうか、心配ですが、夜が明けるまでには、書き込みがうまくいくように、
必死でプログラミングしています。
0828デフォルトの名無しさん
NGNGこいつ、ここの人でしょ?
うざいんですけど。
0829親切な人
NGNGヤフーオークションで、凄い人気商品、発見!!!
プランテック製の「 RX-2000�V 」を改造済み
にした、アイティーエス製の「 RX-2000�V 」↓
http://user.auctions.yahoo.co.jp/jp/user/neo_uuronntya
ヤフーオークション内では、現在、このオークション
の話題で、持ちきりです。
ヤフー ID の無い方は、下記のホームページから、
購入出来る様です↓
http://www.h5.dion.ne.jp/~gekitoku/#.2ch.net/
0830確かにうざいね
NGNGもの凄い勢いで誰かが質問に答えるスレ3639
http://cocoa.2ch.net/test/read.cgi/qa/1039870549/811-
811 :JPS ◆XXXAXAQILI :02/12/15 00:53
友達いなそうw
↓
852 :JPS ◆XXXAXAQILI :02/12/15 00:57
死ね死ね団キモイ
860 :JPS ◆XXXAXAQILI :02/12/15 00:57
馬鹿は死ねw
↓
872 :JPS ◆XXXAXAQILI :02/12/15 00:58
屑w
↓
883 :JPS ◆XXXAXAQILI :02/12/15 00:59
おまえってゴミだねw
↓
902 :JPS ◆XXXAXAQILI :02/12/15 01:01
クズなんだから死ねw
↓
910 :JPS ◆XXXAXAQILI :02/12/15 01:02
ゴミ失せろw
↓
922 :JPS ◆XXXAXAQILI :02/12/15 01:03
糞虫w
↓
0831デフォルトの名無しさん
NGNGprintf("%d",(unsigned int)sizeof(str));
なら上手く行くのに
char (*str)[4] = "2ch";
printf("%d",(unsigned int)sizeof(*str));
とやるとエラーが出るのはなぜでしょうか?
多次元配列がよくわからなくて色々やってたらふと疑問に思ったのですが・・・
0832デフォルトの名無しさん
NGNGVC++のデバッグビルドだと、全てのローカル変数を'ヘ'(0xcc)で初期化して、
ポインタとして触ったときにAccess Violationするようにしてるんじゃなかったか?
Win32だと0x80000000以降のアドレスはカーネル用で絶対触れないからね。
よーするに、初期化してない自動変数には何入ってるかわからん、ってことさヽ(´ー`)/
0833デフォルトの名無しさん
NGNGなんだこりゃ......
0834デフォルトの名無しさん
NGNGエラーって何よ?コンパイルエラー?
それくらいは書け阿呆
0835デフォルトの名無しさん
NGNGつーか、アラーメッセージ見た?
0836デフォルトの名無しさん
NGNGprintf("%d",(unsigned int)sizeof(str));
で何が知りたいのかも気になるところだが.
0837デフォルトの名無しさん
NGNGアラーメッセージ.......ムスリムでつか?
0838デフォルトの名無しさん
NGNGサイズが4であるchar型の配列へのポインタだろ
0839デフォルトの名無しさん
NGNGを考える。単純に、n番目に入力された値までの平均値
(A0 + A1 + A2 + ... An)/n
を計算しようとすると、分母も分子も32ビットの範囲をいずれ越えて
一回りしてしまうかも。何かいい方法ない?
0840デフォルトの名無しさん
NGNGんなこたぁ分かっとるわ!クソヴォケ!
0841デフォルトの名無しさん
NGNGてか、構造体つくって繰上りとか自分でなんとかしる。
0842デフォルトの名無しさん
NGNG最近流行りらしい<アラーメッセージ
最初見た時はめちゃワロタ。
0843デフォルトの名無しさん
NGNG良く読むと違う気が(w
0844デフォルトの名無しさん
NGNG0845デフォルトの名無しさん
NGNG束胃腸演算
0846デフォルトの名無しさん
NGNG0847デフォルトの名無しさん
NGNGということは>>840の立場って…
0848デフォルトの名無しさん
NGNGん?何が違う?
0849デフォルトの名無しさん
NGNG>>846
多倍長じゃないの?
0850デフォルトの名無しさん
NGNG吊られたってコトさ。
0851デフォルトの名無しさん
NGNG0852デフォルトの名無しさん
NGNG0853デフォルトの名無しさん
NGNG0854デフォルトの名無しさん
NGNG0855デフォルトの名無しさん
NGNGs undeclared
というアラーメッセージが出ます!
やはりラマダンのときにパンをつまみ食いしたのが悪かったんでしょうか!?
0856831
NGNG今一度コンパイルし直したらただの警告が出てきますた。でちゃんと動きました。
さっきのエラーは一体なんだったんでしょうね。(←これについての突っ込みは無しということで)
お騒がせしました。
>>836
いえ、ただの遊びのつもりで
この板れすが速くてイイですね。
0857デフォルトの名無しさん
NGNG特に限定してるわけじゃありません。
64ビットでやれってのでもいいんだけど、それでもいずれ限界がくるから
別のスマートな方法ってないのかなと、、、
0858デフォルトの名無しさん
NGNG0859デフォルトの名無しさん
NGNG誰もそんなこと言ってねーよクァス
0860デフォルトの名無しさん
NGNGそんなこと言い出したらきりないでしょ。
最後には数値がビット表現で10TBを超えちゃう場合とかも考えるわけ?
0861デフォルトの名無しさん
NGNG吐けば消える。
今からでも遅くない。
やれ。
やるんだ。
0862デフォルトの名無しさん
NGNG0863デフォルトの名無しさん
NGNG警告消したいならキャスト汁
char (*str)[4] = ( char(*)[4] )"2ch";
0864デフォルトの名無しさん
NGNGもううんちとして排出してしまいましたので、
うんちを取り返しておしりから入れて口から出したいと思います。
0865デフォルトの名無しさん
NGNGおまい, 分かってねーなw
0866デフォルトの名無しさん
NGNG0867デフォルトの名無しさん
NGNGたしかにそうかもですね。
>>841さんのいわれるように、繰り上がりとかのケアをするようにするかな。
0868デフォルトの名無しさん
NGNGそのコードで警告のみ・・・怪しいですな。
0869デフォルトの名無しさん
NGNG怪しいのはてめーだこのDQN原人
0870デフォルトの名無しさん
NGNG0871デフォルトの名無しさん
NGNG0872デフォルトの名無しさん
NGNG0873デフォルトの名無しさん
NGNG(void *)の方が良かったか?
0874デフォルトの名無しさん
NGNGデリケートでデリシャス…
0875デフォルトの名無しさん
NGNG0876デフォルトの名無しさん
NGNG0877デフォルトの名無しさん
NGNG0878デフォルトの名無しさん
NGNGchar* str = "2ch"と同じことだろ。
0879865
NGNGごめん, おまいは合ってるわ. 正直すまんかった.
0880デフォルトの名無しさん
NGNG0881デフォルトの名無しさん
NGNG865 名前:デフォルトの名無しさん 投稿日:02/12/15 01:40
>>863
おまい, 分かってねーなw
0882デフォルトの名無しさん
NGNGこうしろってか?
char str[1][4] = { "2ch" } ;
char (*strp)[4] = str ;
わざわざ、こんな事しなくても分かってれば良いんじゃねぇか?
0883デフォルトの名無しさん
NGNGchar str[4] = "2ch";
char (*strp)[4] = &str;
なぜこう書かない?
0884デフォルトの名無しさん
NGNG>>831で多次元配列が云々って言ってるから
0885デフォルトの名無しさん
NGNGプププ
0887デフォルトの名無しさん
NGNGなんで多次元配列でないの?
もっとも、本当は配列の配列だという意味ならその通りだけど。
0888デフォルトの名無しさん
NGNGどう見たって。
0889デフォルトの名無しさん
NGNG>>831氏が多次元配列で悩んでるっていうのは,
char ss[4][4]={ "1ch", "2ch", "3ch", "4ch"};
とかやりたいんはないのか?多分.
0890デフォルトの名無しさん
NGNG多次元配列が云々が無ければ配列へのポインタやね
0891デフォルトの名無しさん
NGNG>>883のコードだと早とちりしてた。。
忘れてくれ。
0892デフォルトの名無しさん
NGNGキャストしていないのは置いといて・・・
>>831のコードは4バイト(俺の処理系では)の1次元配列の
先頭アドレスを格納する変数って意味では?
だから配列の配列ではない。
0894デフォルトの名無しさん
NGNG>>>831のコードは4バイト(俺の処理系では)の1次元配列の
揚げ足取られないようにしたつもりだろうが
どの処理系でも4Byteだ。
0895デフォルトの名無しさん
NGNGリモコン作るんですか?
0896デフォルトの名無しさん
NGNG釣りしてたんだろ?
0897デフォルトの名無しさん
NGNG0898デフォルトの名無しさん
NGNGでアライメントが何たらかんたらって出てくるのを
期待してたんじゃ無かったのか?
0899デフォルトの名無しさん
NGNG0900831
NGNGこんな夜中に大量にレス付けて下さってありがとうございます。
おまいら最高です。
(多次元配列云々は恐らく蛇足でした。脳内あぼんして下さい。)
0901デフォルトの名無しさん
NGNG0902デフォルトの名無しさん
NGNGそれは, , , あの, , , , つまり, , ,
あれだ.
0903デフォルトの名無しさん
NGNG0904デフォルトの名無しさん
NGNG0905デフォルトの名無しさん
NGNGchar *s2[3] = (char (*)[3])&(((char *)*s)+1);
0907デフォルトの名無しさん
NGNG配列へのポインタは>>882や>>883の様にして使います
で警告が出る原因は
char cp[4] = "2ch" ;
int *ip = cp ;
で警告が出るのと同じ様に、左右の型が違うからです
まぁ、これで分からなかったら本でも読んで
もう一度ポインタについて勉強しなおして下さい
0908デフォルトの名無しさん
NGNGつーか、寝てるのか
0909デフォルトの名無しさん
NGNG0910デフォルトの名無しさん
NGNG0911デフォルトの名無しさん
NGNGかなり冗長的だし余計混乱するかもしれませんが
これを実行して各初期値と結果を見比べれば少しは理解出来るかも
int main() {
char str1[4] = "012" ;
char *str2 = str1 ;
char str3[2][4] = { "345","678" } ;
char (*str4)[4] = str3 ;
char *str5 = str3[0] ;
int i = 1 ;
printf("(char*) str1 (string) %s\n", str1) ;
printf("(char*) str1 (char ) %c\n", *(*((char(*)[4])str1+0))) ;
printf("(char*) str1+i (string) %s\n", str1+i) ;
printf("(char*) str1+i (char ) %c\n", str1[i]) ;
printf("(char*) str2 (string) %s\n", str2) ;
printf("(char*) str2 (char ) %c\n", *(*((char(*)[4])str2+0))) ;
printf("(char*) str2+i (string) %s\n", str2+i) ;
printf("(char*) str2+i (char ) %c\n", *(str2+i)) ;
printf("(char(*)[4]) str3+i (string) %s\n", str3+i) ;
printf("(char(*)[4]) str3+i (char ) %c\n", *(*(str3+i))) ;
printf("(char*) *str3+i (string) %s\n", *str3+i) ;
printf("(char*) *str3+i (char ) %c\n", *(*str3+i)) ;
printf("(char(*)[4]) str4+i (string) %s\n", str4+i) ;
printf("(char(*)[4]) str4+i (char ) %c\n", *(*(str4+i))) ;
printf("(char*) *str4+i (string) %s\n", *str4+i) ;
printf("(char*) *str4+i (char ) %c\n", *(*str4+i)) ;
printf("(char*) str5 (string) %s\n", str5) ;
printf("(char(*)[4]) *str5+i (char ) %c\n", *(*((char(*)[4])str5+i))) ;
printf("(char*) str5+i (string) %s\n", str5+i) ;
printf("(char*) str5+i (char ) %c\n", *(str5+i)) ;
return 0 ;
}
0912デフォルトの名無しさん
NGNG0914デフォルトの名無しさん
NGNGdouble b = 1.1;
a = b;
これに対してgccはwarningを出してくれません。
そのせいでバグってた、っての結構ある気がする。
0915デフォルトの名無しさん
NGNGpointer.c:17: warning: char format, different type arg (arg 2)
pointer.c:21: warning: char format, different type arg (arg 2)
printf("(char(*)[4]) str3+i (string) %s\n", str3+i) ;
printf("(char(*)[4]) str4+i (string) %s\n", str4+i) ;
ここでwarningがでます。
(str3+i)[0]
(str4+i)[0]
としたら出なくなりました。
0916デフォルトの名無しさん
NGNGpointer.c:17: warning: char format, different type arg (arg 2)
pointer.c:21: warning: char format, different type arg (arg 2)
printf("(char(*)[4]) str3+i (string) %s\n", str3+i) ;
printf("(char(*)[4]) str4+i (string) %s\n", str4+i) ;
ここでwarningがでます。
(str3+i)[0]
(str4+i)[0]
としたら出なくなりました。
0917デフォルトの名無しさん
NGNGつーか規制しろよ。
0918デフォルトの名無しさん
NGNGfprintf(stdin , "hello");
fread(stdin , buf , sizeof(buf) - 1);
ってしても読み込めません。これはできないのでしょうか?
ほかにいい方法はありますか?
0919デフォルトの名無しさん
NGNG> fprintf(stdin , "hello");
はぁ ? stdin ってなにもんかわかってるか ?
> ほかにいい方法はありますか?
一体何がしたいんだ ?
0920918
NGNGすみません。どういうもんなのでしょうか?
0921デフォルトの名無しさん
NGNGstdin: Standard Input, 標準入力
fprintf() は、出力する関数だから stdin は使えない。
0922918
NGNGなんとなくわかりました。
やりたかったのは、標準入力されたようにして、freadでその入力されたものを取り出したいと思ったのですが、
どういうふうにすればいいのでしょうか?
0923デフォルトの名無しさん
NGNG> やりたかったのは、標準入力されたようにして、freadでその入力されたものを取り出したいと思ったのですが、
自分で出力したものを、入力したいのか ? なんでまたそんなことを...。
まあ、良くわからんけど取りあえず適当なファイルに fprintf() して、それを fread() すれば ?
fopen()/fclose() とかについても調べた方が良いよ。
0924デフォルトの名無しさん
NGNGungetc() のような事をさせたいんでしょうか…?
0925デフォルトの名無しさん
NGNGそれにしては、先に出力してるしなぁ...。
unputc() みたいなことしたいのか ? ってどう言う状況だろう...。
0926デフォルトの名無しさん
NGNG0927918
NGNGそういう感じです。
1文字じゃなくて文字列全体を戻して、
別の処理でそれをfreadやfgetcで取り出していきたいのですが、
どうすればいいのでしょうか?
0928デフォルトの名無しさん
NGNG別にストリームに戻さなくてもいいと思うぞ。
strcpy(buff, "hellow");
として、buff をその「別の処理」とやらに渡せばすむ話じゃないの ?
0929デフォルトの名無しさん
NGNG何語だ
0930デフォルトの名無しさん
NGNG0931デフォルトの名無しさん
NGNGtypo だ。気にするな。
取りあえず、"hellow" でググって見たら、28,100件もヒットしやがった。
全部が間違いではないだろうが、結構間違いやすい単語のようだ。
と、言い訳しとこう...。
0932918
NGNG戻したものを再び取り出すのに意味があるんです。
わけは聞かないでください。
何か方法はないでしょうか?
0933デフォルトの名無しさん
NGNG>戻したものを再び取り出すのに意味があるんです。
プログラムの組み方が間違ってると思われる
0934918
NGNGごめんなさい。組み方に問題があるのは重々承知しています。
でもぼくにはどうしようもないんです。
できるかできないか教えていただけないでしょうか?
0935デフォルトの名無しさん
NGNG標準「入力」に「出力」できるわけないだろ?
0936デフォルトの名無しさん
NGNG標準入力じゃないと駄目なの?
例えば、一度標準入力から入力されたものを
他のファイル(入出力モード)に出力して
fseek等を駆使して適当にでっち上げるとか…
0937デフォルトの名無しさん
NGNG根本的にとんでもなく間違ってる余寒。
0938918
NGNG呼び出さなければいけない関数のほうが標準入力から値をとってきているんです。
正直にいうとCGIで使われている関数を呼び出して処理しなければいけないんです。
getenvなどで取得する値は問題ないのですが、標準入力からも値をとってきている処理のために、
そこに値を入れておかないと処理がエラーで終了してしまいます。
なにかいい知恵はないでしょうか?
0939デフォルトの名無しさん
NGNG0940デフォルトの名無しさん
NGNG0941デフォルトの名無しさん
NGNG仕様を書いてくれ
0942デフォルトの名無しさん
NGNG他のファイルに出力して
その関数にはstdinをfreopen()した物で動く事を期待してみるとか
つーか、その関数で標準入力から読み取ってるデータを
全てbufにコピーしておく方が良い
0943デフォルトの名無しさん
NGNGバイプを使うに++
0944デフォルトの名無しさん
NGNGそりゃパイプだろ
0945デフォルトの名無しさん
NGNG0946デフォルトの名無しさん
NGNG0947デフォルトの名無しさん
NGNG0948デフォルトの名無しさん
NGNGを作成中ですが、如何せん下手糞です。そこで熟練プログラマは
どういう風に書いているのかな?と思いたって、ソースコードが
見れるところを探しているんですが、痒いところに手が届くような
自分が探しているのにマッチしたところが見つからないです。
どこか有名なところないでしょうか?C言語でCSV形式のファイル
を変換するようなプログラムを求めています。perlとかが主流み
たいでなかなか見つかりません。
0949デフォルトの名無しさん
NGNG0950デフォルトの名無しさん
NGNGソースが汚くて下手だけどここなんかは?
↓
http://www.orchid.co.jp/computer/cschool/csv2.html
0951デフォルトの名無しさん
NGNGBASICみたいな書きかたしとるな…
0953デフォルトの名無しさん
NGNGまともなスレが立ちますように。
0954デフォルトの名無しさん
NGNGプログラミング作法
http://www.ascii.co.jp/books/detail/4-7561/4-7561-3649-4.html
って手元にあっても損はないもんですか?
スレ違いでスマソ。
0955デフォルトの名無しさん
NGNG0956デフォルトの名無しさん
NGNG駄目な奴は何をやっても駄目
0957デフォルトの名無しさん
NGNG0958デフォルトの名無しさん
NGNGまたいらぬ荒らしの元になる気がしますが・・・。
0959デフォルトの名無しさん
NGNG0960デフォルトの名無しさん
NGNGすでに削除依頼が出ているので、それを待ったほうがイイ。
0961デフォルトの名無しさん
NGNG0962デフォルトの名無しさん
NGNG0963デフォルトの名無しさん
NGNG速やかに移行ください
http://pc3.2ch.net/test/read.cgi/tech/1040048527/
0964デフォルトの名無しさん
NGNG乙・・・って偽スレじゃん。
0965デフォルトの名無しさん
NGNGC言語なら、オレに聞け! 47
http://pc3.2ch.net/test/read.cgi/tech/1040048202/
0966デフォルトの名無しさん
NGNG0968デフォルトの名無しさん
NGNGしかし、10日も持たないとは...。
スレの伸びはいいのにまともな質問が少なくて寂しいね。
やっぱ偽スレ乱立してるせいかな。
0970デフォルトの名無しさん
NGNGそれは、このスレに限らず全般的な傾向だからなぁ...。
極秘に、「まともなプログラム技術板」でも作って欲しい...。
0971デフォルトの名無しさん
NGNG0972デフォルトの名無しさん
NGNGまあ、そうなんだよね。
まともだけど、あまり人の来ない掲示板か
ぐちゃぐちゃだけどにぎわってる掲示板...。
究極の選択。
それにしても、最近のぐちゃぐちゃさはちょっと行き過ぎかと。
0973デフォルトの名無しさん
NGNG0974デフォルトの名無しさん
NGNG荒らしと変わらん罠
0975デフォルトの名無しさん
NGNG0976あぼーん
NGNG0977デフォルトの名無しさん
NGNGWebProg板とか、ゲーム製作技術とか?w
まだム板はましだな、それと比べると。
0978デフォルトの名無しさん
NGNGs = s + s;
これを実行すると "(;´Д`) ハァハァ" になると聞いたのですが、なりません。
どうしてですか?
0979デフォルトの名無しさん
NGNG"(´c_,` ) プッ"になりますよ
0980デフォルトの名無しさん
NGNG0981デフォルトの名無しさん
NGNG早く膿めないと
0982デフォルトの名無しさん
NGNG0983デフォルトの名無しさん
NGNG0984デフォルトの名無しさん
NGNG0985デフォルトの名無しさん
NGNGつーかリファレンス見れ
0986デフォルトの名無しさん
NGNG気分次第。
レス数が950を超えています。1000を超えると書き込みができなくなります。