Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Funkcja inline

Ostatnio zmodyfikowano 2015-07-31 13:25
Autor Wiadomość
carlosmay
Temat założony przez niniejszego użytkownika
Funkcja inline
» 2015-07-30 22:07:32
C/C++
inline void show( chaff & st, int n ) { std::cout << st.st_ddd << ",\t" << st.st_sss << std::endl; }

Czy taką funkcję kompilator potraktuje jako inline czy jak zwykłą?

Wiem, że inline używa się raczej do takich konstrukcji
C/C++
inline int fun( int a, int b ) { return a * b; }
Ciekawość.
Sorki jak przynudzam.
P-135509
pekfos
» 2015-07-31 13:19:28
Bardziej niż długość, przeszkadza rekurencja, a inline to tylko wskazówka. Funkcje nie-inline mogą być rozwijane w miejscu wywołania, a inline mogą nie być. Istotniejsze jest to, że słowo inline łagodzi regułę jednej definicji i możesz takie funkcje wstawić do nagłówków, więc kompilatorowi łatwiej taką funkcję rozwinąć.
P-135525
czosnek17
» 2015-07-31 13:25:59
Compiler settings -> compiler flags
Warn if a function can not be inlined and it was declared as inline -Winline

Jak pisał pekfos dopiero rekurencją się udało zmusić kompilator do wypisania ostrzeżenia, ale jak zmieniam bool na void to kompiluje bez ostrzeżeń;
C/C++
#include <iostream>
using namespace std;

inline bool f( long l[] )
{
    static int s;
    s++;
   
    for( int i = 0; i < 99; i++ )
    {
        cout << l[ i ] * l[ i ] << endl;
    }
   
    if( s < 10 )
         f( l );
   
    return false;
}
int main()
{
    long l[ 99 ];
    f( l );
   
    return 0;
}
warning: inlining failed in call to 'bool f(long int*)': call is unlikely and code size would grow [-Winline]
P-135526
« 1 »
  Strona 1 z 1