__inline と inline で、しまったぁぁぁぁぁーーー!!

アンスコx2付きの inline と、単に inline 。この2つで何が違うのか? …ぶっちゃけ、両方同じ効果がある模様。(ぉ

じゃぁなんで2つあるのかというと、"__" からも分かるとわかるとおり、__inline は その環境(今回の場合はMSVC)の独自拡張なわけです。 面白いことに、"inline" は C++言語でしか利用できませんが、"__inline" はMicrosoft拡張なので C言語でも利用可能です。 C言語でも inline化を狙えるわけですね〜。


ところで、私は __inline を活用している人です。機能は同じとはいえ、MSのコンパイラであるんだから、__inline の方がMS拡張ということで、合致しているではないか! という良く分からない理由から、アンスコ付き Ver を利用しています。

…が、気づいた。 唐突きづいた。

// -- 1つのファイルとする --

// クラス定義
class CManna
{
public:
  void InlineFunc();
};

// inline関数の定義
__inline void CManna::InlineFunc()
{

}

クラスの中にDirectに関数定義をするのが汚らしくてイヤな人なので、クラスの外で定義するのが私流です。 外で定義する場合、インライン化の指定をつけておかないと、他のファイルからこのヘッダーを #include しまくるった時に CManna::InlineFunc が大量にインスタンスかされ、リンクが通らないという問題に遭遇してしまいます。 よって inline 指定必需。

…ですが、使っているのは __inline なわけですよ。 inline じゃなくて。


たったコレだけで、他のコンパイラじゃ通らないコードになっちまう。orz


class キーワードなんざ使っている時点で、C++確定なんだから inline 使った方が正解じゃん… と、思った 23歳の冬。 職と相方と絵描きさん募集中です。