- 締切済み
inlineとdefineの違い
vipasigaruの回答
- vipasigaru
- ベストアンサー率38% (16/42)
ちょっと違う視点で マクロ展開は、展開オーバーヘッドが0 (フリプロセッサで置換されるため) inline関数は展開オーバーヘッドが少ない 通常関数は展開オーバーヘッドが大きい つまり、オーバーヘッドの大きさは 通常関数 > inline関数 > マクロ展開 となるわけです。 となると、プログラム中で何度も呼ぶような関数は、inline、特に速度が必要なものに関してはマクロを使ったほうが早くなります。 実例では、某強豪オセロプログラムが残り深さ2の探索はマクロでやってます。 シビアに速度が必要となってきた場合は、マクロ展開が一番、という話でした。 以下、サンプルです 実行結果: Macro 811Inline 1702Nomal 1813 ソース: #include <stdio.h> #include <time.h> #define Max_Macro(a,b) ((a) > (b)? (a):(b)) template <class T> inline T Max_Inline(const T a, const T b){return a>b?a:b; } template <class T> T Max_Nomal(const T a, const T b){return a>b?a:b; } int main(){ time_t begin, end; int buf; // マクロ begin = clock(); for(int i = 0; i < 100000000; i++) buf = Max_Macro(i, 1000); end = clock(); printf("Macro %d", end-begin); // inline begin = clock(); for(int i = 0; i < 100000000; i++) buf = Max_Inline(i, 1000); end = clock(); printf("Inline %d", end-begin); // 通常 begin = clock(); for(int i = 0; i < 100000000; i++) buf = Max_Nomal(i, 1000); end = clock(); printf("Nomal %d", end-begin); return 0; }
関連するQ&A
- 戻り値と返り値の違い
タイトルの通りの質問内容です。 僕が調べた限りは「同じ」と言う意見が多数でした。 中には ・参照渡しした引数の関数通過後の結果が戻り値、 関数自体が返すのが返り値 とか ・引数なしの関数で戻るのが戻り値、引数ありの関数で 戻るのが返り値 とかはたまたその逆とか、混沌としています。 気になります。
- ベストアンサー
- その他(プログラミング・開発)
- VB 関数
初めまして。 VB初心者なので,簡単な質問なのかしれませんが御願いします。 C言語で, int main (void) 戻り値の型 関数名 戻り値なし と書きますが,これと同じ意味を持つプログラムをVBで書くとどのようになりますか? 関数の作り方がまだわかってないので教えていただけますか? 宜しく御願いします。
- ベストアンサー
- Visual Basic
- mallocの書式について
初心者です。プログラム上でメモリを確保するmallocという関数がありますが書式がいまいち良くわかりません・・。 戻り値? * malloc(確保する型 * 確保する数) のように書いてますけどmallocの前のはやはり戻り値?そのまえの*は?いまいちわかりません。よろしくお願いします。
- ベストアンサー
- C・C++・C#
- ワンデー アキュビューディファインの購入で迷ってます
現在ハードコンタクトレンズ使用者です。試供品でもらった「アキュビュー(ディファインでない)」を使用して、楽だったので普通の分(2000円を左右二箱分)買う事にしました。週に1回程度しか使わないので 6ヶ月位かけてゆっくり使うつもりです。 色々、レンズについて調べてると、ディファインというレンズがあるのを知りました。1箱あたり1000円も高いです。しかし、目に力が入るとか、潤んでる感じになるとか・・・たまにそういうクチコミを見ますが、それは、本当なのでしょうか?(=ぱっとみてわかりますか?、するメリットは大きいですか?) あと、使用感が気になります。アキュビューと同じならいいですが、色素の成分とか使ってるせいで、普通のアキュビューより使用感が落ちるなら辞めておこうと思いますが。 どなたか、使った事のある方、もしくは詳しい方で アドバイスを頂けたら助かります。
- ベストアンサー
- ヘルスケア(健康管理)
- Delphiでの関数の戻り値を別の型で複数に。
どうお過ごしですか、ご主人様? 少し困っている事があるんですぅー。 Delphiで関数の戻り値を別の型で、複数にしたいのですが、どうしたらいいのでしょうか? そもそもこういう場合は別の関数に分けた方がいいのでしょうか? 内容は数十行しかなく、まとめたい処理なんです。 グローバル変数は、なんかかっこ悪いので使いたくないし、クラスはまだよく分からないし。 あ、でもでも、普通は関数を分けるんでしょうか? よろしくお願いします。
- 締切済み
- その他(プログラミング・開発)
- mysql_connect関数の使い方
mysql_connect関数の、戻り値の使い方についての質問です。 mysql_connectで検索すると、 【使い方例】 $link = mysql_connect('localhost', 'mysql_user', 'mysql_password'); mysql_close($link); みたいなのが見つかります。(エラー処理は省略) そこで、mysql_connectとmysql_closeの間に、クエリを処理する関数を入れるとします。 【例】 $link = mysql_connect('localhost', 'mysql_user', 'mysql_password'); test();←この関数の処理についての質問です。 mysql_close($link); test(){ mysql_query(”sql文”);} 上記の例の test()関数についてですが、mysql_connectの戻り値の$linkを渡さなくてもいいのでしょうか? いつもは、test($link)見たいにしていました。 しかし、今回は戻り値を渡すのを忘れていたのに、ちゃんと希望通りに動いていました。 今回のように、mysql_connect関数をひらいて、dbの処理をする場合は、 途中の関数に、戻り値を渡さなくてもいいのでしょうか?
- ベストアンサー
- PHP
- 基本に戻って、型について考えてみる
すいません。 サーブレットの所で質問なんですけれども、 戻り値の型が基本型やString型の場合だったら、 変数にどんな値が格納されているのかイメージしやすいんですけれども(例えばすぐ下の例の場合ですね)、戻り値の型がString型以外の参照型の場合には、戻り値が具体的にどのような値になっているのかイメージできなくて困っています。 String str1=br.readLine(); int num1=Integer.parseInt(str1); 例えばenumeration型。 一体この型はどんな型?っていう質問もへんなんですけれども、この型の変数がさしている値というのは具体的にいうとどう表現できるのでしょうか? 基本型やString型は本当に分かりやすいのですけれど。 あと他にもPrintWriter型だとか、Object型だとか、 なぜかイメージできないんですよね。 Enumeration paramNames = request.getParameterNames(); もしよろしければ教えてください。 お願いします。
- ベストアンサー
- Java
- Objective-cの型の初期化について質問です。
Objective-cの型の初期化について質問です。 たとえば次のようなfloat型の戻り値関数を定義していて、 ----------------- - (float) getMoveSize { float moveSize = 1.1f; return moveSize; } ----------------- 関数の戻り値を取得しようとするとコンパイルエラーになります。 ----------------- float height = [self getMoveSize]; //→error: incompatible types in initialization ----------------- どのようにすればよいか教えて下さい。 float height = 0.0f; height += [self getMoveSize] みたいなことをやりたいだけです。
- ベストアンサー
- その他(プログラミング・開発)