A hívásgráf ( eng. Call graph ) a fordítók felépítésének elméletében egy irányított gráf , amely egy számítógépes program szubrutinjai közötti hívásokat ábrázolja . Konkrétan minden csomópont egy eljárást képvisel, és minden ív (f, g) azt mutatja, hogy az f eljárás meghívja a g eljárást.
A hívási gráf egy programelemzés eredménye, amely felhasználható a program emberi megértésére, vagy további elemzések alapjaként. A hívási grafikon egyik egyszerű felhasználási módja, hogy olyan eljárásokat keressen, amelyeket soha nem hívnak meg.
A hívási grafikon lehet dinamikus vagy statikus. A dinamikus hívási grafikon a program végrehajtásának rekordja. A statikus hívási grafikon a programvégrehajtás összes lehetséges változatát ábrázolja.
Egy program hívásgráfja csomópontok és élek halmaza , abban az értelemben, hogy [1]
Számos programozási nyelven , például C és Fortran írt program közvetlenül kezdeményez eljáráshívásokat, így az egyes hívások célkódja statikusan meghatározható. Ebben az esetben a gráf minden hívási pontjának pontosan egy eljáráshoz van egyedi éle. A közvetett hívások nagyon gyakoriak az objektumorientált programozási nyelvekben.
Egy olyan C programozási nyelvű program, amely egy globális pf mutatót deklarál egy függvénynek, amely paraméterként veszi és egy egész számot ad vissza . Két ilyen típusú függvény létezik, a fun1 és fun2, valamint egy fő funkció, amelynek típusa nem egyezik a pf mutatóval. A három hívópont c1 , c2 és c3 címkével van ellátva – ezek a címkék nem részei a programnak [2] .
int ( * pf )( int ); int fun1 ( int x ) { ha ( x < 10 ) c1 : return ( * pf )( x + l ); else return x ; } int fun2 ( int y ) { pf = & fun1 ; c2 : return ( * pf )( y ); } void main () { pf = & fun2 ; c3 : ( * pf )( 5 ); }A pf legegyszerűbb elemzése a függvények típusainak vizsgálata. A fun1 és fun2 függvények ugyanolyan típusúak, mint a pf mutató, míg a fő funkció más típusú. A program alaposabb elemzése során kiderül, hogy a fő függvényben a pf mutató egyenlővé válik a fun2-vel, majd a fun2 függvényben a fun1 értéket kapja. A programban nincs más hozzárendelés a pf mutatóhoz, így különösen a pf mutató nem mutathat a fő függvényre [2] .