gerufenes Objekt »128« ist keine Funktion und das bedeutet was?

OP #2192507
Lesenswert?
• ▲
▼
Hallo allerseits!

Hab den bislang merkwürdigsten Fehler produziert der mir je 
untergekommen ist. Und zwar geht es um folgende Zeile
1
board.c:112: Fehler: gerufenes Objekt »128« ist keine Funktion

Der Code der für das Ganze verantwortlich ist hängt im Anhang.

Vielleicht hat ja wer ne Ahnung was der Fehler zu bedeuten hat. Denn 
google schmeisst dazu irgendwie nichts raus.

Danke schonmal im voraus.

Gruß,
  me
Angehängte Dateien:
Moderator #2192512
Lesenswert?
• ▲
▼
In der Zeile davor fehlt das Semikolon.

(1 << UP) ergibt 128, und PORT_OUT expandiert zu irgendetwas, was mit
einer öffnenden Klammer beginnt. Das ganze
1
  (128)(...)

sieht dann wie ein Funktionsaufruf aus, wobei (128) aber keine Funktion
ist. Darüber beschwert sich der Compiler :)
Moderator Persönliche Seite #2192522
Lesenswert?
• ▲
▼
Benjamin S. schrieb:
> Denn
> google schmeisst dazu irgendwie nichts raus.

Wenn überhaupt, müsstest du wohl auf die deutschen Fehlermeldungen
verzichten und englische nehmen.

Yalu X. schrieb:
> In der Zeile davor fehlt das Semikolon.

Good catch. ;-)

Sieht man übrigens besser, wenn man den Code mal über den
Präprozessor schickt:
1
 (*(volatile uint8_t *)((0x0B) + 0x20)) |= ( 1<<2 ) | ( 1<<3 ) | ( 1<<4) | ( 1<<7 )
2
 (*(volatile uint8_t *)((0x0B) + 0x20)) &= ~( 1<<5 ) & ~( 1<<6 );

Durch das felehnde Semikolon entsteht für den Compiler dann sowas
(mal ein paar Konstanten zusammengefasst):
1
*(volatile uint8_t *)0x2B |= 28 | 128(*(volatile uint8_t *)(0x2B)) &= ~( 1<<5 ) & ~( 1<<6 )

Jetzt sollte auch klar werden, warum der Compiler dann versucht hat,
128 als Funktion aufzurufen.
#2192885
Lesenswert?
• ▲
▼
Die C-Syntax erlaubt schon recht verblüffende Konstrukte.

Man kann durchaus eine feste Adresse als Funktion casten, z.B. um eine 
Funktion im Bootloader aufzurufen.

Auch sollte man immer daran denken, daß das Zeilenende unter C kein 
Syntaxelement ist, d.h. die Fehlermeldung kann ihre Ursache in den 
Zeilen davor haben.


Peter
Gast #2195103
Lesenswert?
• ▲
▼
Peter Dannegger schrieb:
> Auch sollte man immer daran denken, daß das Zeilenende unter C kein
> Syntaxelement ist, d.h. die Fehlermeldung kann ihre Ursache in den
> Zeilen davor haben.

Nicht nur das. Auch ein #include bringt solche Fallstricke mit. Der 
Fehler kann also sogar in einer anderen Datei sein, die man vorher mal 
per #include eingebunden hat.
Moderator Persönliche Seite #2195313
Lesenswert?
• ▲
▼
Benjamin S. schrieb:

> Aber ich mein der gcc haut dich dann aber an, wenn der Fehler in nem
> anderen Header ist.

Das Problem ist ja, dass der Fehler gar nicht im Header selbst sitzt,
zumindest nicht aus Sicht des C-Compilers.  Stell dir mal die Datei
a1.h mit folgendem Inhalt vor:
1
typedef struct {
2
  char foo;
3
  int bar;
4
} mumble

und dann ein main.c mit:
1
#include "a1.h"
2

3
int
4
main(void)
5
{
6
  return 42;
7
}

Wenn du das compilieren willst, bekommst du:
1
$ cc -Os -c main.c
2
main.c:3: error: syntax error before "int"

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.