Ich hab mal eine kleines Frage zum einbinden von Sourcefiles unter Verwendung des Programms Mfile. Dort existiert ja die Möglichkeit C/C++ sourcefile(s) anzugeben. Ich kenne es nur so, dass man bei der Aufspaltung seines Projects in C mit Header Dateien arbeitet. Wie kann ich denn die Verbindung zwischen Sourcefile und Headerfile erstellen. Oder include ich im Hauptprogramm einfach ein "XXX.c" Das sieht ganz schön seltsam aus. Wenn mir jedmand weiterhelfen kann, bin ich ihm sehr dankbar.
Die C-Dateien gibst du im Makefile an. .h-Dateien baust du dazu (entweder eine einzige fürs ganze Projekt oder eine pro C-Datei, wie du gern magst), um die exportierten Daten, Typen und Funktionen der einzelnen C-Dateien den anderen C-Dateien kund zu tun. Diese werden dann mittels #include in die C-Dateien eingebunden, damit sie Kenntnis bekommen, welche Sachen in den anderen C-Dateien vorhanden sind.
Das klingt gut. Genau so möchte ich es gerne haben aber nun bekomme ich die Fehlermeldung: warning: function declaration isn't a prototype wenn die Funktionen Parameter erwarten. Wie kann ich diesen Fehler vermeiden???
Ich gebe mal am besten noch den Quellcode an, sonst redet man eventuell nur aneinander vorbei: Header:
1 | static void SSA_test (void); |
2 | static void get_digit (uint8_t num, uint8_t digit[]); |
3 | static void num_test (uint8_t num); |
Source:
1 | uint8_t SSA[10] = {238, 6, 205, 233, 99, 171, 175, 224, 239, 235}; |
2 | |
3 | void SSA_test (void) { |
4 | uint8_t i; |
5 | for (i=0; i<10; i++) { |
6 | PORTA = SSA[i]; |
7 | _delay_ms(500); |
8 | }
|
9 | }
|
10 | |
11 | void get_digit (uint8_t num, uint8_t digit[]) { |
12 | digit[0] = num / 100; |
13 | num %= 100; |
14 | digit[1] = num / 10; |
15 | digit[2] = num %= 10; |
16 | }
|
17 | |
18 | |
19 | void num_test (uint8_t num) { |
20 | uint8_t digit[3]; |
21 | get_digit (num, digit); |
22 | uint8_t i; |
23 | for (i=0; i<3; i++) { |
24 | PORTA = SSA[digit[i]]; |
25 | _delay_ms(500); |
26 | }
|
27 | }
|
Also nur bei den unteren Funktionen im Header ärgert er mich. Wenn ich noch irgendwelche Fehler gemacht habe, könnt ihr mich gerne darauf hinweisen. Ich lerne gerne g
gut da war ich etwas zu schnell ;) mach statt static void SSA_test (void); void SSA_test (void); btw wtf soll static bei so ner lustigen funktion??? ich sehe schon sinn dabei wenns sich um klassen dreht aber in c??? 73
> btw wtf soll static bei so ner lustigen funktion??? ich sehe schon > sinn dabei wenns sich um klassen dreht aber in c? Guter Programmierstil. Alles, was nicht exportiert sein muss, soll auch nicht exportiert werden.
gut das jetzt WE ist.. da werd ich dann gleich mal ansi wälzen... wie meinst du exportiert??? aus dem file raus oder wie ??? und warum zum teufel tut der dann da meinen, dass das kein prototyp ist??? 73
Sorry wegen dem static. Das war auch nur ein verzweifelter Versuch den Fehler zu beseitigen. Doch auch ohne static bekomme ich immer noch diese Fehlermeldung. Habt ihr vielleicht noch nen kleinen Denkanstoß für mich heute morgen?
meiner meinung nach müssste void SSA_test (void) { so aussehen.. void SSA_test () { wobei ich mir da nicht sicher bin.. vergleich mal die zeile wo sich der compiler aufregt mit der zeile wo die funktion beginnt... wenn die gleich sind void weg.. sonnst unserren gcc-guru befragen G 73
> wie meinst du exportiert??? aus dem file raus oder wie ??? Ja, ohne "static" ist der Bezeichner global (über alle Module) bekannt, sonst nur innerhalb des Moduls. Ergo, alles was man nur innerhalb braucht, macht man static. > meiner meinung nach müssste > void SSA_test (void) { > so aussehen.. > void SSA_test () { In C++ wäre beides dasselbe, in C nicht. In C wäre letzteres eine non-prototype declaration (falls es selbst die Deklaration darstellt, im Beispiel stand aber eine drüber und es ist nur die Definition). Nö, aus dem geposteten Quelltext ist nicht ersichtlich, was der Compiler wo bemängelt haben sollte.
wie oben schon gesagt, meckert er nur bei den beiden unteren Funktionen mit Parameter (das verstehe ich ja gerade nicht). Der genaue Fehler lautet: 8bitbcd.h:2: error: parse error before "num" 8bitbcd.h:2: warning: function declaration isn't a prototype 8bitbcd.h:3: error: parse error before "num" 8bitbcd.h:3: warning: function declaration isn't a prototype wobei die Headerdatei bislang auch nur aus diesen ersten drei Zeilen besteht, die ich oben schon gepostet habe.
hast du den comischen int-header im include ?? ;) der kennt nämlich den uint8_t nicht... 73
Das klingt ganz gut.... Muss aber leider kurz mal ne Pause einlegen... Werde es ausprobieren und mich dann später wieder melden. Vielendank aber schon mal für eure zahlreiche Hilfe. Bin immer wieder froh, dass es Leute wie euch gibt.
Mist... ich kann mich einfach nicht vom PC losreißen aber dafür war dein Tip richtig, Hans. Ihm felhte die <stdint.h>. Nochmals vielen Dank! Vielleicht kann ich mich ja mal revangieren.
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.