アプリ版:「スタンプのみでお礼する」機能のリリースについて

関数をinlineとして使うとdefineより優れていると聞きました.
ぱっと思いついた感じでは戻り値の型が明確になる感じでしょうか

あとはインクリメントするときになにか弊害が起きそうな気がするのですが,なにかわかりやすい例があれば教えてください.

A 回答 (13件中11~13件)

#defineは文字列の置換でしかない上,C的な意味での名前空間すら持ちません。


そのため,例えば
#define max(x,y) ((x)>(y)?(x):(y))
といった典型的なマクロがあった場合,そのマクロを含むファイルをインクルードしたが最後,その翻訳単位中ではmaxという識別子を一切使えません。

実際,このマクロがWin32 SDKに含まれるWinDEF.hで定義されているため,
http://msdn.microsoft.com/en-us/library/ms709458 …
標準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に対応していないコンパイラではそうもいきませんが……。
    • good
    • 0

 以下の記述が参考になるのではないかと思います。



「 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 より)
    • good
    • 0

defineは関数じゃないで、


用途が違うので、優越を比べるような類のものではないと感じてます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!