Hi, ich hoffe ihr wird nicht über meine Frage lachen. ich definiere in header file die Variable uint8_t count; in der main Funkion ich initialisiere count=2; in der unter_routine ich schreibe: void Test_function(uint8_t zahl){ if( count == 4) { error(); } bla; bla bla; count++; } Die Funktion error wie nie aufgerufen obwohl count = 4;
in der Funktion wird eine Kopie der Variable angelegt, es wird nicht die "echte" Variable reingereicht. Dafür mussst du eine Referenz oder ein Zeiger verwenden.
> in der Funktion wird eine Kopie der Variable angelegt, es wird > nicht die "echte" Variable reingereicht. Dafür mussst du eine > Referenz oder ein Zeiger verwenden. Das trifft hier nicht zu. Der übergebene Parameter "zahl" wird gar nicht ausgewertet, sondern eine globale Variable "count". Fragwürdig ist allerdings die Tatsache, daß "count" in einer Headerdatei definiert wird.
Variablen werden nur dann in Headerdateien überhaupt erwähnt, wenn sie aus mehreren Quelltextdateien (*.c) heraus verwendet werden sollen. So etwas nennt man globale Variable. Diese werden in der Headerdatei deklariert (mit dem Schlüsselwort "extern") und in einer Quelltextdatei des Gesamtprojektes definiert. Die Deklaration einer Variablen sagt dem Compiler, daß es irgendwo eine Variable des angegebenen Namens und Typs gibt. Die Definition einer Variablen legt zusätzlich den Speicherort fest. Bei Variablen, die nur innerhalb einer Quelltextdatei verwendet werden sollen, gehört die Definition in genau diese Quelltextdatei, eine Deklaration mit "extern" entfällt hier. Um sicherzustellen, daß auf diese Variable nicht doch versehentlich aus anderen Quelltextdateien zugegriffen werden kann, kann so eine Variable als "static" definiert werden. So etwas nennt man modulglobale Variable. Diese Variable ist weiterhin global, denn sie ist für alle Funktionen im gleichen Modul sichtbar. Eine lokale Variable hingegen ist eine innerhalb einer Funktion definierte Variable, auf diese kann auch nur innerhalb der Funktion zugegriffen werden -- das hier auch zulässige Schlüsselwort "static" hat hier eine ganz andere Bedeutung, nämlich daß die Variable zwischen zwei Funktionsaufrufen ihren Wert behält.
Rufus t. Firefly wrote: > Diese werden in der Headerdatei deklariert (mit dem Schlüsselwort > "extern") und in einer Quelltextdatei des Gesamtprojektes definiert. Es sei denn, man ist geneigt, common Variablen zu verwenden.
Rufus t. Firefly wrote: > So etwas nennt man modulglobale Variable. Diese Variable ist weiterhin > global, denn sie ist für alle Funktionen im gleichen Modul sichtbar. Ich würde sie ehr modulintern nennen, um keine Verwechslung mit globalen Variablen aufkommen zu lassen. Im C-Standard heißen sie Variablen mit "file scope".
Hallo, ich habe gelesen und verändert aber die Funktion Error wird nicht aufgerufen. count habe ich in der header file deklariet, weil es in der main definiert und in dem anderen Quelltestdatei benutzt. Habe ich Zeiger definiert aber kriege ich nicht das Ergebnis. Danke
gast wrote:
> sorry, habe ich nicht das dokument angehängt
Sorry, aber was soll das? Willst du Hilfe haben, oder möchtest du
die C-Syntax-Erratefähigkeiten unseres Compilers testen? Nicht nur,
dass kein Makefile beiliegt (man kann also deine Compileroptionen
nur raten), sondern es ist allesamt kompletter syntaktischer
Schwachsinn.
1 | $ avr-gcc -S -mmcu=atmega8 main.c |
2 | In file included from main.c:7: |
3 | init.h:1: error: expected identifier or '(' before ':' token |
4 | In file included from main.c:7: |
5 | init.h:5:38: warning: no newline at end of file |
6 | main.c:15:2: warning: no newline at end of file |
7 | $ avr-gcc -S -mmcu=atmega8 test.c |
8 | In file included from test.c:7: |
9 | init.h:1: error: expected identifier or '(' before ':' token |
10 | In file included from test.c:7: |
11 | init.h:5:38: warning: no newline at end of file |
12 | test.c:13: error: redefinition of 'Test_function' |
13 | init.h:1: error: previous definition of 'Test_function' was here |
14 | test.c: In function 'Test_function': |
15 | test.c:19: error: 'bla' undeclared (first use in this function) |
16 | test.c:19: error: (Each undeclared identifier is reported only once |
17 | test.c:19: error: for each function it appears in.) |
18 | test.c:20: error: expected ';' before 'bla' |
19 | test.c: In function 'Error': |
20 | test.c:26: error: 'bla' undeclared (first use in this function) |
21 | test.c:27:2: warning: no newline at end of file |
So wird dir keiner vernünftig helfen können.
Die Variable 'count' ist in der Headerdatei 'init.h' als nicht extern definiert. Die Headerdatei wird jedoch in beiden Quellcode-Dateien 'test.c' und 'main.c' includiert. Das heisst; - es wird die Variable 'count' wird 2x angelegt. - Die Variable count aus 'test.c' wird nicht initialisiert. Sie hat also einen zuffäligen Anfangswert. Lösung: int der init.h extern uint8_t count; int der main.c uint8_t count; Jetzt arbeiten beide Quellcode-Dateien mit der gleichen Variable. Gruß Mati.
hallo zusammen, es tut mir leid, ich brauche nur Hilfe ich habe das Programm schnell gefasst, und auch in der init.h das {} vergessen, ich wollte nur ein Teil des Programms senden und nicht die ganze code. Die code ist nicht vollständig und wusste nicht, dass es compiliert wurde,und die Fehler herauszukriegen Danke
Kaufe dir ein C-Buch und mache deine Hausaufgaben. Komm wieder, wenn du Probleme hast, die nicht auf deiner Faulheit beruhen.
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.