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. :)