Я пытаюсь написать макрос, подобный следующему:
#ifndef DEPRECATED_ATTRIBUTE_MESSAGE
#define DEPRECATED_ATTRIBUTE_MESSAGE(message) __attribute__((deprecated (message)))
#endif
И это работает, но только с компилятором Apple LLVM 3.0.Он ломается во время компиляции для чего-то еще, означающего, что я должен сократить его до
#ifndef DEPRECATED_ATTRIBUTE_MESSAGE
#define DEPRECATED_ATTRIBUTE_MESSAGE(message) __attribute__((deprecated))
#endif
, что гораздо менее полезно.
Мой вопрос:
Я думаю, что решениезаключается в применении некоторого макроса для определения версии компилятора во время компиляции.Есть ли способ отличить компилятор Apple LLVM 3.0 от LLVM GCC 4.2 или GCC 4.2 (или чего-либо еще)?
В идеале мне бы хотелось разработать что-то подобное, но я не могу найтиправильный макрос, чтобы понять это:
#ifdef [Apple LLVM 3.0]
#ifndef DEPRECATED_ATTRIBUTE_MESSAGE
#define DEPRECATED_ATTRIBUTE_MESSAGE(message) __attribute__((deprecated (message)))
#endif
#else
#ifndef DEPRECATED_ATTRIBUTE_MESSAGE
#define DEPRECATED_ATTRIBUTE_MESSAGE(message) __attribute__((deprecated))
#endif
#endif