Portál AbcLinuxu, 10. května 2025 07:14

Dotaz: GCC 4.3.0 a inline funkce

15.4.2008 10:27 Marek Vasin
GCC 4.3.0 a inline funkce
Přečteno: 636×
Odpovědět | Admin
Dobry den,

pracuji na rozsahlejsim programu, ktery se sklada z nekolika modulu. Mam dejme tomu 5 modulu (*.c soubory) a tem prislusi rozhrani (jeden *.h soubor). Nyni bych potreboval nektere funkce definovat inline. Klicove slovo inline tady umistim pred prototyp funkce do *.h rozhrani a take pred definici funkce do daneho modulu (*.c soubor). Nyni se pokusim program pomoci make prelozit a dostanu tento warning:

rozhrani.h:67: warning: inline function ‘moje_inline_funkce’ declared but never defined

a na konci jeste hodi error:

program_main.c:145: undefined reference to ‘moje_inline_funkce’

Pouzivam GCC verze 4.3.0. Uplne stejny program jsem zkousel zkompilovat na serveru pomoci GCC 4.2.3 a zde to reklo pouze warning:

program_main.c:10: warning: C99 inline functions are not supported; using GNU89

Pouze tento warning a program se zkompiloval ok a funguje. Je tedy chyba v nove verzi GCC? Pokud ano, velmi bych potreboval vedet jak to vyresit. Preklad provadim s temito parametry: -std=c99 -pedantic -Wall -W -g. Dekuji.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

15.4.2008 10:54 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: GCC 4.3.0 a inline funkce
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud vím, tak se pro inline funkce nepoužívá klíčové slovo inline, ale atribut, takže takhle:

int moje_inline_funkce (int parametr) __attribute__ ((always_inline)); v deklaraci, v implementaci už se to psát asi nemusí (teď nevím, musel bych si to ověřit)

Ale možná se pletu.
Quando omni flunkus moritati
15.4.2008 11:06 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: GCC 4.3.0 a inline funkce
Odpovědět | | Sbalit | Link | Blokovat | Admin

Inline funkce je inline právě proto, že nemá žádou adresu, ale rozepíše se přímo v místě, kde ji chcete použít. Takže ji nemůžete definovat jen v jednom z modulů, ale musíte její definici dát přímo do toho hlavičkového souboru.

Spíš je otázkou, proč vám to předtím přeložit šlo. IMHO proto, že GCC stejně klíčové slovo inline bere spíš jen jako jakýsi hint, takže občas inlinuje funkci, u které inline nepoužijete, a občas naopak z funkce deklarované jako inline, udělá obyčejnou.

15.4.2008 11:08 graviton
Rozbalit Rozbalit vše Re: GCC 4.3.0 a inline funkce
Odpovědět | | Sbalit | Link | Blokovat | Admin
Neni.

Neco k inlinovani s gcc zde: http://www.greenend.org.uk/rjk/2003/03/inline.html

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.