Kann später erklärt Funktionsrümpfe in C Referenzeinheiten Inline
Frage
Nehmen wir an, ich habe zwei Inline-Funktionen in meinem Header-Datei:
inline int foo() { return bar()+2; }
inline int bar() { return 3; }
kann ich davon ausgehen, dass ein C99-Compiler „foo“ inline wird, auch wenn ‚bar‘ später erklärt wird? Unter der Annahme, dass keine andere internen Regeln wie Funktionskörper zu groß ausgelöst werden.
Sind Implementierungen von c-Compiler dies zu tun (populäreren sagen Intel-C / Sun Studio / MSVC und gcc), auch wenn C99 läßt dies als eine Option?
Lösung
Solange die Funktionen richtig prototypisiert werden, es wird egal, in welcher Reihenfolge Sie erklären sie in.
Andere Tipps
inline
ist nur ein Hinweis an den Compiler, und mehr als oft nicht es ist in der modernen optimierende Compiler ignoriert. Sie können nichts davon ausgehen, ob etwas inlined wird oder nicht. Einige Compiler bieten Pragmas, die eine bestimmte Funktion zwingen inlined werden, wenn es überhaupt möglich ist (z MSVC __forceinline
) ist. Wenn Sie unbedingt wissen müssen, haben Sie bei der Demontage des Ausgangs suchen.
Wie gesagt, für einen bestimmten Code-Schnipsel, jeder anständige optimierenden Compiler, dass Inline würde, mit inline
oder ohne, solange es sich um eine einzelne Header ist.