Ich habe mich entschieden, etwas zu versuchen. Ich weiß, Makros sind böse und sollten vermieden werden, aber ich wollte sehen, was passieren wird, wenn ich so etwas mache.Mischen von Inline- und Makrofunktionen
#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);
}
Es gibt:
Macro: 8
Wenn ich die #define
Linie Inline-Kommentar aus zu arbeiten beginnt, und die Ausgabe wird zu Inline: 8
.
Meine Frage ist, warum Compiler entscheidet, Makrofunktion anstelle von Inline zu verwenden. Vielen Dank!
Ich verwende
Linux Mint 18.2
,g++ 5.4.0
, ohne Parameterg++ -g t2.cpp -o t2
.
Oh, deshalb, wenn es ein '# define' gibt, ignoriert es' inline'. Weil '' define' '' add (3,5) 'ersetzt. Vielen Dank! Ich werde deine Antwort 10 Minuten später annehmen. Da stackoverflow die Zeit darauf begrenzt. –
Der Compiler ignoriert "inline" nicht - er sieht den 'add (3,5)' -Funktionsaufruf überhaupt nicht, daher kann er die Funktion 'add' nicht aufrufen, inline oder nicht. –