私は何かを試すことにしました。私はマクロが悪いことを知っているので避けてはいけませんが、もし私がそうしたことをしたら何が起こるのかを見たいと思っていました。私がコメントアウトした場合インライン関数とマクロ関数を混ぜる
Macro: 8
#define
ラインインラインが動作を開始し、出力はInline: 8
に変身:
#include <iostream>
using namespace std;
inline void add(int x, int y) { cout << "Inline: " << x + y << endl; }
#define add(x,y) (cout << "Macro: " << x + y << endl)
int main()
{
add(3,5);
}
それは出力します。
私の質問は、コンパイラがインラインではなくマクロ関数を使用することを決めた理由です。ありがとうございました!
私はパラメータなし
g++ -g t2.cpp -o t2
と、Linux Mint 18.2
、g++ 5.4.0
を使用しています。
ああ、そういうわけで、その周りに '#define'があると' inline'は無視されます。 '#define'が' add(3,5) 'を置き換えるためです。ありがとうございました! 10分後にあなたの答えを受け入れるでしょう。 stackoverflowは時間を制限するので –
コンパイラは "インラインを無視"しません - 'add(3,5)'関数呼び出しはまったく表示されないので、 'add'関数をインラインで呼び出すことはできません。 –