Hallo Community, ich habe ein Programm in C für einen AT90USB1287 geschrieben. Ich bin der Meinung, dass das Programm fertig ist. Der Compiler wirft mir nur einen Fehler raus, den ich nicht kapiere. Da ich es in meine Abschlussarbeit einbringen möchte, ist es mir wichtig, dass ich anonym bleibe und es fehlerfrei ist. Deshalb wollte ich jemanden von euch bitten, es zu kontrollieren. Ich biete für die Korrektur ein Entgelt (35 Euro VB) an. Ich kann es per Post schicken oder einfach überweisen. Es handelt sich hierbei um ein Quellcode mit ungefähr 130 Zeilen. In diesem Code wird der Timer angesprochen, der ADC und der USART. Für geübter Programmierer von uC sollte das meines Erachtens nach keine Schwierigkeit darstellen. Ich habe den Quellcode nach bestem Wissen und Gewissen geschrieben. Niemand soll hier glauben, dass er für mich einen Code schreiben soll. Es geht mir wie bereits erwähnt nur um die reine Kontrolle. Ich wäre sehr darüber erfreut, wenn sich jmd. dieser Aufgabe annehmen würde. Wer an dieser Aufgabe interessiert ist, der schreibt mir bitte einfach eine E-Mail an kinseydonatello@gmail.com. Greetz fragenkinsey
Mann, war das früher einfach. Wenn mal jemand drüberschauen sollte, brauchten wir einen Kommilitonen fragen. Wenn das mal nich glatte 0 Punkte in der Rubrik Teamfähigkeit gibt.
Jo echt. Ich hab damals fürs Studium eines Kumpels knapp 1300 Zeilen Assembler geschrieben. Kostenfrei.
Bei sowas kann man doch echt nur herzlich lachen. Da drängt sich die Frage auf: Wenn Du mal fertig bist und in einer Firma als Softwareentwickler arbeitest, machst Du das dann genauso? Einfach mal Quellcode an einen Unbekannten schicken? Da die Antwort jetzt wahrscheinlich ist: "Natürlich nicht, aber ..." -> Wer einmal aufgibt, wird immer wieder aufgeben. Hinsetzten, selber nach dem Fehler suchen. Per aspera ad astra ;-)
Julian Kinsey schrieb: > Der Compiler wirft mir nur einen Fehler raus, den ich nicht kapiere. Dann mal heraus mit der Sprache. Was sagt er denn?
magic smoke schrieb: > Jo echt. Ich hab damals fürs Studium eines Kumpels knapp 1300 Zeilen > Assembler geschrieben. Kostenfrei. Mensch, bist du ein toller Bursche.
Ich weiß. Ich bin der beste!!
:
Bearbeitet durch User
Julian Kinsey schrieb: > ich habe ein Programm in C für einen AT90USB1287 geschrieben. Was jetzt, C oder C++? Richtige™ C++ Compiler Fehler zu entschlüsseln ist deutlich spaßiger als C-Fehler. Und für 35€ macht sich ein guter C++ Programmierer vielleicht einen Kaffee aber mehr auch nicht. magic smoke schrieb: > Jo echt. Ich hab damals fürs Studium eines Kumpels knapp 1300 Zeilen > Assembler geschrieben. Kostenfrei. Na du bist ja geschäftstüchtig :D Ach was! schrieb: > Hinsetzten, selber nach > dem Fehler suchen. Er muss ja nichtmal suchen, der Compiler sagt ja was falsch ist, er muss es nur korrigieren...
Gehts hier immer nur um Geschäft?? 1300 Zeilen in Assembler sind schnell geschrieben, ist nicht so viel wie es klingt. Dauert in Hochsprachen ein wenig länger. 130 Zeilen in PHP oder so schreib ich unter einer Stunde, ist also auch nicht gerade viel. C kann ich leider nicht, sonst würde ichs machen.
Julian Kinsey schrieb: > Der Compiler wirft mir nur > einen Fehler raus, den ich nicht kapiere. Google frage, oder den fehler-text hier posten! Typisches "hmmm... geht nicht. ich habs verbockt, aber mach du das mal weg!" Das ist DEIN Abschluss, also tu auch was dafür. Wow, Julian Kinsey schrieb: > Quellcode mit ungefähr 130 Zeilen respekt. War bestimmt viel aufwand... Wenn du das schon nicht hinbekommst, würd ich mal drüber nachdenken ob das wirklich deine Julian Kinsey schrieb: > Abschlussarbeit ist.egal was für ein abschluss, traurig wenn du nicht mal google benutzen kannst! Julian Kinsey schrieb: > Es geht mir wie bereits erwähnt nur um die reine Kontrolle. Das macht doch der Compiler für dich. Und solange der schreit, bist du nicht fertig. Der ist sogar so freundlich dir zu sagen was, wo, warum nicht passt.
Hallo, wie lautet den der Fehler ? Vielleicht genügt schon ein kleiner Tip, und Du kannst das Problem selber lösen. An die anderen: was soll das Dumme Gequatsche ? Jogibär
Kaj schrieb: > Der ist sogar so freundlich dir zu sagen was, wo, warum nicht passt. Da habe ich bei C manchmal meine Zweifel. Ein fehlendes ";" und der blubbert einen wegen seines gesamten Unverständnisses des restlichen Quelltextes voll.
Jack Daniels schrieb im Beitrag #3397798: > Es ist auch nicht dümmer als das Eingangsposting des TOs. > Du kennst die Schalleigenschaften von Wäldern (aka Echo etc.)? Was ist denn bitte am Eingangsposting des TOs dumm ??? Jogibär
Mike schrieb: > Da habe ich bei C manchmal meine Zweifel. > Ein fehlendes ";" und der blubbert einen wegen seines gesamten > Unverständnisses des restlichen Quelltextes voll. deswegen schaut man sich als erstes die erste Fehlermeldung an
Julian Kinsey schrieb: > Der Compiler wirft mir nur > einen Fehler raus, den ich nicht kapiere. Nur einen einzigen, das sollte also kein Problem sein. Die Erfahrung lehrt allerdings, dass, nur weil der Compiler nichts mehr zu meckern hat, das Programm noch lange nicht fertig ist ;-)
Ach fehlendes ";" geht ja noch. Da weißt Du immerhin, wo Du suchen mußt. Vergiss mal in PHP ein "}", da hast Du Freude dran!
Michael Jogwich schrieb: > Was ist denn bitte am Eingangsposting des TOs dumm ??? z.B. dass er nicht weiß in welcher Sprache sein Programm geschrieben ist. In der Überschrift steht C++ im Text C.
Poste doch einfach mal den Code und die Compilerwarnungen/Fehler. Dann wird dir sicher geholfen.
Julian Kinsey schrieb: > Da ich es in meine Abschlussarbeit einbringen möchte, Abschlussarbeit? Welche Abschlussarbeit? Als ich deine restlichen Fragen hier im Forum gesehen habe, bin ich eigentlich von einem Neuling ausgegangen und nicht von jemanden, der seinen Abschluss macht. Na, bumm. Das allerdings stellt jetzt alles in ein ganz anderes Licht.
:
Bearbeitet durch User
Karl Heinz schrieb: > Na, bumm. Das allerdings stellt jetzt alles in ein ganz anderes Licht. Es ist ja nicht klar was für ein Abschluss. Wenn irgendetwas technisches, dann ist das schon peinlich. Aber vielleicht ist er ja z.B. Biologe und hat zu seinem Verhaltensexperiment die Elektronik und Software selber gemacht. Das wäre dann auch mit Forumsunterstützung schon gut.
Mike schrieb: > Kaj schrieb: >> Der ist sogar so freundlich dir zu sagen was, wo, warum nicht passt. > > Da habe ich bei C manchmal meine Zweifel. > Ein fehlendes ";" und der blubbert einen wegen seines gesamten > Unverständnisses des restlichen Quelltextes voll. Ja, und wenn man da 2 mal drüber gestolpert ist, erkennt man das Muster und denkt sich: Das kann nicht sein, da können keine 150 Fehler drinnen sein - nicht mit diesem Fehlermuster. Das muss ein vergessener ';' oder eine vergessene '}' oder sonst irgendwas in dieser Richtung sein, und beginnt an der vom Compiler genannten Codezeile rückwärts zu suchen, wo der Fehler sitzt. Für jemand mit ein bißchen Erfahrung ist ein vergessener ';' kein allzugroßes Problem, das er nicht in 10 Minuten gefixt hat. Vergessene } können da schon unangenehmer sein, aber dagegen ist ein sauberes und konsequentes Einrückschema eine gutes Hilfsmittel. Ganz im Gegenteil: Macht man kleine Erweiterungen und dann tauchen plötzlich 200 Fehler aus dem Nichts aus, dann ist der (einzige) Fehler meist recht trivial, wie zb ein vergessenes ';'. In diesem Sinne darf man sich einfach nicht ob der schieren Menge an Fehlermeldungen ins Boxhorn jagen lassen. Hat man das Problem gefixt, verschwinden diese 200 Fehler wieder ins Nichts.
:
Bearbeitet durch User
lilala schrieb: > Karl Heinz schrieb: >> Na, bumm. Das allerdings stellt jetzt alles in ein ganz anderes Licht. > > Es ist ja nicht klar was für ein Abschluss. Wenn irgendetwas > technisches, dann ist das schon peinlich. Aber vielleicht ist er ja z.B. > Biologe und hat zu seinem Verhaltensexperiment die Elektronik und > Software selber gemacht. Das wäre dann auch mit Forumsunterstützung > schon gut. Nö. Nicht wirklich. Einer der allerwichtigsten Punkte in der Technik bzw. den Naturwissenschaften ist es, die Frage beantowrten zu können: Was kann ich und was kann ich nicht? Vor ihr stand Jack Sparrow einst, als er sich frug, ob er sein Schiff alleine nach Tortuga segeln könne oder nicht. Jemand der sich auf eine Abschlussarbeit einlässt über etwas das er nicht kann und das er auch nicht lernen will, ist für mich kein Held.
:
Bearbeitet durch User
Karl Heinz schrieb: > Julian Kinsey schrieb: > >> Da ich es in meine Abschlussarbeit einbringen möchte, > > Abschlussarbeit? > Welche Abschlussarbeit? Wahrscheinlich wieder sowas dubios schulisch-technisches. Wie die ganze HTL'ler die hier immer aufschlagen.
cyblord ---- schrieb: > Karl Heinz schrieb: >> Julian Kinsey schrieb: >> >>> Da ich es in meine Abschlussarbeit einbringen möchte, >> >> Abschlussarbeit? >> Welche Abschlussarbeit? > > Wahrscheinlich wieder sowas dubios schulisch-technisches. Wie die ganze > HTL'ler die hier immer aufschlagen. Wobei das für einen HTL-er ganz schön peinlich wäre. Auch im Zusammenhang mit den restlichen Fragen des Fragestellers. Da er aber in einem Post das Satzfragment ("früher in der Schule") benutzt, geh ich nicht von einer HTL aus.
:
Bearbeitet durch User
Das mit den vergessenen "}" ist halt deswegen so blöde, weil PHP einfach nur "unexpected end, expecting }" in der letzten Zeile des Quellcodes meldet. Hat der Quellcode nun 50kByte und man hat das } irgendwo mittendrin vergessen, überkommen einen ziemliche Hassgefühle.
magic smoke schrieb: > Das mit den vergessenen "}" ist halt deswegen so blöde, weil PHP einfach > nur "unexpected end, expecting }" in der letzten Zeile des Quellcodes > meldet. Hat der Quellcode nun 50kByte und man hat das } irgendwo > mittendrin vergessen, überkommen einen ziemliche Hassgefühle. LaTex ist da auch speziell.
magic smoke schrieb: > Das mit den vergessenen "}" ist halt deswegen so blöde, weil PHP einfach > nur "unexpected end, expecting }" in der letzten Zeile des Quellcodes > meldet. Hat der Quellcode nun 50kByte und man hat das } irgendwo > mittendrin vergessen, überkommen einen ziemliche Hassgefühle. Obs bei PHP auch funktioniert, kann ich nicht sagen. Bei C ist da eine ganz brauchbare Technik: auskommentieren. Wenn man gar keine Ahnung hat, wo man anfangen soll(*): Geh meinetwegen von ungefähr der File-Mitte aus, scroll etwas rum, bis du einen Funktionsanfang hast. Dann kommentierst du von dort beginnend alle Funktionen bis zum Dateiende aus. Ein
1 | #if 0
|
2 | ...
|
3 | #endif
|
tuts auch, wenn man Kommentare nicht schachteln kann. Ist damit der Klammerfehler behoben? Wenn ja, dann hast du auch die fehlerhafte Funktion stillgelegt und das #if 0 rutscht nach unten. Solange, bis man die fehlerhafte Funktion gefunden hat. Und dann heißt es eben absuchen, wo sie fehlt. (*)Meistens hat man ja aber sowieso eine gewisse Ahnung, wo das Problem sitzt. Wer 2000 Lines of Code in 50 Funktionen ohne einen einzigen Compilerlauf durchschreibt hat sowieso etwas ganz grundsätzliches nicht verstanden, wie man größere Systeme heute entwickelt. War es früher bei Spielen das berühmte "save often, save early", so ist es in der Entwicklung ein "compile often, compile early". Und damit stellt sich dann meist gar nicht dir Frage, wo genau in einer größeren Source Code Datei man sich ein Problem eingehandelt hat. Und mit größer meine ich ein paar tausend Lines of Code. Mit 130 Zeilen ist das alles ja sowieso überhaupt kein Problem. Das sind noch nicht mal 2 komplette Bildschirmseiten. Sowas sollte man eigentlich überblicken können.
:
Bearbeitet durch User
Julian Kinsey schrieb: > Der Compiler wirft mir nur einen Fehler raus, den ich nicht kapiere. Dann poste doch mal den Fehlertext des Compilers nebst zugehörigem Sourcecode. Ach ja, zum Thema "Klammer zu vergessen" oder "geschweifte Klammer auf vergessen": Ich hab mich schon öfter gefragt, warum C-Compiler keine Meldung à la "File xyz.c has 50 opening brackets, but only 49 closing ones" bringen. Das sollte technisch gesehen doch nicht so schwer sein. Oder?
:
Bearbeitet durch User
Karl Heinz schrieb: > Obs bei PHP auch funktioniert, kann ich nicht sagen. Ist auch völlig unrelevant. PHP ist Müll. Parser und Lexer von PHP sind Müll. Die Sprachdefinition von PHP ist Müll. Die 'Standardbibliothek' von PHP ist Müll. Und das Tragische an alledem ist, man kann jeden dieser Punkte ziemlich gut belegen. > Bei C ist da eine > ganz brauchbare Technik: auskommentieren. Weitere Techniken: Wenn man mit C++ und Templates arbeitet, dann gibts diverse Filter für die Fehlerausgabe des Compilers, da die im Zusammenhang mit Templates meistens völlig unbrauchbar wird. Es kann auch empfehlenswert sein, den Quelltext durch andere Compiler zu drücken. Clang aus dem llvm-Projekt beispielsweise liefert meistens deutlich eindeutigere Fehlermeldungen, als der GCC.
Schreibst Du Webseiten also lieber in C oder Basic. Okay. Jedem das seine. Auch wenn ich finde, daß derjenige Müll ist.
magic smoke schrieb: > Schreibst Du Webseiten also lieber in C oder Basic. Nein, aber es gibt mittlerweile genügend andere Sprachen, die schon in der ersten Auflage ausgereifter und durchdachter waren, als PHP es heute ist. > Okay. Jedem das > seine. Auch wenn ich finde, daß derjenige Müll ist. Erweitere mal deinen Horizont ein wenig.
Mark Brandis schrieb: > Julian Kinsey schrieb: >> Der Compiler wirft mir nur einen Fehler raus, den ich nicht kapiere. > > Dann poste doch mal den Fehlertext des Compilers nebst zugehörigem > Sourcecode. > > Ach ja, zum Thema "Klammer zu vergessen" oder "geschweifte Klammer auf > vergessen": Ich hab mich schon öfter gefragt, warum C-Compiler keine > Meldung à la "File xyz.c has 50 opening brackets, but only 49 closing > ones" bringen. Das sollte technisch gesehen doch nicht so schwer sein. > Oder? Jaein. Ganz so einfach ist es nicht. Dann was der Compiler dann letztendlich zu Gesicht kriegt, ist nicht dasselbe wie das was du ins C-File schreibst. Wenn man berücksichtigt, dass sich nichts und niemand daran hindert ein
1 | void foo( void ) |
2 | {
|
3 | #include "foo.inc" |
4 | }
|
zu machen. Hast du einen {-} Mismatch in der inc-Datei, dann ist die Fehlermeldung erste recht wieder nicht sehr hilfreich. Genauso kannst du ja auch den Text einer Funktion über mehrere Include-Files verteilen. D.h. machbar wäre da sicherlich etwas. Die Frage ist einfach nur: wie hilfreich ist es dann wirklich in den komplexeren Situationen (dort wo es tatsächlich was bringen würde) bzw. wie groß ist denn der Leidensdruck bei den Leuten, die tatsächlich mit größeren Systemen arbeiten müssen. Und gerade bei letzteren ist meine persönliche Erfahrung: Er ist praktisch nicht wirklich vorhanden. Eine fehlende } stellt einen Entwickler vor keine großen Probleme. Die Fehlermeldung mag etwas irreführend klingen, je nach Compiler, aber nach dem 2-ten oder 3-ten mal hat man das intus, eine fehlende } in Betracht zu ziehen. Genauso mit den ';'. Die fiesen ';' Fehler sind die, bei denen am Ende eines Header-Files zb das abschliessende ';' nach einer struct-Definition vergessen wurde, die am Ende des Include Files steht. Stösst man auf sowas das Erste mal, dann sucht man sich schon mal einen Wolf.
:
Bearbeitet durch User
Falls es jemanden interessiert: Hier ist ein "Algorithmus", mit dem recht schnell vergessene "}" gefunden und korrigiert werden können, vorausgesetzt, der Code ist ordentlich eingerückt und enthält keine weiteren Fehler:
1 | 1. Schreibe ganz ans Ende der Quellcodedatei eine zusätzliche |
2 | schließende Klammer (im Bild grün). |
3 | |
4 | 2. Springe mit dem entsprechenden Editorbefehl (beim Vim "%") zur |
5 | korrespondierenden öffnenden Klammer (blauer Pfeil). Wird keine |
6 | korrespondierende Klammer gefunden, gehe zu Schritt 8. |
7 | |
8 | 3. Springe mit dem entsprechenden Editorbefehl (beim Vim "^") zum Beginn |
9 | der aktuellen Zeile (grüner Pfeil). Stehen die öffnenden Klammern |
10 | jeweils in einer eigenen Zeile und in der gleichen Spalte wie die |
11 | korrespondierende schließende Klammer, erübrigt sich dieser Schritt. |
12 | |
13 | 4. Bewege den Cursor manuell vertikal nach unten, bis er auf etwas |
14 | anderes als Einrückungs-Whitspace stößt (roter Pfeil). |
15 | |
16 | 5. Steht der Cursor auf einer schließenden Klammer gehe zu Schritt 2. |
17 | |
18 | 6. Füge oberhalb des Cursors eine Zeile mit einer schließenden Klammer |
19 | ein. |
20 | |
21 | 7. Springe zum Quellcodeende und gehe zu Schritt 2. |
22 | |
23 | 8. Lösche die anfangs hinzugefügte schließende Klammer. |
Im angehängten Bild ist der Ablauf bis ausschließlich Schritt 6 gezeigt. Der Cursor steht jetzt in der Zeile mit dem gelben Punkt. Oberhalb davon fehlt eine schließende Klammer. Wer lustig ist, kann ja ein Skript schreiben, das diese Schritte automatisch ausführt.
:
Bearbeitet durch Moderator
Karl Heinz schrieb: > (*)Meistens hat man ja aber sowieso eine gewisse Ahnung, wo das Problem > sitzt. Wer 2000 Lines of Code in 50 Funktionen ohne einen einzigen > Compilerlauf durchschreibt hat sowieso etwas ganz grundsätzliches nicht > verstanden, wie man größere Systeme heute entwickelt. Das ist richtig, aber anders als du denkst. Größere Systeme werden heute in "managed" Sprachen und mit einer vernünftigen IDE entwickelt. Da ergibt sich das Problem erst garnicht, weil schon bei der Eingabe laufend an der Syntax rumgemäkelt wird, weil die IDE in das Innenleben des Compilers reinsehen kann. Man kommt dann selbst im Halbblindflug keine drei Zeilen über einen Syntax-Fehler hinaus, weil liebgewordene Komfort-Features der IDE dann auch nicht mehr wie gewohnt funktionieren oder nur noch Müll machen. Das motiviert unwahrscheinlich, den Fehler gleich zu suchen und zu beheben... Aber auch mit den "klassischen" Systemen schreiben gelernte Programmierer mal eben 10000 Zeilen Code am Stück und beschäftigen sich dann maximal eine halbe Stunde damit, dem Compiler sein tief verwurzeltes Unverständnis für Typos, vergessene Delimeter, überflüssige Quotes und so'n Zeug auszutreiben und dann compiliert oder assembliert der Code. Kannste glauben. Ich mach' das seit 25 Jahren so. Natürlich ist der Code dann mit an Sicherheit grenzender Wahrscheinlichkeit noch nicht frei von logischen Fehlern. Vermutlich wird er das sogar niemals vollständig. Zumindest nicht beweisbar... Wie auch immer: Sprachen mit sinnvoller Syntax (also C explizit nicht!) helfen jedenfalls nach meiner Erfahrung gewaltig dabei, die Syntax-Fehlerrate niedrig zu halten bzw. zumindest dabei, Syntaxfehler ohne allzu großen Aufwand finden und beheben zu können... Und u.a. deswegen bin und bleibe ich: c-hater.
Mark Brandis schrieb: > Ach ja, zum Thema "Klammer zu vergessen" oder "geschweifte Klammer auf > vergessen": Ich hab mich schon öfter gefragt, warum C-Compiler keine > Meldung à la "File xyz.c has 50 opening brackets, but only 49 closing > ones" bringen. Das sollte technisch gesehen doch nicht so schwer sein. > Oder? Einfach mal Clang benutzen. Der sagt dir sogar, wo du die Klammer vergessen hast :)
1 | purefruit :: /tmp % cat main.c 1 ↵ |
2 | int f(int x){ |
3 | int result = (x/42); |
4 | if(x < 0) { |
5 | result = x/2; |
6 | return result; |
7 | }
|
8 | purefruit :: /tmp % clang main.c |
9 | main.c:6:2: error: expected '}' |
10 | }
|
11 | ^
|
12 | main.c:1:13: note: to match this '{' |
13 | int f(int x){ |
14 | ^
|
15 | 1 error generated. |
c-hater schrieb: > Das ist richtig, aber anders als du denkst. Größere Systeme werden heute > in "managed" Sprachen und mit einer vernünftigen IDE entwickelt. Da > ergibt sich das Problem erst garnicht, weil schon bei der Eingabe > laufend an der Syntax rumgemäkelt wird, weil die IDE in das Innenleben > des Compilers reinsehen kann. LibClang? vim + clang_complete? Makefiles? c-hater schrieb: > Wie auch immer: Sprachen mit sinnvoller Syntax (also C explizit nicht!) > helfen jedenfalls nach meiner Erfahrung gewaltig dabei, die > Syntax-Fehlerrate niedrig zu halten bzw. zumindest dabei, Syntaxfehler > ohne allzu großen Aufwand finden und beheben zu können... Da stimme ich dir allerdings zu.
c-hater schrieb: > Sprachen mit sinnvoller Syntax (also C explizit nicht!) Welche Sprache hat denn eine sinnvolle Syntax? OCaml? Scherz beiseite, ich hätte auch gerne was schöneres.
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.