Ingo schrieb:
> warning: 'struct Values_s' declared inside parameter list [enabled by
> default]
Irgendwann wirst auch du nicht drum herum kommen, dir mal 2 Fragen zu
stellen
* was will mir der Compiler mit dieser Fehlermeldung sagen? Was steht in
der Fehlermeldung? Und wie lässt sich das mit den C Regeln in Einklang
bringen?
* Warum zum Teufel hab ich eigentlich nicht längst ein C-Buch
durchgearbeitet anstatt mich hier durch Rumraten zum Hampelmann zu
machen?
Data.h
1 | #ifndef DATA_H_INCLUDED
|
2 | #define DATA_H_INCLUDED
|
3 |
|
4 | struct Values_s {
|
5 | ...
|
6 | };
|
7 |
|
8 | #endif
|
Function.h
1 | #ifndef FUNCTION_H_INCLUDED
|
2 | #define FUNCTION_H_INCLUDED
|
3 |
|
4 | #include "Data.h"
|
5 | void SetData( struct Values_s * data );
|
6 |
|
7 | #endif
|
main.c
1 | #include "Data.h"
|
2 | #include "Function.h"
|
3 |
|
4 | int main()
|
5 | {
|
6 | struct Values_s myData;
|
7 |
|
8 | SetData( &myData );
|
9 | }
|
Function.c
1 | #include "Function.h"
|
2 |
|
3 | void SetData( struct Values_s * data )
|
4 | {
|
5 | data-> .....
|
6 | }
|
Jedes C File ist in dem Sinne vollständig, dass alle Defintionen und
Deklarationen in jedem C-File bekannt sind. Und durch die Includes ist
sicher gestellt, dass sie auch in allen C Files konsistent gleich sind.
Man kann jedes C-File für sich hernehmen und von jedem Begriff, der
darin vorkommt und der kein C-Schlüsselwort ist, exakt sagen, wofür
dieser Begriff steht bzw. welche 'innere Struktur' er hat (im Falle der
struct). Und zwar NUR durch betrachten dieses einen C-Files in seiner
vollständigen Form (also alle include bereits aufgelöst)
NB:
In Function.h würde es theoretisch auch eine Forward-Deklaration der
struct tun. Es schadet aber auch nichts, wenn Function.h ganz einfach
Data.h includiert. Die Regel ist ganz einfach: Verwendet ein C oder H
File etwas, das in einem andern H-File definiert wird, dann wird von
diesem C oder H File genau dieses andere H File auch includiert.
Function.h verwendet etwas (nämlich den Namen der Struktur) aus Data.h,
ergo hat es den include durchzuführen.