Ich hab mich schon immer gefragt woher man eigentlich diese Defines nimmt um C-Code deklarationen so zu schützen, dass sie auch in C++ Code gut reingeholt werden können.
Ja klar, man kann das selber machen, etwas präprozessor bla und los gehts. Aber, das gibts ja vielleicht schon.
Enter #import <sys/cdefs.h>
.
Und das ist in in Apple-Code praktischerweise immer schon includiert und enthält praktische Kleinigkeiten wie:
__BEGIN_DECLS
- jetzt kommen C-Deklarationen__END_DECLS
- fettich__dead2
- diese Funktion kehrt nicht zurück (über das 2 könnte ich mich total amüsieren)__pure2
- diese Funktion hat keine Seiteneffekte__unused
__printflike(formatArg, firstVarArg)
__scanflike(formatArg, firstVarArg)
__COPYRIGHT(string)
- erzeugt eine globale variable__PROJECT_VERSION(string)
- erzeugt eine globale variable__deprecated
Dann gibts natürlich noch <AvailabilityMacros.h> das auch noch ein paar Kleinigkeiten enthält - neben dem ganzen Zeug um APIs zu versionieren sind da auch noch mal Attribute definiert:
- WEAK_IMPORT_ATTRIBUTE -- funktion ist vielleicht da
- DEPRECATED_ATTRIBUTE -- funktion soll nicht mehr verwendet werden
- UNAVAILABLE_ATTRIBUTE -- funktion ist nicht vorhanden (z.B. weil sie API ist die erst in einer späteren Version des Frameworks unterstützt wird)
Vor allem __BEGIN_DECLS
, __END_DECLS
und __deprecated
werde ich mit Sicherheit sofort benutzen. Ob ich die anderen auch verwende, weiß ich noch nicht. Mal schaun. :)