Что это за #ifdef __GNUC__?
Я нашел эти строки в коде libmagic
. Что они имеют в виду?
#ifdef __GNUC__
__attribute__((unused))
#endif
Что означает __GNUC__
?
Кажется, чтобы проверить , установлен ли GCC.
Что такое __attribute__((unused))
?
Здесь есть фрагмент кода, но нет объяснения: Как лучше отключить предупреждение о неиспользуемых переменных?
В чем разница между __GNUC__
и _MSC_VER
?
_MSC_VER
есть какое-то объяснение, но о чем все это?
Как определить, компилирую ли я код с определенной версией Visual Studio?
Напоследок вопрос:
Как я могу сделать то же самое #ifdef
, чтобы проверить, какой компилятор компилирует мой код?
Ответы
Ответ 1
В компиляторах обычно определяют макросы, чтобы определить, что это за компилятор, какая это версия... переносимый код C++ может использовать их, чтобы узнать, может ли он использовать определенную функцию или нет.
Что означает __GNUC__
?
Это указывает на то, что я являюсь компилятором GNU, и вы можете использовать расширения GNU. [1]
Что такое __attribute__((unused))
?
Этот атрибут, прикрепленный к переменной, означает, что переменная, возможно, не используется. GCC не выдаст предупреждение о неиспользованной переменной для этой переменной. [2]
В чем разница между __GNUC__
и _MSC_VER
?
Это два несвязанных макроса. Первый говорит, что я компилятор GNU, а второй - номер версии компиляторов MS. Однако компиляторы MS не должны поддерживать расширения GNU.
Как я могу сделать то же самое #ifdef
чтобы проверить, компилирует ли ОС мой код на Python, используя GNU и MS visual studio?
#if (defined(__GNU__) && defined(_MSC_VER))
// ...
#endif
Ответ 2
Различные компиляторы поддерживают разные функции, иногда по-разному. Вы обнаруживаете серию блоков #ifdef
, чтобы включить поддержку в соответствии с тем, какой компилятор создает код; например, компилятор GNU автоматически определяет __GNUC__
. __CC_ARM
, __ICCARM__
, __GNUC__
, __TASKING__
определяются определенными компиляторами, проект был перенесен и заинтересован в.
Ввод __attribute__((unused))
является индикатором, специфичным для GNU (хотя другие компиляторы также могут поддерживать это сейчас), чтобы заявить, что прикрепленный к нему символ может не использоваться и поэтому компилятор должен предупредить вас об этом состоянии.
Что касается использования этих ifdefs для определения того, какой компилятор создает ваш код, сделайте это так же, как вы читаете в другом проекте для построения C. Это не факторы для вашего кода на Python.