Forum: Mikrocontroller und Digitale Elektronik C- Präprozessor Direktiven


von Dustin M. (db1234)


Lesenswert?

Guten Tag,

ich bin auf folgendes Problem gestoßen:

- Header-Datei
1
#define API
2
API int foo1();
3
API int foo2();
4
API int foo3();

In der c-Datei sind die Funktionen ganz normal aufgeführt
- Source-Datei
1
int foo1()
2
{
3
}
4
int foo2()
5
{
6
}
7
int foo3()
8
{
9
}

Ich bin mir nicht ganz über die Bedeutung der Codezeilen 2,3,4 
(Header-Datei) im klaren, bzw. welchen Nutzen man daraus ziehen kann. 
Warum wurde das so gemacht?

Für mich sind es Funktionsprototypen, die als Makro hinterlegt ist.

Ich denke die Erklärung ist einfach, ich bedanke mich schonmal für eine 
Antwort :)

von 🐧 DPA 🐧 (Gast)


Lesenswert?

Das Macro ist nur das "API" das bei dem define ja einfach weg kommt. 
Macht also nichts.

Sowas kann aber trotzdem für diverses nützlich sein. Man sieht z.B. so 
sehr einfach, welche Funktionen teil der API sind. Dann kann man z.B. 
auch einfach nach "API" greppen.

Man kann so auch einfach was vor alle Funktionen schreiben.
Es ist z.B. nicht unüblich, bei Libraries noch ein __declspec(dllexport) 
vor exportierte Funktionen davorzusetzen, das macht man dann gerne mit 
einem define. Unter linux / ELF mach ich sowas auch gerne 
"-fvisibility=hidden" und "__attribute__((visibility("default")))". 
Manchmal mache ich Symbole auch weak, wenn sie überschreibbar oder 
optional sein sollen und so zeug, und packe das dann in ein Macro. So 
ein Macro kann man auch Platformabhängig definieren, indem man es in 
#ifdef #endif packt.

von 🐧 DPA 🐧 (Gast)


Lesenswert?

Es könnte auch zu Dokumentationszwecken in einer generierten Codedoku 
dienen.

von g457 (Gast)


Lesenswert?

> Warum wurde das so gemacht?

Weil der Autor kein C kann. Korrekt wäre eher
1
API int foo1(void);

..etc.

> Für mich sind es Funktionsprototypen, [..]

Sind es auch.

> [..] die als Makro hinterlegt ist.

? Störst Du dich an dem 'API'? Damit kann man sehr einfach und zentral 
alle im Header veröffentlichten Funktionen gemeinsam und einheitlich 
umdeklarieren.

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.