www.mikrocontroller.net

Forum: Compiler & IDEs falsche Fehlermeldung bei Modularisierungsversuch


Autor: Egon Müller (kpc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
als Vorübung zur Modularisierung eines anwachsenden
C-Programmes habe ich versucht, aus der großen
Quelldatei probehalber einmal eine Funktion in eine
separate Quelldatei auszulagern:

Die neue Quelldatei heißt umrechng.c

#include <was hier gebraucht wird>
uint16_t berechng(uint16 q)
{  uint16_t t100 ;
    t100 = q * ....(div Algorithmen)
  return (erg);
}

dazu eine Headerdatei umrechng.h

ifndef _UMRECHNG_H
  #define _UMRECHNG_H
#include <was hier gebraucht wird>
  void berechng(void);
#endif


und in rumpf.c gibt es den Funktionsaufruf

int main(void)
        uint16_t a, b, c;
        a = berechng(c);
        .....

Die Syntax ist in autoditaktischer Manier aus verschiedenen
Quellen vom Forum / Tutorial bzw. meinen C-Büchern zusammengeklaubt,
eine richtig zusammenhängende Darstellung der Syntax hatte ich nicht
gefunden.
Vielleicht ist meine Syntax richtig - vom Compiler wird sie jedenfalls
nicht beanstandet.

Was er aber bemängelt, ist mir unverständlich:
error: too many arguments to function berechng
error: void value not ignored as it ought to be

Eigenartig an der Fehlermeldung ist, daß ich früher, als die Funktion
noch Teil der main.c war, diese Fehlermeldung nicht bekam, da lief
das Programm einwandfrei und die aus main aufgerufene Funktion 
verarbeitete den übergebenen Wert ganz korrekt.
Nun habe ich die Funktion nur in die neue Datei verschoben und eine
Headerdatei hinzugefügt und aus ist es.

Hat jemand eine Idee, woran das liegen könnte?

Vielen Dank schon mal
Egon

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Du hast in Deiner Headerdatei
  void berechng(void);

Deine Funktion ist

uint16_t berechng(uint16 q)

Fällt Dir da was auf?

Was er aber bemängelt, ist mir unverständlich:
error: too many arguments to function berechng
error: void value not ignored as it ought to be

Der Compiler hat doch recht:
Du sagst ihm, es gibt eine Funktion ohne Übergabeparameter und ohne 
Rückgabewert.
Dann rufst Du sie aber doch mit Parameter auf und er mault...
Du gibst einen Wert zurück, hast aber erklärt, die Funktion hat keinen 
Rückgabewert.
Mault er also wieder zurecht.

Bring eben den Prototy der Funktion in Ordnung.

Gruß aus Berlin
Michael

Autor: Egon Müller (kpc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Michael

Du hattest recht! Die im Original richtige Version
war beim Kopieren unvollständig und dann habe ich sie
manuell ergänzt, leider falsch.

Vielen Dank
aus dem Kraichgau

Egon

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Was er aber bemängelt, ist mir unverständlich:

>void berechng(void);
>uint16_t berechng(uint16 q)

Da sind halt gleich zwei Fehler drin.

Oliver

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.