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
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
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
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.