■ このスレッドは過去ログ倉庫に格納されています
何度も呼ぶ関数がそのプログラム中で一回目に呼ばれたかどうかを判定するには・・・
- 1 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:07:18.50 ID:L98G0da50.net
- static変数を使って、if文で判断するのと、インクルードガードみたいに#ifndefと#defineを使うのとではどっちが処理速度が速い?
コンパイラにもよるかな?
- 2 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:10:00.78 ID:L98G0da50.net
- この時間はプログラマいないのかな?
- 3 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:10:45.91 ID:BmRrTSaK0.net
- 1回目に呼ばれた時に関数自体を書き換える
- 4 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:11:54.97 ID:L98G0da50.net
- あ、言い忘れてたけどCです
- 5 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:12:55.77 ID:L98G0da50.net
- お、人来てた
関数の書き換え・・・アセンブラ関係の知識ないとキツそう
というか実行中に書き換えられるの?
- 6 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:14:43.27 ID:PQfLnYio0.net
- 1回目って言っても実行時の1回目の実行なのかソースコード中の1回目の出現なのかどっちなんだよ
- 7 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:15:56.83 ID:L98G0da50.net
- >>6
説明不足ですまん
実行時の一回目
- 8 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:16:47.78 ID:PQfLnYio0.net
- >>7
それならifndefは使えない
static関数しかないと思う
- 9 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:17:01.74 ID:BmRrTSaK0.net
- 設計を見直すか関数ポインタ使うかなぁ
別にstaticでいいけど
- 10 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:19:32.75 ID:qUZyX+UF0.net
- void Func(void) {
static int numCall = 0;
++numCall;
(略)
}
- 11 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:20:11.57 ID:L98G0da50.net
- >>8
そうなのか、机上論で実際に実行してなかったから気づかなかったは
こんな糞スレに付き合ってくれてありがとう
>>9
関数ポインタか
聞いたことあるくらいで使ったことないんだよな
static使う事にしたけど後学の為に調べてみる
ありがとう
- 12 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:22:11.28 ID:L98G0da50.net
- >>10
staticは0で初期化されるんじゃ・・・ってのは置いといて(バグ見つけやすいしね)、
やっぱりstaticがいいみたいだね
- 13 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:23:10.96 ID:PQfLnYio0.net
- >>10
4294967297回目の実行でバグるな
void unko(void) {
static int first = 1;
if (first) {
first = 0;
//適当な処理
}
//残りの処理
}
- 14 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:24:29.87 ID:CXSP2RfX0.net
- インクルードガードはあくまでコンパイルする前にされるから
実行中のプログラムにたいしてどうこうできるわけではない
- 15 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:25:44.12 ID:PQfLnYio0.net
- #ifndefみたいなプリプロセッサディレクティブはコンパイル時に処理されるのよ
なので実行時の条件判断には使えない
- 16 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:27:11.86 ID:CXSP2RfX0.net
- >>5
できるよ
そう、関数ポインタならね
- 17 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:27:36.76 ID:L98G0da50.net
- >>13
変数のオーバーフローか
気づかずにインクリメントで実装するところだった
そのやり方か、first = 0;だと安心安全!
- 18 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:31:42.97 ID:L98G0da50.net
- >>14
>>15
#defineが実行前に置き換えられることは知ってたけど、プリプロセッサ(#系全部?)は全部コンパイル前に処理される....勉強になるな
>>16
関数ポインタSUGEEEEE
- 19 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:32:34.68 ID:PQfLnYio0.net
- >>18
#系全部の認識であってる
- 20 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:37:32.61 ID:G9m0gx+q0.net
- cって関数にもポインタあるのか
- 21 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:38:32.96 ID:6/T5ywEx0.net
- メモリに読み込まれる以上どんなものにもアドレスがある
変数にしろ関数にしろ
ならそれをポインタとして扱えても不思議じゃない
- 22 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:41:23.49 ID:6thq5Ir40.net
- プログラミング初心者の俺
printfを仕込む
- 23 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:44:18.19 ID:L98G0da50.net
- >>22
これまた説明不足ですまんが、ユーザー側に知らせるんじゃなくて、内部処理を変えたいんだ
- 24 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:47:06.47 ID:L98G0da50.net
- 関数ポインタについて調べてみたら、関数の配列を実現できるだと・・・
なんかすごいが、活用方法がなぁ・・・
- 25 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:49:45.56 ID:SVzhKsgV0.net
- 根本から覆すようで悪いけど、よほどの処理負荷がかかるルーチンでなければ、こういうのは処理速度ではなく設計の美しさという観点で判断すべき ワッショイ
- 26 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:51:38.14 ID:CXSP2RfX0.net
- 関数ポインタは呼ぶ関数を動的に変更できるのが一番の強みのような気がする
スイッチでたくさん場合わけしなきゃいけないような場面でも関数ポインタなら一行ですんだりするし
- 27 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:53:47.67 ID:L98G0da50.net
- >>25
美しさか
勿論、できるだけ見やすくはするけども、個人的には
少しの処理速度 > コードの見易さ
なんだよなぁ
- 28 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:54:57.71 ID:SVzhKsgV0.net
- アーキテクチャ単位で処理を変えたい場合 → #ifdefとか#defineとか
複数人でコードを共有していて分かりやすくしたい場合 → グロ変(static)
それら以外 → 関数ポインタ
ワッショイ
- 29 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 16:56:47.64 ID:L98G0da50.net
- >>26
そう言われれば確かにそうだな
そこまで年取ってないと思ってるのに、新しい技術を身に着けても、活用方法がさっぱり浮かばないことがたまにあるんだよなぁ
脳を柔らかくせねば
- 30 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 17:01:07.44 ID:L98G0da50.net
- >>28
関数ポインタをある程度は使えるように勉強してみるか
関数の呼び出し回数測定を、言語側でやってもらえると、助かるんだけどなぁ
と、一瞬思ったが利用しないときは無駄に処理が・・・
- 31 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 17:05:12.62 ID:PQfLnYio0.net
- >>28
×複数人でコードを共有していて分かりやすくしたい場合
○関数ポインタも理解できない低スキルの開発者とコードを共有せざるを得ない場合
- 32 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 17:06:33.95 ID:xJmprfwg0.net
- 判定する場所を言えよ
関数内なのか関数を呼ぶ前なのか関数を呼んだ後なのか
- 33 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 17:10:11.80 ID:L98G0da50.net
- >>32
毎度毎度説明不足で申し訳ない・・・
関数内です
やっぱりstatic変数安定?
- 34 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 17:24:14.81 ID:xJmprfwg0.net
- >>33
それしかないな
- 35 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 17:25:44.12 ID:L98G0da50.net
- >>34
ふむむ ありがとう
以下、煮るなり焼くなりプログラミングスレにするなりご自由にどうぞ
- 36 :以下、\(^o^)/でVIPがお送りします:2014/10/05(日) 17:27:52.36 ID:PQfLnYio0.net
- やあ、ここはプログラミングスレッドだよ!
Wiki(まだまだ未完成。編集者募集!)
http://vipprog.net/wiki/
共有Blog(プログラミング関連のコラム☆編集大歓迎!)
http://vipprog.tumblr.com/
避難所(規制組来たれ)
http://ex14.vip2ch.com/test/read.cgi/part4vip/1399372368/
うpろだ
http://www8.uploader.jp/home/vipprog/
コードが長くてコピペが辛い
http://pastebin.com/
web上で実行したい
http://codepad.org/
http://ideone.com/
総レス数 36
9 KB
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★