• 締切済み

inlineとdefineの違い

関数をinlineとして使うとdefineより優れていると聞きました. ぱっと思いついた感じでは戻り値の型が明確になる感じでしょうか あとはインクリメントするときになにか弊害が起きそうな気がするのですが,なにかわかりやすい例があれば教えてください.

みんなの回答

回答No.3

#defineは文字列の置換でしかない上,C的な意味での名前空間すら持ちません。 そのため,例えば #define max(x,y) ((x)>(y)?(x):(y)) といった典型的なマクロがあった場合,そのマクロを含むファイルをインクルードしたが最後,その翻訳単位中ではmaxという識別子を一切使えません。 実際,このマクロがWin32 SDKに含まれるWinDEF.hで定義されているため, http://msdn.microsoft.com/en-us/library/ms709458.aspx 標準C++の<limits>のstd::numeric_limits<T>::max関数や,<algorithm>のstd::max関数がひっかかり,コンパイルエラーになると言う洒落にならない事態も発生していました。 example) http://ml.tietew.jp/cppll/cppll_novice/article/831 基本的に,C++ではinline関数やconstを使うのが普通ですし, Cでもinline関数にすることをお勧めします。 # 10年前に策定された,C99に対応していないコンパイラではそうもいきませんが……。

全文を見る
すると、全ての回答が全文表示されます。
  • oldman50
  • ベストアンサー率29% (8/27)
回答No.2

 以下の記述が参考になるのではないかと思います。 「 Inline functions replace the usual macros in C and have an important advantage : inline functions are not 'blind' text replacements. From the point of view of semantics, they are not different from normal functions. As with functions, a type checking occurs and the same scopes exist. There are no side effects caused by a missing bracket. As far as the semantics of a program are concerned, it makes no difference whether functions are declared inline or not. Only running time is influenced. 」 (Nicolai M.Josuttis, "Object-oriented Programming in C++", p.174 より)

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

defineは関数じゃないで、 用途が違うので、優越を比べるような類のものではないと感じてます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 関数ヘッダ?

    {コメントで関数の働きや、引数や戻り値(=関数の返す値)これらの関数を説明するコメント文を関数ヘッダと読んだりもします。} とネットでは書いてあったのですが実際にはどんな感じで書くのかよくわかりません。そしてこれをどこに書けばいのでしょうか? 例としてはこんな感じですか?(多分というか絶対間違ってると思いますが) 関数ヘッダの記述は自由でいいと聞きました。 :関数ヘッダ 関数名 : main   型  :型の動きを書く      引数  : 引数の動きを書く   戻り値 : 0   履歴 :名前  修正内容 日付

  • 戻り値と返り値の違い

    タイトルの通りの質問内容です。 僕が調べた限りは「同じ」と言う意見が多数でした。 中には ・参照渡しした引数の関数通過後の結果が戻り値、  関数自体が返すのが返り値 とか ・引数なしの関数で戻るのが戻り値、引数ありの関数で  戻るのが返り値 とかはたまたその逆とか、混沌としています。 気になります。

  • VB 関数

    初めまして。 VB初心者なので,簡単な質問なのかしれませんが御願いします。 C言語で,   int      main        (void) 戻り値の型    関数名      戻り値なし と書きますが,これと同じ意味を持つプログラムをVBで書くとどのようになりますか? 関数の作り方がまだわかってないので教えていただけますか? 宜しく御願いします。 

  • mallocの書式について

    初心者です。プログラム上でメモリを確保するmallocという関数がありますが書式がいまいち良くわかりません・・。   戻り値? * malloc(確保する型 * 確保する数) のように書いてますけどmallocの前のはやはり戻り値?そのまえの*は?いまいちわかりません。よろしくお願いします。

  • ワンデー アキュビューディファインの購入で迷ってます

    現在ハードコンタクトレンズ使用者です。試供品でもらった「アキュビュー(ディファインでない)」を使用して、楽だったので普通の分(2000円を左右二箱分)買う事にしました。週に1回程度しか使わないので 6ヶ月位かけてゆっくり使うつもりです。 色々、レンズについて調べてると、ディファインというレンズがあるのを知りました。1箱あたり1000円も高いです。しかし、目に力が入るとか、潤んでる感じになるとか・・・たまにそういうクチコミを見ますが、それは、本当なのでしょうか?(=ぱっとみてわかりますか?、するメリットは大きいですか?) あと、使用感が気になります。アキュビューと同じならいいですが、色素の成分とか使ってるせいで、普通のアキュビューより使用感が落ちるなら辞めておこうと思いますが。 どなたか、使った事のある方、もしくは詳しい方で アドバイスを頂けたら助かります。

  • 関数の定義

    関数の定義とは ここから 戻り値の型 関数名(引数リスト) {   文;   ・・・   return式; } ここまで のことをいうのでしょうか??あたりまのような質問ですみません。 参考書には、「関数の定義はブロック内にまとめて記述します」 となっているので{ }の中のものだけなのかと思ってしまいました。 初歩的な質問ですがよろしくお願いします。

  • 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] みたいなことをやりたいだけです。

このQ&Aのポイント
  • 万引きは犯罪だから懲役になるのは理解できますが、死刑は行き過ぎではないかと思います。
  • 日本では一人殺しただけでは死刑にならないのに万引きで死刑判決されるなんて有り得ないと思います。
  • 万引きも増え過ぎれば閉店してしまうリスクもあるのは分かりますが、死刑は行き過ぎだと思います。
回答を見る