2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

何度も呼ぶ関数がそのプログラム中で一回目に呼ばれたかどうかを判定するには・・・

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 ★