mikrocontroller.net

Forum: Compiler & IDEs Frage zu __attribute__ ((noinline))


Autor: xjn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte explizit inlining für bestimmte Funktionen verbieten, da
der erzeugte Code manchmal zu gross ist.

Dabei erzeugt folgende Konstruktion einen Compilerfehler
:expected ')' before '__attribute__'
:expected identifier or '(' before ')' token
static __attribute__((noinline))
void function( type param1 )
{
    ...
}


... und diese Konstruktion funktioniert !
#define noinline __attribute__((noinline))

static noinline
void function( type param1 )
{
    ...
}

Auch ist es egal, ob ich das _attribute_ vorne, mittig oder hinten bei 
der Function angebe.

Ich verstehe nicht warum das so ist und bitte um Hilfe dazu.

Compiler : avr-gcc (WinAVR 20081205) 4.3.2

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

versuche es mal mit __attribute__((_noinline_))

MfG

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag:
((noinline)) vorne und hinten mit 2 unterstrichen. Die Forumssoftware 
scheint hier anderer Meinung zu sein.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich trenn immer zwischen Deklaration und Implementierng:
static void __attribute__((noinline)) foo (void);

...

void foo (void)
{
    ...
}

Evtl. helfen auch Optionen wie -fno-inline-small-functions oder das 
Setzten von Inline-Limits?

Autor: xjn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es funktioniert ja, aber eben nur in der #define Variante.

@Gast
Mit
__attribute__((__noinline__))
geht es. Kein Compilerfehler mehr, verstehe aber nicht warum ...


@Johann L.
Der Compiler meldet auch bei Trennung von Deklaration und Implementation
den Fehler. Die Optionen sollten bei explizitem noinline keine 
Auswirkung haben. Es geht ja auch um den Syntax-Compilerfehler ...


Meine eigentliche Frage ist aber, warum es mit der #define Variante 
geht, auch ohne _noinline_ ( mit zwei '_').

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
xjn wrote:
> @Johann L.
> Der Compiler meldet auch bei Trennung von Deklaration und Implementation
> den Fehler. Die Optionen sollten bei explizitem noinline keine
> Auswirkung haben. Es geht ja auch um den Syntax-Compilerfehler ...

Intention dabei ist, nicht bei jeder Funktion hinterherlaufen zu müssen 
und zu schauen, ob gcc sie evtl. inlinet obwohl man das nicht will. In 
dem Falle spart man sich die zig-fache noinline-Attribuierung im 
Projekt, indem man dem Compiler sagt, daß er bitte Kleingerüffel nicht 
standardmässig inlinet.

> Meine eigentliche Frage ist aber, warum es mit der #define Variante
> geht, auch ohne _noinline_ ( mit zwei '_').

Evtl. weil du mit -ansi oder so übersetzt?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
xjn wrote:

> Meine eigentliche Frage ist aber, warum es mit der #define Variante
> geht, auch ohne _noinline_ ( mit zwei '_').

Weil du das #define auch bei der "ohne define"-Variante noch obendrüber
stehen hast. :-)  Was der Präprozessor dann draus macht ist:
static __attribute__((__attribute__((noinline))))
void foo(char c)
{
 x = c;
}

Autor: xjn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jörg Wunsch

Jaah, das ist es !

Wenn ich das #define 'xx' statt 'noinline' nenne, habe ich den gleichen 
Fehler :)

Ich nehme jetzt
__attribute__(__noinline__)
und alles ist Ok.

Danke an alle für die schnelle Hilfe ...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.