Forum: Compiler & IDEs falsche Fehlermeldung bei Modularisierungsversuch


von Egon M. (kpc)


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

von Michael U. (amiga)


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

von Egon M. (kpc)


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

von Oliver (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.