Forum: Compiler & IDEs Defines Prototypen und Header C


von Thorsten S. (Gast)


Lesenswert?

Hi,

ich habe folgendes:

aaa.c
aaa.h

bbb.c
bbb.h

in bbb.h gibt es ein define bbb_1 welches ich in aaa.h umdefinieren 
(nach aaa_1) und in aaa.c verwenden will.

In aaa.c gibt es eine funktion (aaaDo()) sowie zugehörigen Prototypen in 
aaa.h welche ich in bbb.c verwenden will. Für diesen Fall würde ich 
einfach klassisch den Header von aaa in bbb.c anziehen.

Wie aber sieht das mit dem Fall der defines aus. Da müsste ich ja den 
Header von bbb in den header von aaa einbinden, das klingt nicht gut.

Gruß,
T.

von Thorsten S. (Gast)


Lesenswert?

entschuldigung, bin im Unterforum verrutscht.

T.

von häääääää (Gast)


Lesenswert?

Hä?

mach mal ein gescheites Beispiel mit vernünftigen Namen und den 
angehängten Dateien.

von Thorsten S. (Gast)


Lesenswert?

datei aaa.h

#define AAA_1 BBB_1  //hier will ich BBB_1 nutzen!

void aaaDo (void); //prototyp






datei aaa.c

#include "aaa.h"

void aaaDo (void)
{
   uint8_t x,y;
   x=y+AAA_1;
}




datei bbb.h

#define BBB_1 27






datei bbb.c

#include "bbb.h" //damit ich das Define BBB_1 nutzen kann
#include "aaa.h" //damit ich die Funktion aaaDo() nutzen kann

void bbbDo (void)
{

   uint8_t x,y;

   x=y+BBB_1;

   void aaaDo (void);

}


Ist soetwas denkbar?

von Klaus W. (mfgkw)


Lesenswert?

Thorsten S. schrieb:
> Da müsste ich ja den
> Header von bbb in den header von aaa einbinden, das klingt nicht gut.

Warum nicht?

von Yalu X. (yalu) (Moderator)


Lesenswert?

Thorsten S. schrieb:
> entschuldigung, bin im Unterforum verrutscht.

Hab's mal ins GCC-Forum verschoben und hoffe, dass das passt.

von Karl H. (kbuchegg)


Lesenswert?

Thorsten S. schrieb:

> Ist soetwas denkbar?

Denkbar schon.
Aber das ist die falsche Frage.

Die richtige Frage ist: Ist es sinnvoll oder ist es fehleranfällig?

Und solange du dich in wirren Namensschemata ala aaa und bbb ergehst, 
kann man das nicht entscheiden.

2 Fragen:
Wozu eigentlich das AAA_1, wenn es sowieso identisch zu BBB_1 ist

Wäre es nicht eventuell klüger, die eine Konstante als 
Konfigurationswert anzusehen, der überhaupt in ein eigenes Header File 
verbannt wird, in dem alle Konfigurationen enthalten sind


cccc.h
1
#define CONFIG_VAL 127

aaa.c
1
#include "aaa.h"
2
#include "ccc.h"
3
4
void aaaDo (void)
5
{
6
   uint8_t x,y;
7
   x=y+CONFIG_VAL;
8
}

bbb.c
1
#include "bbb.h"
2
#include "ccc.h"
3
4
void bbbDo (void)
5
{
6
7
   uint8_t x,y;
8
9
   x=y+CONFIG_VAL;
10
11
   aaaDo();
12
}


Ob das sinnvoll ist oder nicht, kann man mit den Namen aaa bzw bbb so 
nicht entscheiden.

von Thorsten S. (Gast)


Lesenswert?

Hey,

entschuldigt dass ich mich jetzt erst wieder melde, aber ich hatte noch 
andere Dinge in c zu lösen.

Also ich habe mir so eine soft spi gebastelt:

spi.c
spi.h

die benutze ich in mehreren projekten..

darin enthalten sind defines für:

PORT,PIN und DDR sowie die Pins der SPI.

Nun will ich eine "Schale" drum rum basteln. In einem Fall z.B.

hc595.c
hc595.h

Es geht dabei um ein Schieberegister, das Teil hat zu den Pins CLock und 
Data (aus SPI) noch ein paar pins für datenübernahme (Strobe_Clock) u. 
Out enable (OE) usw..

nun würde ich das ganze gern so gestalten das ich in dem Header des 
HC595 alle Pins, auch die der SPI festlege, damit ich auf einen Blick 
sehen kann wo die Hardware (hc595) angeschlossen ist.

Also würde ich im Header des HC595 ebenfalls PORT,PIN und DDR 
festlegungen treffen. Ich würde nun die Defines aus HC595.h in SPI 
benutzen, jedoch nutzt hc595.c ja die funktionen aus SPI.c über SPI.h 
Prototypen. Irgendwie dreht man sich mit diesem eigentlich aus meiner 
Sicht logischen Ansatz ein bissl im Kreise... oder?:-)

Gruß,
Thorsten

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